stm32 跑马灯 源码
时间: 2023-09-20 21:00:55 浏览: 196
STM32跑马灯是一种常用的练习项目,通过控制LED灯的亮灭顺序来实现灯光从一个方向向另一个方向移动的效果。以下是一个简单的STM32跑马灯的源码。
首先,我们需要在STM32的开发环境中创建一个新的工程,并将相关的STM32库导入。
```c
#include "stm32f10x.h"
#define LED_NUM 8
GPIO_TypeDef* LED_PORT[LED_NUM] = {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG};
const uint16_t LED_PIN[LED_NUM] = {GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7};
void Delay(uint32_t nTime) {
if (SysTick_Config(SystemCoreClock / 1000)) { // 配置SysTick定时器
while (1); // 错误处理函数
}
TimingDelay = nTime;
while (TimingDelay != 0);
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭SysTick定时器
}
int main(void) {
int i, j, k;
for (i = 0; i < LED_NUM; i++) { // 初始化LED引脚
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LED_PIN[i];
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(LED_PORT[i], &GPIO_InitStructure);
}
while (1) {
for (j = 0; j < LED_NUM; j++) { // 逐个点亮LED灯
GPIO_SetBits(LED_PORT[j], LED_PIN[j]);
Delay(100);
GPIO_ResetBits(LED_PORT[j], LED_PIN[j]);
}
for (k = LED_NUM - 2; k > 0; k--) { // 逐个熄灭LED灯
GPIO_SetBits(LED_PORT[k], LED_PIN[k]);
Delay(100);
GPIO_ResetBits(LED_PORT[k], LED_PIN[k]);
}
}
}
```
以上是一个简单的8个LED灯的跑马灯效果,每个灯的亮灭时间间隔为100ms。我们通过循环控制LED灯的点亮和熄灭,实现灯光从一个方向向另一个方向移动的效果。
在代码中,我们使用了定时器来实现延时函数`Delay()`。通过配置定时器的频率和SysTick定时器的CLK频率,我们可以实现精确的延时。
在`main()`函数中,我们首先初始化LED引脚的GPIO端口,并通过循环逐个点亮和熄灭LED灯。这样就实现了一个简单的STM32跑马灯效果。
请注意,以上代码只是一个简单的示例,实际的STM32跑马灯源码可能会更加复杂,根据具体的需求和硬件配置进行适当的修改。
阅读全文
相关推荐















