stm32 串口收发代码
时间: 2024-10-13 21:00:45 浏览: 27
STM32单片机串口通信主要是通过USART(通用异步接收发送器)模块实现。以下是一个基本的使用HAL库(Hardware Abstraction Layer,硬件抽象层)编写的大致步骤:
```c
#include "stm32f1xx_hal.h"
#include <string.h>
// 定义串口号,如USART1
#define USARTx USART1
// 初始化串口
void USART_Init(void) {
USART_HandleTypeDef UsartHandle;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 启动USART时钟
// 设置波特率、数据位、停止位、奇偶校验等配置
UsartHandle.Instance = USARTx;
UsartHandle.Init.BaudRate = 9600; // 举例设置为9600bps
UsartHandle.Init.WordLength = USART_WordLength_8b;
UsartHandle.Init.StopBits = USART_StopBits_1;
UsartHandle.Init.Parity = USART_Parity_No;
HAL_UART_Init(&UsartHandle);
}
// 发送数据
void USART_SendData(char data) {
while (!HAL_UART_GetFlagStatus(&UsartHandle, UART_FLAG_TXE)); // 等待发送空闲
HAL_UART_Transmit(&UsartHandle, &data, 1, 0); // 发送数据
}
// 接收数据
uint8_t USART_ReceiveData() {
uint8_t data = 0;
if (HAL_UART_GetData(&UsartHandle, &data, 1) == HAL_OK) { // 如果有数据就返回
return data;
}
return 0; // 没有数据则返回0
}
// 主函数示例
int main(void) {
USART_Init();
char tx_data[] = "Hello STM32!"; // 待发送的数据
for (size_t i = 0; i < strlen(tx_data); ++i) {
USART_SendData(tx_data[i]);
delay_ms(100); // 添加延时防止数据过快
}
while (1) {
uint8_t rx_data = USART_ReceiveData(); // 接收数据
if (rx_data != 0) {
printf("Received: %c\n", rx_data);
}
}
}
```
阅读全文