困扰了我很久的TIM1时钟走慢的问题终于找到原因了

2019-12-27 18:41发布

在使用STM32的过程中,经常发现TIM1定时器莫名奇妙的走慢,以前一句一句的查看代码,怕晶振没起振,拿示波器看,都没有发现问题,但TIM1就是走慢了,后来只能尽量避免使用TIM1,今天再次下定决心要找到原因,最后终于发现是MDK的优化造成的。
如果默认使用Level 2 (-O2)优化级别,勾选Optimize for Time 和One ELF Section per Function ,TIM1就会变慢很多,其他定时器都正常。
使用Level 0 (-O0)优化级别,勾选Optimize for Time 和One ELF Section per Function
或者使用Level 2 (-O2)优化级别,只勾选One ELF Section per Function ,则TIM1能正常工作,目前虽然能解决问题了,但是还没有仔细研究不同的优化之间的区别,到底编译器把哪部分代码给优化掉了,才造成TIM1定时器走慢呢,这个还有待进一步研究,现在要忙手头上的项目,暂且先放一放吧。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
59条回答
Alexkey
1楼-- · 2019-12-28 12:35
 精彩回答 2  元偷偷看……
money_2011
2楼-- · 2019-12-28 17:55
芯片的运作是逻辑化的,它严格按着寄存器的配置工作,你认为变慢了就是寄存器的配置值没对。好好检查一下吧。keil有着很好的查看功能。别认为世界只有你一个人用芯片,别认为ST公司或keil是垃圾公司。
121212
3楼-- · 2019-12-28 18:47
要查 汇编了。


同情lz,  这事情 要是4楼碰到也不一定能知道怎么回事情。  心静下来还是看汇编,虽然很痛苦的说
Alexkey
4楼-- · 2019-12-29 00:18
再次确认,最新版本的固件库就是3.5.0,不存在什么4.4.0
Alexkey
5楼-- · 2019-12-29 00:57
我为什么说困扰了很久,就是因为仔细查看了RCC,TIM1的每个寄存器的配置,确认了硬件和软件没有问题,我也确认了TIM1的内部时钟就是72M,而且我开发了很多产品,并不是所有的都有这个问题,就算是在开发过程中,也是有时是正常的,有时不正常,今天再次比较了正常的程序和不正常的程序,发现代码是一样的,唯一的区别就是优化选项不一样。我只相信客观的事实,这才是工程师应有的态度,MDK不过就是一个工具,我也没有说MDK很垃圾,只是想告诉大家使用的时候要注意的事项,不想再跟你争论,请就此打住。
我发这个帖子的目的也是为了做个记录,以后要是遇到同样的问题,我就知道原因了。
money_2011
6楼-- · 2019-12-29 02:59
 精彩回答 2  元偷偷看……

一周热门 更多>