STM32F103实现流水灯
时间: 2024-05-06 17:20:33 浏览: 74
流水灯是常见的LED灯效之一,它的实现方式比较简单。在STM32F103上实现流水灯的步骤如下:
1. 确定使用的GPIO口,一般选择PB0~PB7口,因为这些口都可以直接控制板子上的LED灯。
2. 配置GPIO口为输出模式。
3. 循环控制GPIO口输出高电平,然后延时一段时间,再控制GPIO口输出低电平,再延时一段时间。这样循环下去就能实现流水灯效果。
下面是STM32F103实现流水灯的代码示例(使用PB0~PB7口):
```
#include "stm32f10x.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// 开启GPIOB口的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 配置GPIOB口为输出模式
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
while (1)
{
// 循环控制GPIO口输出高电平,然后延时一段时间,再控制GPIO口输出低电平,再延时一段时间。
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_2);
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_3);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_4);
GPIO_ResetBits(GPIOB, GPIO_Pin_3);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_6);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
GPIO_ResetBits(GPIOB, GPIO_Pin_6);
delay_ms(200);
}
}
// 延时函数
void delay_ms(uint32_t ms)
{
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
nCount = (RCC_Clocks.HCLK_Frequency / 10000) * ms;
for (; nCount != 0; nCount--);
}
```
注意,这里使用了一个延时函数delay_ms(),可以根据需要自行实现。此外,代码中使用了STM32F10x标准库函数库,需要在工程中添加相关的库文件和头文件。
阅读全文