STM32F072C8T6 毫秒级延时函数代码
时间: 2023-09-11 08:11:43 浏览: 40
以下是基于滴答定时器的毫秒级延时函数代码:
```c
#include "stm32f0xx.h"
static __IO uint32_t uwTick;
void SysTick_Handler(void) {
uwTick++;
}
void Delay_Init(void) {
if (SysTick_Config(SystemCoreClock / 1000)) {
while (1);
}
}
void Delay_Ms(uint32_t ms) {
uint32_t tickstart = uwTick;
while ((uwTick - tickstart) < ms);
}
```
使用方法:
1. 在 main 函数中调用 Delay_Init() 函数进行初始化。
2. 在需要延时的地方调用 Delay_Ms(ms) 函数,其中 ms 为需要延时的毫秒数。
需要注意的是,这个延时函数是基于 SysTick 定时器实现的,因此需要先开启 SysTick 定时器。同时,SysTick 定时器的时钟频率要与 CPU 的时钟频率相同,这里是 48MHz。如果你的 CPU 时钟频率不同,需要修改 SysTick_Config() 函数中的参数。
相关问题
stm32f103c8t6 用定时器延时的函数代码
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,拥有强大的计算能力和丰富的外设资源,其中包括多个定时器用于定时操作。
以下是使用STM32F103C8T6内置定时器实现延时的代码示例(以TIM2为例):
首先,需要初始化定时器TIM2:
```
void TIM2_Init(void)
{
// 使能TIM2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 65535; // 自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 定时器分频系数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
}
```
然后,可以使用如下代码实现延时功能:
```
void Delay_us(uint32_t us)
{
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2, ENABLE);
while (TIM_GetCounter(TIM2) < us);
TIM_Cmd(TIM2, DISABLE);
}
void Delay_ms(uint32_t ms)
{
while (ms--)
{
Delay_us(1000);
}
}
```
其中,`Delay_us`函数用于实现微秒级延时,`Delay_ms`函数用于实现毫秒级延时。在这里,我们通过设置TIM2的计数器初值为0,启动定时器计数,等待计数器达到指定的延时时间,然后关闭定时器。
STM32F103C8T6延时函数代码
以下是基于STM32CubeMX生成的代码,使用HAL库实现的延时函数:
```c
void Delay(uint32_t nTime)
{
uint32_t tickstart = HAL_GetTick();
uint32_t wait = nTime;
while ((HAL_GetTick() - tickstart) < wait)
{
// do nothing
}
}
```
其中,`HAL_GetTick()`函数返回自系统启动以来经过的毫秒数。因此,此延时函数会等待指定的毫秒数后返回。使用方法如下:
```c
Delay(1000); // 延时1秒钟
```