試驗平台 僅僅 需要一台主機 一台 周立功 CAN 助手, 一個232 助手就OK
ICAN 協議
資源節點地址 電腦 我認為是0x01
51單片機主機的地址 是 0x1f
建立連接的 功能碼 是0x04
發送分幀 和 一個 幀 的 資源 source ID 0X80
所以建立連接發送的時候 上位機的地址是 0023e4fe
所以發送分幀傳送的時候 上位機的地址就是 0x0023e180 0x80 是資源節點編號
這個程序 在 51單片機板 接收到CAN 消息以后 單片機板上的數碼管從0重新開始計數。
1 我用台式機發送數據 然后將這些數據放在串口調試住手中顯示

我用筆記本上用串口調試助手觀測

實現上部分功能 我用的是下面程序

上面程序是將一幀數據 13個字節 全部拷貝過來
其中0X88 代表的是幀信息
| BIT7 |
BIT6 |
BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 |
| FF |
RTR |
X |
X |
DLC.3 |
DLC.2 |
DLC.1 |
DLC.0 |
| 1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
表示 擴展幀 ,數據幀 數據長度 8
在調試本程序的時候 發現一個問題
如果我 僅定義了 一個指向unsigned char * 的指針變量 adrtemp
則我這樣寫程序, 最后拷貝的數據是不對的。
程序如下:

用周立功 發送 同樣的數據 我用筆記本的串口調試助手 接收的數據如下,是錯誤的

正確的做法 :

更改程序如下 僅僅顯示接收數據的部分

這樣僅僅顯示接收的00 01 02 03 04 05 06 7個數

分段幀的調試完成
試驗目的: 當接收完分段幀的最后一幀數據,則單片機將分段幀傳送的所有數據上傳到串口調試助手,並且發送出響應幀。
台式發送的分幀數據過程
步驟一:建立連接
步驟二:發送第一幀數據 從機接收完成數據以后,數碼管會從0重新開始計數
步驟三:發送第二幀數據 從機接收完成數據以后,數碼管會從0重新開始計數
步驟四:發送第三幀數據 在發送完第三幀數據以后,單片機發出應答幀
應答幀的ID號 0X03E03180 數據場為 00
同時 數碼管會從0 重新開始計數

串口調試助手檢測的數據

