- 硬件连线
-
- CubeMx中配置PA9和PA10
-
- 参数配置
-
- 中断配置
-
- 发送代码
#include "string.h" //为使用strlen()函数 int main(void) { char uart_text[20]; sprintf(uart_text,"frq=%d\r\n",frq1); HAL_UART_Transmit(&huart1,(uint8_t*)uart_text,strlen(uart_text),50); }
- 接受&解析
- 在key_of_timer.c文件中
#include "usart.h" char rxdata[30]; //临时接受数组 uint8_t rx; //数据存储数组 unsigned char rx_point; //指针指向数据存储到哪了 //串口接收回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { rxdata[rx_point++] = rx; //每次将上次接受到的数据存储下来 HAL_UART_Receive_IT(&huart1,&rx,1); //必须为1,因为每次中断只能接受1个字符 }
- 在main文件中
#include "usart.h" char car_type[5]; char car_data[5]; char car_time[13]; extern char rxdata[30]; //临时接受数组 extern uint8_t rx; //数据存储数组 extern unsigned char rx_point; //指针指向数据存储到哪了 //串口解析函数 void uart_rx_proc(void) { if(rx_point>0)//表示接受到 { if(rx_point == 12) { sscanf(rxdata,"%4s:%4s:%2s",car_type,car_data,car_time);//使用该函数按格式进行拆分 } else { //错误则发送消息 char uart_text[20]; sprintf(uart_text,"Error"); HAL_UART_Transmit(&huart1,(uint8_t*)uart_text,strlen(uart_text),50); } rx_point=0;//指针归为 memset(rxdata,0,30);//数组全清0 } } int main(void) { HAL_UART_Receive_IT(&huart1,&rx,1); //必须为1,因为每次中断只能接受1个字符 while(1) { uart_rx_proc(); } }
- 在key_of_timer.c文件中
蓝桥杯嵌入式-9:UART串口通信
![](https://img-home.csdnimg.cn/images/20240711042549.png)