这段时间用stm32折腾can总线,总结一下。
以下图片为MSO4030B示波器的can总线解析截图:
(原文件名:标准数据帧(id0).png)
(原文件名:标准数据帧
(原文件名:标准数据帧(长度2id0向4).png)
(原文件名:标准数据帧(长度2id0向4)事件表.png)
(原文件名:标准数据帧(长度8id0向4).png)
(文件名:标准远程帧(id0x12).png)
(文件名:标准远程帧(id0x12)事件表.png)
(文件名:扩展数据帧(id0x44).png)
(文件名:扩展数据帧(id0x44)事件表.png)
(文件名:扩展远程帧(id0x12).png)
(文件名:扩展远程帧(id0x12)事件表.png)
理论格式:
(文件名:数据帧格式.jpg)
(文件名:远程帧格式.jpg)
RS232数据解析
-----------------------------------------------------------------------
16进制电平对照反相视图
(原文件名:16进制电平对照反相视图.png)
16进制电平对照视图
从上图可以看出:
-12v表示逻辑1。
(原文件名:16进制电平对照视图.png)
16进制整体视图
(原文件名:16进制整体视图.png)
rs232电平(tx)
(原文件名:rs232电平(tx).png)
波特率测量
按照波特率9600来计算,1bit的时间宽度应该是:1000000/9600=104.1us,和图中相符。
(原文件名:波特率测量.png)
局部放大ascii视图
(原文件名:局部放大ascii视图.png)
事件表模式观看
(原文件名:事件表模式观看.png)
整体ascii模式视图
(原文件名:整体ascii模式视图.png)
总结一下:
can总线:
高电平表示逻辑0,低电平表示逻辑1。
can总线的起始场是一个bit的逻辑0(高电平),帧结束由7个bit的逻辑1(低电平)组成。
根据can总线的定义:在发生的时候,每连续五个bit的逻辑0,就会跟着补充一个bit的逻辑1;每连续五个bit的逻辑1,就会跟着补充一个bit的逻辑0。
因此根据上面的波形解析数据的时候,每出现000001这种数据串,那么1就是发送的时候根据can协议填充进去的,所以解码的时候1要去掉,即00000。
再举个例子:11111001表示的数据应该是:1111101。
RS232:(假定数据位8bit,停止位1bit,无奇偶校验)
-12v表示逻辑1,+12v表示逻辑0.
根据波形解析的时候,高电平表示逻辑0,低电平表示逻辑1。
RS232发送数据是以ascii码的形式发送出去的。例如发送字符‘s’,实际上发送的就是0x73.
每发送一个字符:
首先是一个bit的起始位(逻辑0),然后将ascii值的最低位发送出去,接着是次高位。。。。总之是低位在前,高位在后。
例如0x73,发送的时候就是:0b11001110。
接着就是1个bit的停止位(逻辑1)。
1个bit的逻辑的时间宽度就是:1/波特率(单位是秒)。
====
http://hi.baidu.com/%D1%A6%B3%AC%BD%DCmcu/blog/item/305288ead7a838dbb3fb95d4.html