新手入门
- 积分
- 6
- 金钱
- 6
- 注册时间
- 2020-8-15
- 在线时间
- 1 小时
|
1金钱
STM32F1精英板,寄存器开发,delay文件中的delay_ms函数相关理解:1、参数值nms最大范围计数值是怎么理解的,不理解nms < 0xffffff * 8 * 1000 / SYSCLK这个地方,为什么要这样计算?
代码如下:
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:nms < 0xffffff * 8 * 1000 / SYSCLK
//SYSCLK单位为Hz
//72M条件下,nms <= 1864
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
|
|