你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
蓝夜 提问时间:2018-7-21 01:02 /
本帖最后由 疾风 于 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库统一接管, 感觉容易出问题,



收藏 评论0 发布时间:2018-7-21 01:02

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版