32位单片机,cortex-m0,用滴答定时器延时100Ms,systick_config()
时间: 2023-10-02 17:13:59 浏览: 105
基于Cortex-M0/M3的滴答时钟的单片机延时辅助通用函数C代码
要在32位单片机上使用滴答定时器进行延时,可以按照以下步骤进行:
1. 配置滴答定时器(SysTick)的时钟源和计数器周期。在Cortex-M0架构中,SysTick定时器是内置的,并且使用外部时钟源,通常使用CPU时钟或外部晶振时钟。可以使用以下代码配置SysTick定时器的计数器周期为1毫秒:
```
void systick_config(void)
{
SysTick_Config(SystemCoreClock/1000);
}
```
其中,`SystemCoreClock`是系统时钟频率,这里假设为1MHz,将SysTick的计数器周期设置为1毫秒(1000Hz)。
2. 在需要进行延时的地方,调用`delay_ms()`函数进行延时。该函数的实现如下:
```
void delay_ms(uint32_t ms)
{
uint32_t start_tick = SysTick->VAL;
uint32_t delay_ticks = ms * (SystemCoreClock/1000);
while (delay_ticks > 0)
{
uint32_t current_tick = SysTick->VAL;
if (current_tick > start_tick)
{
delay_ticks -= (current_tick - start_tick);
}
else
{
delay_ticks -= (current_tick + (0xFFFFFFFF - start_tick) + 1);
}
start_tick = current_tick;
}
}
```
该函数使用当前SysTick计数器的值和计算出的延时所需的SysTick计数器值之间的差来计算延时时间。在循环中,如果当前SysTick计数器的值大于初始值,则直接减去它们的差;如果当前SysTick计数器的值小于初始值,则减去它们的差再加上SysTick计数器的最大值。
这样就可以使用SysTick定时器在32位单片机上进行精确的延时了。
阅读全文