void delay_us(u32 nus) { u32 temp; SysTick->LOAD=nus*fac_us; //时间加载 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; //清空计数器 }
时间: 2024-03-28 12:39:19 浏览: 185
Delay_nus_Count_uint_n--.rar_avr_avr delay_delay avr_delay_n_de
这段代码是用来实现微秒级延时的函数。它会使用 SysTick 定时器来实现延时,具体实现步骤如下:
1. 将要延时的微秒数乘以一个系数 fac_us,得到对应的 SysTick 计数值。
2. 将计数器值加载到 SysTick 的 LOAD 寄存器中,清空计数器值。
3. 开始倒数,等待计数器值减为 0。
4. 关闭计数器,清空计数器值。
这里需要注意的是,SysTick 定时器的时钟源是系统时钟,而 fac_us 系数的计算方法要根据系统时钟的频率来确定。因此,这段代码的可移植性可能会受到一定的限制。
阅读全文