OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3693|回复: 1

stm32 独立看门狗问题 不复位死机问题排查

[复制链接]

153

主题

262

帖子

0

精华

高级会员

Rank: 4

积分
895
金钱
895
注册时间
2012-6-29
在线时间
37 小时
发表于 2023-3-29 15:26:37 | 显示全部楼层 |阅读模式
5金钱
我芯片使用的是stm32f103rct6    我使用独立看门狗, 我调试发现 我把PB7配置成推挽输出后, 只要我对PB7进行高低设置,独立看门狗就不会复位(测试时间为60,90 120秒让芯片重启,这些时间都测试过),求大佬指教, 芯片换过

void Laser_Swich_Init(void)
{
       
        GPIO_InitTypeDef GPIO_InitStructure;


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟


        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;//PA8
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
        GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8|GPIO_Pin_9;//PC8 9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
        GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;         // 端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIO


                GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15 ;                                                                                                //设置GPIO子端口号       
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                                     //设置为推挽输出
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                                         //设置端口输出频率为50MHz
          GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                                                                  //初始化端口
               
//                GPIO_ResetBits(GPIOB, GPIO_Pin_13);
//                GPIO_SetBits(GPIOA,GPIO_Pin_15);                                               
//                GPIO_SetBits(GPIOB,GPIO_Pin_7); //PB7 输出高  只要把这个打开后, 不喂狗后就死机
}

void IWDG_Init(u8 prer,u16 rlr)
{       
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器IWDG_PR和IWDG_RLR的写操作
       
        IWDG_SetPrescaler(prer);  //设置IWDG预分频值:设置IWDG预分频值为64
       
        IWDG_SetReload(rlr);  //设置IWDG重装载值
       
        IWDG_ReloadCounter();  //按照IWDG重装载寄存器的值重装载IWDG计数器
       
        IWDG_Enable();  //使能IWDG
}
//喂独立看门狗
void IWDG_Feed(void)
{   
        IWDG_ReloadCounter();                                                                                  
}

        int main(void)
{
                u8 t=0,i=0,Barrier_time=0,Barrier_flag=0;
                float pitch,roll,yaw;                 //欧拉角
                short temp;                                        //温度       
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
                delay_init();                     //延时函数初始化         
                IO_denit();                 
                uart_init(115200);                 //串口初始化为9600         
                USART2_Init(9600);                 //初始化串口2
                USART4_Init(9600);                 //初始化串口4
                ClearRAM((u8*)USART_RX_BUF,100);
          IWDG_Init(4,1250);    //重载值为1250,溢出时间为4s       
                TIM3_Int_Init(99,7199);//10Khz的计数频率,计数到5000为500ms
                usmart_dev.init(72);                //初始化USMART
                Laser_Swich_Init();                                        //初始化按键
                Adc_Init();                                  //ADC初始化                   
                MPU_Init();                                        //初始化MPU6050       
                delay_ms(1000);
                uart_init3(115200);
               
//         iwdg_flag=1;
                while(mpu_dmp_init())
                {
                        printf(" 陀螺仪加载失败\r\n");
                        delay_ms(80);
                }
                printf("陀螺仪加载成功\r\n");
                short_nsm[0]=0;
                short_IP[0]=0;
                short_ID[0]=0;       
                short_Token[0]=0;               
                Sys_Init();
                USART_RX_STA=0;               
                delay_ms(1000);               
                printf("\r\n正在初始化话4G通讯    \r\n");       
                ESP8266_Init();                                        //初始化ESP8266
                UsartPrintf(USART_DEBUG, "\r\n4G通讯初始化成功\r\n");


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2023-3-31 00:42:39 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 12:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表