stm32f103c8t6流水灯代码,用pa8 pa9 pa10 pa11端口
时间: 2024-10-16 21:21:34 浏览: 31
使用ArduinoIDE开发STM32F103C8T6温湿度DHT11测量
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,其PA8、PA9、PA10和PA11这四个GPIO端口通常用于实现简单的LED流水灯效果。以下是简化的C语言代码示例,展示如何配置这些端口作为输入,并通过逐位轮流点亮每个LED来创建流水灯效果:
```c
#include "stm32f1xx.h"
// LED定义
#define LED_PIN_8 GPIO_Pin_0 // PA8对应第一个LED
#define LED_PIN_9 GPIO_Pin_1 // PA9对应第二个LED
#define LED_PIN_10 GPIO_Pin_2 // PA10对应第三个LED
#define LED_PIN_11 GPIO_Pin_3 // PA11对应第四个LED
// GPIO初始化
void init_GPIO(void) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // 启动PA8-PA11所在的GPIOD时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LED_PIN_8 | LED_PIN_9 | LED_PIN_10 | LED_PIN_11; // 配置所有LED
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 高速
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // push-pull输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 上拉下拉无选态
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
// 流水灯函数
void led_blink_sequence(uint8_t start, uint8_t direction) {
static uint8_t current_led = start; // 当前亮起的LED
GPIO_SetBits(GPIOD, current_led << 1); // 设置当前LED高电平,显示点亮
if (direction == 1) { // 顺时针方向
if (++current_led > 4) {
current_led = 0; // 到达最后一个LED后回到第一个
}
} else if (direction == -1) { // 逆时针方向
if (current_led == 0) {
current_led = 4; // 到达第一个LED后跳过
} else {
--current_led; // 递减到上一个LED
}
}
HAL_Delay(500); // 等待一段时间后再切换下一个LED
}
int main(void) {
init_GPIO();
while (1) {
led_blink_sequence(0, 1); // 从第一个LED开始顺时针闪烁
led_blink_sequence(0, -1); // 然后逆时针闪烁
}
return 0;
}
阅读全文