使用systick库函数写一个ms级的延时函数并延时点灯
时间: 2023-12-10 19:39:16 浏览: 72
好的,以下是使用systick库函数编写ms级延时函数并延时点灯的示例代码:
```c
#include "stm32f10x.h"
// 延时函数,延时时间为ms
void delay_ms(uint32_t ms)
{
SysTick->LOAD = SystemCoreClock / 1000 - 1; // 计数器的重装值
SysTick->VAL = 0; // 清空计数器的当前值
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; // 开启计数器
while (ms--)
{
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待计数器计满1ms
}
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭计数器
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 使能GPIOC时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 点亮PC13引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while (1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13); // PC13置高,点亮LED灯
delay_ms(1000); // 延时1s
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // PC13置低,熄灭LED灯
delay_ms(1000); // 延时1s
}
}
```
在该示例代码中,我们使用了STM32的systick库函数来编写了一个ms级的延时函数。在主函数中,我们点亮了PC13引脚,并使用delay_ms函数延时1s,之后熄灭LED灯并再次使用delay_ms函数延时1s。这样就实现了LED灯每隔1s闪烁的功能。
阅读全文