应该如何修改此函数的延时微秒void delay_ms(unsigned int ms) { unsigned int max_step = 1000 * (UINT32_MAX / SystemCoreClock); unsigned int max_sleep_cycles = max_step * (SystemCoreClock / 1000); while (ms > max_step) { ms -= max_step; delay_cycles(max_sleep_cycles); } delay_cycles(ms * (SystemCoreClock / 1000)); }
时间: 2024-03-23 16:39:51 浏览: 62
51单片机液晶时钟程序
如果要修改此函数的延时单位为微秒,可以按照以下方式进行修改:
```void delay_us(unsigned int us) {
unsigned int max_step = 1000000 * (UINT32_MAX / SystemCoreClock);
unsigned int max_sleep_cycles = max_step * (SystemCoreClock / 1000000);
while (us > max_step) {
us -= max_step;
delay_cycles(max_sleep_cycles);
}
delay_cycles(us * (SystemCoreClock / 1000000));
}```
将函数名称改为delay_us,参数us代表需要延时的微秒数。
将max_step的计算方式修改为1000000乘以UINT32_MAX除以SystemCoreClock。
将max_sleep_cycles的计算方式修改为max_step乘以SystemCoreClock除以1000000。
将while循环中的判断条件修改为us大于max_step。
将延时时间的计算方式修改为us乘以SystemCoreClock除以1000000。
这样,修改后的函数就可以实现微秒级别的延时了。
阅读全文