Stm32串口发送数据无法接收到第一个字节

在硬件复位之后读取一下sr寄存器就可以

以下是在STM32中使用HAL库实现串口接收数据的代码示例: ```c uint8_t rx_data[10]; // 接收缓冲区 uint8_t rx_complete = 0; // 接收完成标志 // 串口接收完成回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { static uint8_t rx_index = 0; // 接收缓冲区索引 if (huart->Instance == USART1) // 判断是哪个串口 { if (rx_index == 0) // 如果是第一个字节,清空接收缓冲区 { memset(rx_data, 0, sizeof(rx_data)); } rx_data[rx_index++] = huart->Instance->DR; // 读取数据到缓冲区 if (rx_index == sizeof(rx_data)) // 如果接收完成 { rx_index = 0; rx_complete = 1; // 设置接收完成标志 } } } int main(void) { // 初始化串口 UART_HandleTypeDef uart_handle; uart_handle.Instance = USART1; uart_handle.Init.BaudRate = 115200; uart_handle.Init.WordLength = UART_WORDLENGTH_8B; uart_handle.Init.StopBits = UART_STOPBITS_1; uart_handle.Init.Parity = UART_PARITY_NONE; uart_handle.Init.Mode = UART_MODE_RX; uart_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; uart_handle.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&uart_handle); // 开始接收数据 HAL_UART_Receive_IT(&uart_handle, rx_data, sizeof(rx_data)); while (1) { if (rx_complete) // 如果接收完成 { // 处理接收到的数据,例如打印出来 printf("Received data: %s\r\n", rx_data); rx_complete = 0; // 清空接收完成标志 HAL_UART_Receive_IT(&uart_handle, rx_data, sizeof(rx_data)); // 继续接收数据 } } } ``` 在这个例子中,我们使用了HAL库提供的`HAL_UART_Receive_IT()`函数来启动串口接收,并注册了一个回调函数`HAL_UART_RxCpltCallback()`来处理接收完成事件。当串口接收完成一个数据,`HAL_UART_RxCpltCallback()`函数会被自动调用,我们在这个函数中读取接收到的数据并保存到缓冲区中,当缓冲区填满,我们认为接收完成,并设置一个接收完成标志。在主程序中,我们不断检查接收完成标志,如果接收完成,就处理接收到的数据并清空接收完成标志,然后继续启动串口接收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值