stm32串口控制led亮灭代码
时间: 2023-10-15 15:04:34 浏览: 83
stm32实现LED灯亮灭
5星 · 资源好评率100%
好的,以下是基于 STM32F103C8T6 开发板的串口控制 LED 亮灭的示例代码:
```c
#include "stm32f10x.h"
void USART1_Init(void);
void LED_Init(void);
int main(void)
{
USART1_Init();
LED_Init();
while (1)
{
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
{
char ch = USART_ReceiveData(USART1);
if (ch == '0')
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
else if (ch == '1')
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
}
}
}
void USART1_Init(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
```
该代码中,初始化函数 `USART1_Init` 中配置了 USART1 的通信参数和引脚连接,同时开启了 USART1 的时钟和 GPIOA 的时钟。初始化函数 `LED_Init` 中则配置了 LED 引脚的连接和模式,以及开启了 GPIOC 的时钟。在主函数中,通过不断检测 USART1 接收寄存器是否有数据到来,来判断是否需要控制 LED 亮灭。当接收到字符 '0' 时,将 LED 置为低电平,当接收到字符 '1' 时,将 LED 置为高电平。
阅读全文