用keil进行debug时,如何让时间准确起来?

在用keil进行STM32单片机程序开发的时候,定时是常用的功能,无论是用循环做一个简单的不那么精确的延时,还是用定时器做精确定时,都要对时间是否准确做一个验证。简单的方法,就是在定时的开始和结束,让同一个的GPIO端口做取反的动作,然后用示波器来测试端口波形,以测试时间,这种测试方法比较准确,误差在于端口动作的时间。但这种方法,比较麻烦,还要用示波器。在程序工程建立之初,这种定时器验证方法还可以用来验证单片机的时钟配置是否正确。其实在keil的debug功能中,就有运行时间显示的功能,如图1所示,进入debug模式后,就会有显示。

图1

之前在网络上也看过一些资料,很多朋友反映keil的debug测试时间的方法,时间不对,或者时间不精确。应该是使用方法不对,孔丙火(微信公众号:孔丙火)经过测试,发现时间还是很准的。我来说一下注意事项。

(一)把debug的内核时间修改为与实际的配置一直,如图2所示。要把内核时钟修改成与程序配置的system clock一致,如果用hal库的,可以在cubemx的时钟树下查看。在修改好内核时钟后,可以把Enable前的勾去掉,因为我们不用Trace功能,然后点确定就可以了。

图2

(二)可以测试定时器的运行时间,定时器的定时时间确定,且比较准确,用于验证比较合适。如图3、图4,编写了简单的测试程序。想要在debug模式下,准确测试定时的时间,必须加上断点时让定时器停止工作的语句,这个是重点,如果不加这个,程序虽然停在了断点处,但定时器还在跑,测出的时间跟实际的肯定对不上了。孔丙火(微信公众号:孔丙火)用的是hal库,加的是如图3中的语句,如果用的是标准库,可以自行查找相应的函数。

图3

图4

(三)在keil的时间测试中,t1时间可以清零,这方便用户读取时间,如图5所示。在本例中,程序每间隔一个确定的时间在断点处停止一次,此时通过keil读取到的时间是:500.42us,在程序中做了一个IO的反转,通过示波器测的波形,如图7所示,时间间隔是504us,两个时间差不多,但500.42us更接近程序设定的500us的设定值。

图5

图6

图7

总结:只要运用正确,在keil的debug模式,测得的运行时间比用示波器测得的要准确,并且使用方便。按照孔丙火(微信公众号:孔丙火)的测试与理解,keil在debug时,应该是对运行时间进行的计算,应该是比较准的。但也有一些例外情况,比如,当程序中存在while等待某一条件的时候,等待的时间测试是不准的,还有一些其他情况,大家可以自行测试。

希望孔丙火(微信公众号:孔丙火)写的内容对你帮助。

文章在公众号(孔丙火)同步推出,欢迎查看更多系列文章。

单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值