03-CubeMX串口通信

一、 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;

理论部分参考正点原子视频
多看别人代码,吸取其巧妙之处为己用才能成长得更快

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值