初级会员

- 积分
- 134
- 金钱
- 134
- 注册时间
- 2015-2-9
- 在线时间
- 10 小时
|
1金钱
正点原子例程延时程序延时ms时超过1864就不准确了,反而比1864之前延时更短了,请问如何修改例程
//×¢òanmsμÄ·¶Î§
//SysTick->LOADÎa24λ¼Ä′æÆ÷,ËùòÔ,×î′óÑóê±Îa:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLKμ¥λÎaHz,nmsμ¥λÎams
//¶Ô72Mìõ¼tÏÂ,nms<=1864
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//ê±¼ä¼óÔØ(SysTick->LOADÎa24bit)
SysTick->VAL =0x00; //Çå¿Õ¼ÆêyÆ÷
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿aê¼μ1êy
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//μè′yê±¼äμ½′ï
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //1رռÆêyÆ÷
SysTick->VAL =0X00; //Çå¿Õ¼ÆêyÆ÷
}
|
最佳答案
查看完整内容[请看2#楼]
很明显啊。这里备注了。。。你超过了1864,就是超过了LOAD寄存器的自动转载的最大值,当然就不行了。。。现象也就是你说的,超过了一些,会比1864还小。。。有效值只有24位,,,
不用修改。。。。。你要延时10s,就一秒一秒延时咯。延时10次不就是10秒么。。。。
|