stm32f103rct6延时1毫秒的函数
时间: 2024-05-09 13:15:26 浏览: 195
在stm32f103rct6上,可以使用SysTick定时器来实现延时功能。以下是一个实现延时1毫秒的函数:
```c
void delay_ms(uint32_t ms)
{
uint32_t ticks = SystemCoreClock / 1000 * ms;
SysTick->LOAD = ticks - 1;
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk))
;
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
```
在这个函数中,我们首先计算出需要多少个SysTick时钟周期来实现指定的延时时间。然后,我们将这个值加载到SysTick定时器的LOAD寄存器中,并将VAL寄存器清零。接着,我们启用SysTick定时器,并使用一个循环来等待定时器计数器达到指定的延时时间。最后,我们禁用SysTick定时器,以便下一次使用。
相关问题
STM32F103RCT6延时函数
在 STM32F103RCT6 上,可以使用以下代码实现毫秒级延时函数:
```c
void delay_ms(uint16_t ms)
{
uint32_t delay = ms * (SystemCoreClock / 1000 / 8);
while(delay--) {}
}
```
其中 `SystemCoreClock` 是系统时钟频率,需要根据实际设置进行修改。这里假设时钟频率为 72MHz,每个循环耗时为 8 个时钟周期,因此计算出每毫秒需要循环的次数为 `(72MHz / 1000 / 8) = 9000`。最后等待的总循环次数即为 `delay = ms * 9000`。
给我编写一个关于stm32f103rct6的延时函数
好的,以下是一个简单的延时函数:
void delay_ms(uint32_t ms) {
uint32_t i;
for (i = 0; i < ms; i++) {
uint32_t j;
for (j = 0; j < 72000; j++) {
__NOP();
}
}
}
这个函数使用嵌入式汇编NOP指令进行延时,72000次循环大约等于1毫秒的延时时间。您可以根据需要调整延时时间。
阅读全文