请给我一个比较好的stm32串口通信代码
时间: 2023-08-15 16:08:20 浏览: 69
以下是一个基于STM32的串口通信代码示例,包含发送和接收函数:
```c
#include "stm32f4xx_hal.h"
#include <string.h>
UART_HandleTypeDef huart1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
void send_data(uint8_t* data, uint8_t length);
void receive_data(uint8_t* buffer, uint8_t* length);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
uint8_t tx_data[] = "Hello, world!";
send_data(tx_data, strlen((char*)tx_data));
uint8_t rx_buffer[256];
uint8_t rx_length = 0;
receive_data(rx_buffer, &rx_length);
while(1);
}
void send_data(uint8_t* data, uint8_t length) {
HAL_UART_Transmit(&huart1, data, length, HAL_MAX_DELAY);
}
void receive_data(uint8_t* buffer, uint8_t* length) {
HAL_UART_Receive(&huart1, length, 1, HAL_MAX_DELAY);
HAL_UART_Receive(&huart1, buffer, *length, HAL_MAX_DELAY);
}
```
这个代码示例使用了STM32 HAL库提供的UART驱动函数来实现串口通信。在main函数中,首先调用send_data函数将一段字符串发送出去,然后调用receive_data函数从串口接收数据,将接收到的数据存储在rx_buffer中。
需要注意的是,在使用HAL_UART_Receive函数时,我们先接收一个字节的数据来表示接下来要接收的数据长度,然后再接收实际的数据。这是因为在串口通信过程中,数据的长度通常是不固定的,我们需要先接收一个长度字节来确定接下来要接收的数据的长度。
另外,需要在CubeMX中正确配置USART1的GPIO和UART参数,才能保证正常的串口通信。
阅读全文