用stm32SysTick做一个3ms的延时函数
时间: 2023-09-11 15:11:40 浏览: 37
以下是用stm32SysTick实现一个3ms的延时函数的示例代码:
```c
void delay_3ms(void)
{
/* 使能SysTick中断并设置中断周期为3ms */
SysTick_Config(SystemCoreClock / 1000 * 3);
/* 等待SysTick中断触发,即延时3ms */
while (SysTick->CTRL & SysTick_CTRL_ENABLE_Msk);
}
/* SysTick中断服务函数 */
void SysTick_Handler(void)
{
/* 关闭SysTick计时器 */
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
```
在上述代码中,`delay_3ms`函数用于实现3ms的延时。在函数中,先通过`SysTick_Config`函数设置SysTick中断周期为3ms。然后,通过循环等待SysTick中断触发,即可实现3ms的延时。在中断服务函数中,需要关闭SysTick计时器以停止中断触发。
需要注意的是,在使用SysTick计时器进行延时时,需要关闭中断,否则中断可能会影响延时的精度。
相关问题
stm32SysTick如何延时500ms
可以使用以下代码实现 stm32SysTick 延时500ms:
```
void delay_ms(uint32_t nms)
{
uint32_t ticks;
ticks = nms * (SystemCoreClock / 1000) / 8;
SysTick->LOAD = ticks;
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);
SysTick->CTRL = 0;
}
```
其中,SysTick是STM32的系统定时器,可以用于延时等操作。在这个函数中,首先通过计算出需要延时的 SysTick 滴答数,然后将其装载到 SysTick 的 LOAD 寄存器中,并将 SysTick 控制寄存器中的 ENABLE 位设为 1,启动计数器。接着进入一个 while 循环,等待 SysTick 的计数完成。最后再将 SysTick 控制寄存器清零,停止计数器的运行。这样就实现了一个延时函数,可以用于实现一些简单的定时操作。
使用systick库函数写一个ms级的延时函数
以下是使用systick库函数编写的ms级延时函数:
```c
#include "stm32f4xx.h"
void SysTick_Handler(void) {
// 空函数,不需要做任何事情
}
void delay_ms(uint32_t ms) {
// 配置SysTick定时器
SysTick->LOAD = (uint32_t)(ms * (SystemCoreClock / 1000));
SysTick->VAL = 0x00;
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
while(!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待定时器计数完成
SysTick->CTRL &= ~(SysTick_CTRL_ENABLE_Msk); // 关闭定时器
}
```
使用方法:
```c
int main(void) {
// 初始化SysTick定时器
SysTick_Config(SystemCoreClock / 1000);
// 延时1秒
delay_ms(1000);
// 无限循环
while(1) {
}
}
```
注意:在使用此延时函数前,需要先初始化SysTick定时器。在本例中,我使用了`SysTick_Config`函数来初始化SysTick定时器,并将SysTick定时器的时钟源配置为系统时钟,每隔1ms触发一次中断。由于SysTick定时器的计数值是由CPU时钟除以预分频值得到的,因此在不同的MCU上可能需要根据实际情况调整代码中的`SystemCoreClock`值。