STM32f407串口通信代码
时间: 2024-08-29 12:01:43 浏览: 65
STM32F407系列微控制器使用Serial peripheral interface (SPI)或通用异步收发传输(UART)模块进行串口通信。下面是一个基本的使用UART(USART)的例子,假设我们想要初始化并从一个USART接收数据:
```c
#include "stm32f4xx_hal.h"
#include "usart.h"
// 定义串口号
#define USART_USART1 USART1
// 初始化函数
void USART_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
// 配置TX/RX端口
GPIO_InitStruct.Pin = USART_USART1_TX | USART_USART1_RX;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; //推挽模式
GPIO_InitStruct.Pull = GPIO_NOPULL; //无上拉下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //高速
GPIO_InitStruct.Alternate = GPIO_AF7_USART1; //映射到USART1的PA9/PB10引脚
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置USART
USART_HandleTypeDef usartHandle;
usartHandle.Instance = USART_USART1;
usartHandle.Init.BaudRate = 9600; //设置波特率
usartHandle.Init.WordLength = UART_WORD_LENGTH_8B10B; //8位数据位,包括奇偶校验
usartHandle.Init.StopBits = UART_STOPBITS_1; //停止位1个
usartHandle.Init.Parity = UART_PARITY_NONE; //无奇偶校验
usartHandle.Init.HardwareFlowControl = UART_HWCONTROL_NONE; //无硬件流控
usartHandle.Init.Mode = UART_MODE_TXRX; //全双工模式
if (HAL_UART_Init(&usartHandle) != HAL_OK) {
while(1); // 此处放置错误处理代码
}
}
// 读取串口数据函数
uint8_t USART_ReadByte(void) {
return HAL_UART_ReadData(&usartHandle);
}
int main(void) {
USART_Init(); // 初始化串口
while (1) {
uint8_t data = USART_ReadByte();
if (data != '\r' && data != '\n') { // 检查是否接收到有效字符
printf("Received byte: %d\r\n", data);
}
}
}
```
阅读全文