
本帖最后由 天天晓宇 于 2015-1-20 10:35 编辑 在STM32的开发过程中,我们经常需要使用延时,很多时候在延时要求不是很严格的情况下,使用定时器又麻烦,很多人都是使用for循环(for(i=n; i>0; i--);)来实现的,这样的操作的确也太不准了,我看很多教程都是采用systick的方式,但是普遍采用了中断方式,这里我把我常用的两个函数分享给大家,也是采用systick,没有使用中断,直接使用寄存器操作的,复制可用,非常的方便,也无需多余的配置。
![]() ![]() |
谢谢支持 |
我真是被你们搞无语了,看资料能不能看全一点,systick的时钟是可以配置的,没人说一定非要选系统时钟的8分频。
![]() ![]() |
此延时函数应该用宏替换来写,已获得更准确延时。以us延时为例,函数调用比宏替换会多出0.25us左右。以下是代码:/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */#define DELAY_US(nTime) {SysTick->LOAD = 72 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}#define DELAY_MS(nTime) {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;} |
zhichi!!!! |
谢谢分享 |
不粗,顶一下 |
![]() |
顶一个!!!! |
不错,谢谢 |
是啊,这个使用起来也很方便 |
好帖子 支持 |
不错啊![]() |
喜欢就拿走 |
介个虽然自己一直在用 还是给顶下 哈哈 |
不错,赞一个 |
怎么看都和原子的那个延时程序好像啊! |