2019-07-14 23:12发布
laidaihua 发表于 2014-10-29 13:59 预先设置好一个发送缓冲区,先将帧头帧尾存到发送缓冲区对应位置。 要发送一帧数据前,先将待发数据填入缓 ...
laidaihua 发表于 2014-11-24 16:22 不好意思,上面有一行注释放错位置了,订正如下: CheckSum += UserData;// 计算校验和
1137858629 发表于 2014-11-30 16:26 当发送一个9位数据呢?如何用9位数据来区别地址与数据帧
最多设置5个标签!
大神,我们有些都是初学者,没见过高山,入门的时候难免会迷茫,给大家分享一个感觉比较好用的串口代码吧,感激不尽!
// 定义一个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);// 这里就是将一帧数据发送出去的语句了,采用的是函数调用的方式。
非常感谢,真是帮了我大忙了,我一定会好好体会学习的。
如果是用的直接支持9bit数据UART的MCU,在发送前直接设置数据或地址标识就可以了;
如果是需要手动设置9bit数据的MCU,则在每帧数据发送时单独设置控制位。
一周热门 更多>