原创 串口编程

2009-4-24 12:22 1969 3 3 分类: MCU/ 嵌入式

帧头 帧长 发送方地址 自己的地址 命令 低地址 高地址 读字节数  N字节数据 校验和


帧头 帧长 发送方地址 自己的地址 命令 低地址 高地址 写成功字节数        校验和



发送需要以下几个变量:
ga_ucTxdBuf[MaxTxdByte_C] —— 发送缓冲区,存放将要发送的数据帧;
gi_ucTxdPtr —— 发送指针,发送缓冲数组的下标,指向将要发送的字节;
gc_ucTxdCnt —— 发送字节计数,构建发送帧后赋初值,之后减计数到“0”完成。


发送需要以下几个变量:
ga_ucTxdBuf[MaxTxdByte_C] —— 发送缓冲区,存放将要发送的数据帧;
gi_ucTxdPtr —— 发送指针,发送缓冲数组的下标,指向将要发送的字节;
gc_ucTxdCnt —— 发送字节计数,构建发送帧后赋初值,之后减计数到“0”完成。


接收处理:
1,设置帧头:为了让接受程序便于找到有效的信息。因为接收器往往不断接受信息,其中也包括了很多无效信息。
2,设置环形缓冲区:环形缓冲区是一个很好的解决办法,将接收缓冲区构建为一个头尾相连的数据环,则将
有限的缓冲区等效为无限了,只要有效数据帧长度小于环形缓冲区,则该数据帧就不会丢失。


处理程序需要的变量有:
ga_ucRcvBuf[MaxRcvByte_C] —— 接收缓冲区;
gi_ucSavePtr —— 将收到的数据存放到接收缓冲区的指针,即数组下标;
gi_ucGetPtr —— 从接收缓冲区中取出数据的指针;
gi_ucStartPtr —— 收到有效帧头、帧长、接收方地址后,记下的命令字所处的位置;
gi_ucEndPtr —— 根据帧长计算出的帧结束位置。


接收缓冲区的大小MaxRcvByte_C 要设置为 2 的倍数,即 16、32、64、128,因为16以下太小,而128 以上对于单片机来说有些不实际。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条