野火stm32f103指南者交通灯
时间: 2025-06-15 09:50:52 浏览: 19
### 关于野火 STM32F103 指南者开发板实现交通灯功能
#### 实现思路概述
交通灯的功能可以通过控制LED的亮灭状态来模拟红绿黄三种颜色的变化。通常情况下,这种功能会依赖定时器模块(如SysTick或TIMx)来进行时间间隔的精确控制[^4]。对于野火STM32F103指南者开发板而言,其实现有如下几个关键点:
1. **硬件资源分配**
开发板上的多个GPIO口可以被配置为输出模式,分别连接至不同颜色的LED灯。通过设置这些GPIO引脚的状态(高电平/低电平),即可点亮或熄灭对应的LED。
2. **软件设计逻辑**
使用SysTick或其他定时器中断机制,在指定的时间周期内切换不同的LED状态。例如:
- 红灯持续5秒;
- 黄灯闪烁2次,每次1秒;
- 绿灯持续7秒。
这种循环往复的过程构成了完整的交通灯控制系统。
3. **代码框架结构**
下面是一个简单的代码示例,展示如何利用SysTick实现基本的交通灯功能:
```c
#include "stm32f10x.h"
// 定义LED端口号
#define RED_LED GPIO_Pin_8
#define YELLOW_LED GPIO_Pin_9
#define GREEN_LED GPIO_Pin_10
void LED_Init(void);
void SysTick_Delay(uint32_t ms);
int main(void) {
LED_Init(); // 初始化LED
while (1) {
// 红灯亮5s
GPIO_SetBits(GPIOC, RED_LED); // 打开红色LED
GPIO_ResetBits(GPIOC, GREEN_LED); // 关闭绿色LED
GPIO_ResetBits(GPIOC, YELLOW_LED); // 关闭黄色LED
SysTick_Delay(5000); // 延迟5秒
// 黄灯闪烁两次,每次1秒
int i;
for(i=0;i<2;i++) {
GPIO_SetBits(GPIOC, YELLOW_LED); // 打开黄色LED
SysTick_Delay(1000); // 延迟1秒
GPIO_ResetBits(GPIOC, YELLOW_LED); // 关闭黄色LED
SysTick_Delay(1000); // 延迟1秒
}
// 绿灯亮7s
GPIO_SetBits(GPIOC, GREEN_LED); // 打开绿色LED
GPIO_ResetBits(GPIOC, RED_LED); // 关闭红色LED
GPIO_ResetBits(GPIOC, YELLOW_LED); // 关闭黄色LED
SysTick_Delay(7000); // 延迟7秒
}
}
/**
* @brief 配置PC8、PC9、PC10作为LED输出引脚
*/
void LED_Init() {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 启用GPIOC时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速度50MHz
GPIO_InitStructure.GPIO_Pin = RED_LED | YELLOW_LED | GREEN_LED; // 设置三个引脚
GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化GPIOC
}
/**
* @brief 利用SysTick实现ms级延迟
* @param ms 要延迟的毫秒数
*/
void SysTick_Delay(uint32_t ms) {
uint32_t ticks = ms * SystemCoreClock / 1000; // 计算所需滴答次数
SysTick->LOAD = ticks - 1; // 加载重装载寄存器
SysTick->VAL = 0; // 清零当前值寄存器
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; // 启动计时器
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待计时完成
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 停止计时器
}
```
此代码实现了基础的三色交通灯功能,并且使用了SysTick定时器进行精准延时控制[^4]。
#### HAL库的优势及其适用场景
如果采用HAL库,则能够进一步简化外设的操作流程。HAL库提供了丰富的API集合,使得开发者无需深入了解底层寄存器的具体细节就能快速构建应用程序[^3]。例如,初始化GPIO和配置SysTick都可以通过调用相应的HAL函数轻松完成。
---
###
阅读全文
相关推荐
















