浅析STM32外部中断易死机解决

本案例stm32死机或程序跑飞是实际产品中出现的,初步怀疑是外部中断口,有极强的干扰所致,于是拿着信号发生器实测,当信号发生器产生300KHz的信号,甚至到12MHz的信号时,期间,程序跑飞或死机。看门狗也无法重启。

解决点:1、初始化时,先关闭总中断,初始化完成后,再开启总中断

 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
  __disable_irq();
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
 
  MX_TIM3_Init();
  MX_IWDG_Init();
  MX_RTC_Init();
  
  /* USER CODE BEGIN 2 */  
  PVD_Config();
  TM1638_Init();
  light_Init();
  readConfigPara();
  light_ConfigPara();
  __enable_irq();
  /* USER CODE END 2 */

               2、IO中断时,在ISR里先关闭相应的管脚的中断,处理完成后,再开启相应管脚的中                          断。避免中断嵌套。

/* USER CODE BEGIN 0 */
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  LL_EXTI_DisableIT_0_31(GPIO_Pin);  
  if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
  {      
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);    
  }
  LL_EXTI_EnableIT_0_31(GPIO_Pin);
}
/* USER CODE END 0 */

笔记记之,以防将来的项目类似故障查询。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值