qq_39260484 2021-12-07 11:21 采纳率: 100%
浏览 760
已结题

基于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条回答 默认 最新

  • qq_39260484 2021-12-07 16:09
    关注

    我自己已经解决这个问题了,原因是32上电之后会默认进一次定时中断
    在HAL_TIM_Base_Start_IT(&htim2);这句话前加一个这个__HAL_TIM_CLEAR_FLAG(&htim2,TIM_FLAG_UPDATE);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 已采纳回答 12月7日
  • 创建了问题 12月7日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了