stm32f103c8t6灯延时函数
时间: 2025-01-01 18:28:20 浏览: 7
### STM32F103C8T6 LED 延时函数 示例代码
对于STM32F103C8T6单片机而言,要实现LED灯的延时点亮或熄灭功能,可以利用上述提到的基于滴答定时器(SysTick)来编写精确延时函数。下面提供一段完整的示例程序用于控制GPIO端口上的LED通过调用`Delay_us()`和`Delay_ms()`来进行闪烁操作。
#### 初始化配置
首先,在主函数开始前定义好必要的头文件以及宏定义:
```c
#include "stm32f1xx.h"
#define LED_PIN GPIO_Pin_13 /* PA13 */
#define LED_PORT GPIOA /* Port A */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void){
HAL_Init();
SystemClock_Config(); // 配置系统时钟
MX_GPIO_Init(); // 初始化GPIO
while (1){
HAL_GPIO_TogglePin(LED_PORT, LED_PIN); // 切换LED状态
Delay_ms(500); // 调用毫秒级延迟函数
}
}
```
这里假设使用的开发板上有一个连接至PA13引脚的LED指示灯;如果实际硬件布局不同,则需相应调整这些参数。
#### 实现延时函数
接下来就是具体的延时函数实现了,这部分直接沿用了提供的参考资料中的方法[^1]:
```c
// 微秒级别延时函数
void Delay_us(uint32_t xus){
SysTick->LOAD = 72 * xus;
SysTick->VAL = 0x00;
SysTick->CTRL = 0x00000005;
while (!(SysTick->CTRL & 0x00010000));
SysTick->CTRL = 0x00000004;
}
// 毫秒级别延时函数
void Delay_ms(uint32_t xms){
while(xms--){
Delay_us(1000);
}
}
```
需要注意的是,当更换MCU型号如从STM32F103RCT6换成STM32F103C8T6之后可能会遇到延时不准的情况,此时可以在初始化部分增加`SystemInit();`语句以确保外设正常工作并修正可能存在的频率偏差问题[^2]。
以上即为针对STM32F103C8T6单片机制作简单LED闪灯实验所需的全部代码框架及其说明文档链接。希望这可以帮助到正在学习嵌入式系统的朋友们!
阅读全文