在线时间44 小时
UID1078437
ST金币293
蝴蝶豆4
注册时间2018-6-7
该用户从未签到
高级会员
- 最后登录
- 2021-3-12
|
本帖最后由 疾风 于 2018-7-21 01:37 编辑
最近用CUBE 生成 F2系列的 FreeRTOS 工程,
使用定时器14 在编写中断函数时,遇到了诡异的情况, 输出方波, 上电第一轮正常, 关闭定时器后,第二轮就出现奇怪现像.
配置的是 关闭预加载寄存器模式,
自动计数到ARR的值 然后执行中断
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
...
if(htim->Instance == TIM14)
{
中断函数;可外部,可内部
}
...
}
程序中激活中断:
HAL_TIM_Base_Stop_IT(&htim14);
TIM14->CNT=0;
TIM14->ARR= 666;//
//启动定时器
HAL_TIM_Base_Start_IT(&htim14);//
在中断函数中将制造一个方波,每进一次中断,输出反转一次,此处省去
郁闷的是 上电后,第一轮 输出n个方波脉冲OK,没问题, 结果之后的输出方波总会在 第2个高电平,也就是第三次进入中断后 的延时会被奇怪地缩减到不到100us,
更加奇怪的是 此现象 的程序 在之前还一切正常,多次发送都没问题, 结果前天晚上调试加了几句宏定义测试, 出现了这现象, 然后旧取消掉后加的语句,
还是 出现异常,
调试了一天, 把定时器的寄存器又研究了一遍,没发现啥毛病, 就在想 可能有2方面原因引起这 异常, 1个 是怀疑STM32F2 系列芯片 内部设计有缺陷或者Bug, 这个Bug出现的地方,可能是总线竞争或者是定时器14的触发源 , 另一个就是怀疑 官方提供的固件库有Bug,
另外 调试的时候发现 在第3次进中断后,定时器的计数器 在 我停止定时器以后 还是无法清零,而且第三次进入中断后的 计数器值 比较大,这个很奇怪
,不知道什么引起, 调试器件我尝试将一轮方波输出中 进入中断第二次(输出0),第三次的(输出1) ARR值改到900, 然后 进入第三次中断后 ,计数器的值也跟着变大了
很诡异, 另外 APB1上的很多中断接口被 HAL库统一接管, 感觉容易出问题,
|
|