我不赞成通过程序做延时,所以没有现成的Demo程序,但可以给你一个简单的方案试试:
配置定时器为单脉冲模式,可以按照需要产生输出或不产生输出,设置好定时时间后,启动定时器的计数器,然后检测计数器是否停止,如果计数器停止则表示设置的时间到时。如果设置的时间较长,可以在启动计数器之后先做一些其他事情,然后再检测计数器的停止状态。
此方法的误差为配置定时器的语句和检测计数器语句的执行时间,如果在计数器停止前有中断服务并处理完成,不影响计时。
另一个方案是使用Systick:定时开始前读出计数器的值,把这个数值加上要求的延迟时间得到一个目标数值,然后不断地读出计数器的值与目标数值比较,当读出的数值达到或超过目标数值,则表示延迟时间到。
这个方案与前面一个类似,同样可以在延迟时间到达之前先做一些其他事情,也可以有条件地允许中断处理。
|