一、 CubeMX配置
1.首先根据本专题栏0节完成CubeMX的基本配置。理论部分可以参考正点原子HAL库版本视频。
2.根据自己的引脚打开相应的串口 PA9,PA10为UART1。
3.选择同步或者异步通信。
4.设置对应的波特率、收发模式等。同时根据需要是否打开中断(NVIC)和DMA、。
4完成设置点击生成代码。
二、 代码配置
串口通信可以根据不同的要求设计不同的通信协议。通信协议通常包括header,data,verify_data ,end_flag等。可以根据自己需求配置。
串口接收
1.一般设置接收中断,即当串口RX端接收到数据后久进入中断函数。通信协议可以在中断函数中写。
2.但通常是进入中断,中断会条用调用中断回调函数,在中断回调函数中写用户程序。
3.需要特别注意的是需要在主函数中打开中断使能
HAL_UART_Receive_IT(&huart1,revbuf,sizeof(revbuf)); //句柄,缓存地址,数据缓存大小
串口发送
1.串口通信发送数据代码
HAL_UART_Transmit(&huart1,timr,sizeof(timr),10000); //句柄,发送数据地址,发送数据大小,等待时间
while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC)!=SET); //等待发送结束
通信协议
1.在学习过程中我见到了一种非常好的通讯协议相对于某些代码而言,该代码省去了分离和整合的步骤。
具体操作步骤为:
第一步:定义union结构体。
第二步:在union中,定义需要发送大小的数组。
第三步:定义真正自己要发送的数据,为结构体。包含头,数据,尾等。
第五步:在主函数中给真正要发送的结构体赋值,串口发送时发送union的数组。
//定义在uart.h 文件中
#define DATA_LEN 16
#pragma pack(1) //一个字节
typedef union _Upload_data_ //详细可以学一下union相关的知识,union内部数据的存取
{
unsigned char buffer[DATA_LEN];
struct _Real_data_
{
unsigned char header1;
unsigned char header2;
float X_speed;
float Y_speed;
unsigned char End_flag1;
unsigned char End_flag2;
}Real_data;
}Upload_Data;
#pragma pack(4) //下面变为4字节
extern Upload_Data Send_data;
理论部分参考正点原子视频
多看别人代码,吸取其巧妙之处为己用才能成长得更快