搜索
查看: 1370|回复: 0

[讨论] STM32F2,F4系列的定时器14 用起来有没有遇到奇怪的问题

[复制链接]

该用户从未签到

2

主题

43

帖子

4

蝴蝶豆

高级会员

最后登录
2021-3-12
发表于 2018-7-21 01:02:33 | 显示全部楼层 |阅读模式
本帖最后由 疾风 于 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库统一接管, 感觉容易出问题,



回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 22:55 , Processed in 1.168773 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表