stm32串口通信利用上位机控制led灯亮灭代码,标准库
时间: 2025-01-01 15:37:16 浏览: 17
STM32通过USART(通用异步收发器)实现串口通信,上位机(通常是指PC或者其他嵌入式设备)通过发送特定指令控制LED灯的亮灭。以下是一个简化的示例代码,假设我们使用的是STM32F103C8T6,并使用Keil MDK集成开发环境以及STM32CubeMX配置了串口:
```c
#include "stm32f10x.h"
#include "stm32f1xx_hal.h"
// 定义LED和串口初始化函数
void ledInit(uint8_t ledPin) {
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 配置GPIOA时钟
GPIO_InitStruct.Pin = ledPin; // LED引脚
GPIO_InitStruct.Mode = GPIO_Mode_Out_PP; // 输出推挽模式
GPIO_InitStruct.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void USART_Init(void) {
USART_HandleTypeDef UsartHandle;
// 在这里设置USART1的配置,比如BaudRate、DataBits、StopBits等
// 根据实际需求填写UsartHandle.Init结构体
HAL_UART_Init(&UsartHandle);
}
// 主循环处理串口接收和LED控制
void process_uart() {
uint8_t data;
while (HAL_UART_IsRxAvailable(&UsartHandle)) { // 如果有数据可读
HAL_UART_Receive(&UsartHandle, &data, 1, 1000); // 接收一字符
if (data == '1') { // 如果接收到开灯命令
GPIO_SetBits(GPIOA, GPIO_Pin_0); // 点亮LED
} else if (data == '0') { // 如果接收到关灯命令
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 关闭LED
}
}
}
int main(void) {
ledInit(LED_Pin); // 初始化LED
USART_Init(); // 初始化串口
while (1) {
process_uart();
}
return 0;
}
```
阅读全文