ST意法半导体
直播中

申根换

7年用户 1615经验值
私信 关注
[问答]

STM32F103定时器编码器模式中断回调PeriodElapsed不触发的原因?如何解决?

STM32F103 MCU,CubeMX 为 Atollic True studio 生成的代码。
tiM1 在组合通道中配置 -> 编码器模式,用户参数 -> 编码器模式 -> Ti1 和 Ti2,NVIC 设置 -> TIM1 更新中断已启用。
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) - 在 main.c 中实现的方法
仅包含一个 GPIO LED 开关
main() 方法包含定时器初始化生成的代码和定时器启动调用
HAL_TIM_Encoder_Start_IT(&htim1,TIM_CHANNEL_ALL);
还包含打印编码器计数的方法。
当编码器转动时,会打印编码器计数,但当计数器周期 ARR - 值溢出时,不会触发中断。
是否经过了正确的回调?我需要做更多的事情吗?
我尝试使用 TIM4 类似设置启用全局中断,但结果相同,打印了编码器计数但未调用溢出/下溢中断。
有什么建议么?









回帖(1)

陈龙

2023-2-8 10:02:45
在尝试浏览 RM0008(STM32F1xx 参考手册)和数据表中的几百页内容并深入研究 Cube 包中的 HAL 代码和 HAL CHM 文件之后。更新事件似乎由 HAL_TIM_Base_Start_IT 配置,而 HAL_TIM_Encoder_Start_IT 仅配置与计数变化相关的 CC 中断......
所以如果你想在编码器模式下更新 IT,你必须用 IT 启动 TIM_Base。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分