qq_39260484
2021-12-07 11:21
采纳率: 100%
浏览 193

基于STM32hal库定时中断出现的问题

问题遇到的现象和发生背景

基于HAL库配置TIM2定时器,配置为每1分钟进入中断,编写中断回调函数,在程序初始化运行的时候就进入了TIM2中断

问题相关代码,请勿粘贴截图

MX_GPIO_Init();
MX_I2C1_Init();
MX_I2C2_Init();
MX_I2C3_Init();
MX_SPI2_Init();
MX_USART1_UART_Init();
MX_TIM2_Init();

HAL_TIM_Base_Start_IT(&htim2);

这里GPIO初始化为
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);

重写定时中断回调函数(实现对PC8引脚的翻转)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//定时中断函数
{
if(htim->Instance == TIM2)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);

  }

}

在while函数里进行串口输出观察实验现象
while (1)
{
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8)==GPIO_PIN_RESET)
printf("%d\r\n",0);
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8)==GPIO_PIN_SET)
printf("%d\r\n",1);
HAL_Delay(1000);
}
/PC8引脚为低则输出0,PC8引脚为低则输出1/

那么问题来了
按正常初始化后,程序运行PC8应该是低电平,输出应该是0,但是程序初始化之后,PC8为高电平,输出为1(就好像程序刚运行就进入了TIM2中断,进行了电平反转)

不过定时器后续工作仍正常,依然能实现1分钟进入中断反转一次

运行结果及报错内容

img


程序初始化之后,PC8好像进入中断了一样,被翻转为高,

我的解答思路和尝试过的方法

尝试过改变终端回调函数的位置,无济于事

我想要达到的结果

程序初始化运行时,PC8不应该被翻转,输出应该为低电平为0.而不是1

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新