写一个基于stm32f103c8t6的毫秒延时程序
时间: 2023-09-06 09:07:15 浏览: 74
下面给出一个基于STM32F103C8T6的毫秒延时程序,使用的是SysTick定时器:
```c
// 时钟频率为72MHz
#define SYS_CLOCK_FREQ 72000000UL
// 时钟周期为1/72MHz
#define SYS_CLOCK_PERIOD (1.0 / SYS_CLOCK_FREQ)
// 延时毫秒数
void delay_ms(uint32_t ms) {
// 计数器值
uint32_t count_value = SYS_CLOCK_FREQ / 1000 * ms;
// 加载计数器值
SysTick->LOAD = count_value;
// 清除当前值和状态标志
SysTick->VAL = 0;
SysTick->CTRL = 0;
// 使能SysTick定时器,使用时钟源为CPU时钟,开启中断
SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk;
// 等待时间到
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
// 关闭SysTick定时器
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
```
使用时,只需要调用`delay_ms`函数并传入需要延时的毫秒数即可:
```c
delay_ms(1000); // 延时1秒
```
阅读全文