我不知道您有看如下这个地方么?
- //延时nms
- //注意nms的范围
- //SysTick->LOAD为24位寄存器,所以,最大延时为:
- //nms<=0xffffff*8*1000/SYSCLK
- //SYSCLK单位为Hz,nms单位为ms
- //对168M条件下,nms<=798ms
- void delay_xms(u16 nms)
- {
- u32 temp;
- SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
- SysTick->VAL =0x00; //清空计数器
- SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
- do
- {
- temp=SysTick->CTRL;
- }
- while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达
- SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
- SysTick->VAL =0X00; //清空计数器
- }
- //延时nms
- //nms:0~65535
- void delay_ms(u16 nms)
- {
- u8 repeat=nms/540; //这里用540,是考虑到某些客户可能超频使用,
- //比如超频到248M的时候,delay_xms最大只能延时541ms左右了
- u16 remain=nms%540;
- while(repeat)
- {
- delay_xms(540);
- repeat--;
- }
- if(remain)delay_xms(remain);
-
- }
如果不写这个delay_ms的这个函数的话,那么紧紧靠void delay_xms(u16 nms)这个函数的话,按照nms<=0xffffff*8*1000/SYSCLK这个注解中的这个公式计算的话,对48M条件下,nms<=0xffffff*8*1000/SYSCLK=2796ms啊。也就是2s。如果是这样的话,后面的这个函数delay_ms(u16 nms)是不是就不要了呢?
|