STM32串口通讯协议

2019-07-14 23:12发布

想写一个串口程序,可是通讯协议一直搞不明白,怎么设定帧头帧尾和数据位,怎么去识别呢???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
laidaihua
2019-07-15 14:38
先写个发送的例子吧,以TI Cortex-M3为例:
// 定义一个10字节的发送缓冲区(如果内存充足,最好定义成全局变量,用起来比较方便)
// 这里假设你的通讯协议定义的一帧数据包中有10个字节:
// 第1字节为帧头,第2字节为设备识别码,后面有7字节的数据,最后一字节为校验和
unsigned char UART0SendBuf[10];

// 通过串口0发送若干个字节数据的函数
void Uart0SendOut(const unsigned char* pData, unsigned int len)
{
   unsigned char i;

   for(i = 0;i < len; i++)
      UARTCharPut(UART0_BASE, pData[i]);
}

// 在需要通过串口0发送数据的地方使用如下代码
   unsigned char i, j;
   unsigned char CheckSum;
   
   UART0SendBuf[0] = FRAME_HEAD;// FRAME_HEAD为帧头的宏定义
   UART0SendBuf[1] = DEVICE_ID;// DEVICE_ID为设备识别码(取决于通讯协议中是否有此项)
   CheckSum = 0;
// 这里就是你将自己想要发送的数据填充到缓冲区的代码了,请根据实际需求来修改
// 假设你要发送的7字节数据就在UserData[]数组中
   for(i=0;i<7;i++)
   {
      UART0SendBuf[i+2] = UserData[i];
      CheckSum += UserData[i];
   }
   UART0SendBuf[9] = CheckSum;// 计算校验和
   Uart0SendOut(UART0SendBuf,10);// 这里就是将一帧数据发送出去的语句了,采用的是函数调用的方式。

一周热门 更多>