STM32F103C8T6的延时函数
时间: 2024-04-25 18:14:57 浏览: 107
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,它具有多种延时函数的实现方法,以下是其中两种常用的方法:
方法一:使用SysTick定时器实现延时函数
在STM32F103C8T6中,SysTick定时器是一个24位的计数器,它可以用于生成固定时间间隔的中断。我们可以通过设置SysTick定时器的Load寄存器来实现延时,具体实现如下:
```c
void delay_ms(int ms)
{
SysTick->LOAD = ms * 9000; // 时钟频率为72MHz,每个SysTick为1/9000秒
SysTick->CTRL = 0x01; // 启动计数
while(!(SysTick->CTRL & (1<<16))); // 等待计数到0
SysTick->CTRL = 0x00; // 关闭计数
}
```
上述代码中,我们将SysTick定时器的Load寄存器设置为ms*9000,这是因为时钟频率为72MHz,每个SysTick为1/9000秒。然后启动计数器,等待计数器计数到0,最后关闭计数器即可。
方法二:使用TIM定时器实现延时函数
STM32F103C8T6中还有多个TIM定时器,它们可以用于生成各种不同的定时器中断。我们可以通过设置TIM定时器的ARR寄存器和PSC寄存器来实现延时,具体实现如下:
```c
void delay_ms(int ms)
{
RCC->APB1ENR |= 1<<0; // 使能TIM2时钟
TIM2->PSC = 71; // 设置预分频为72-1
TIM2->ARR = ms; // 设置自动重载值为ms
TIM2->CR1 |= 1<<0; // 启动计数
while(!(TIM2->SR & (1<<0))); // 等待计数到0
TIM2->SR &= ~(1<<0); // 清除中断标志位
}
```
上述代码中,我们使用了TIM2定时器,首先使能了TIM2的时钟,然后设置了预分频为72-1,计数器自动重载值为ms。接着启动计数,等待计数器计数到0,最后清除中断标志位即可。
以上两种方法都可以实现延时函数,具体实现方法可以根据实际需求选择。
阅读全文