CAN匯流排傳送資料

2021-10-03 23:40:21 字數 1344 閱讀 3522

transmitmailbox = can_transmit(can1, &txmessage);//傳送資料

while((can_transmitstatus(can1,transmitmailbox))!=cantxok);//等待資料傳送完成

uint8_t can_transmit(can_typedef* canx, cantxmsg* txmessage)

else if ((canx->tsr&can_tsr_tme1) == can_tsr_tme1)//判斷郵箱0是否空閒

else if ((canx->tsr&can_tsr_tme2) == can_tsr_tme2)//判斷郵箱0是否空閒

else

if (transmit_mailbox != can_txstatus_nomailbox)//有空閒的郵箱

else

/* set up the dlc */

txmessage->dlc &= (uint8_t)0x0000000f;        

canx->stxmailbox[transmit_mailbox].tdtr &= (uint32_t)0xfffffff0;

canx->stxmailbox[transmit_mailbox].tdtr |= txmessage->dlc;//賦dlc的值到tdtr暫存器中

/* set up the data field */

canx->stxmailbox[transmit_mailbox].tdlr = (((uint32_t)txmessage->data[3] << 24) | 

((uint32_t)txmessage->data[2] << 16) |

((uint32_t)txmessage->data[1] << 8) | 

((uint32_t)txmessage->data[0]));//低4位元組資料賦值到低位元組資料暫存器

canx->stxmailbox[transmit_mailbox].tdhr = (((uint32_t)txmessage->data[7] << 24) | 

((uint32_t)txmessage->data[6] << 16) |

((uint32_t)txmessage->data[5] << 8) |

((uint32_t)txmessage->data[4]));//高4位元組資料賦值到高位元組資料暫存器

/* request transmission */

canx->stxmailbox[transmit_mailbox].tir |= tmidxr_txrq;//軟體置高txrq位,請求傳送郵箱的資料

}return transmit_mailbox;

}

CAN匯流排資料演算法

之前學過一些c語言和彙編,了解過二進位制機器碼,未進行過多的應用。去年做了一年的開發,有些資料演算法得用到16進製制轉化為二進位制或轉化成10進製。根據自己的經驗總結下演算法。二進位制比較簡單的記憶為8,4,2,1。8 2 3 4 2 2 2 2 0 1 2 0。16進製制數,乙個位元組 byte ...

can匯流排學習(一) 初識can匯流排

can匯流排最初由德國bosch公司為汽車檢測 控制系統而設計的。1993年can成為國際標準iso11898 高速應用 和iso1119 低速應用 can的規範從can1.2規範 標準格式 發展為相容can1.2規範的can2.0規範 can2.0a為標準格式,can2.0b為擴充套件格式 目前應...

CAN匯流排學習資料總結

can 低層或稱硬體 協議僅僅定義了第 1 層 物理層 和第 2 層 資料鏈路層 can匯流排簡明易懂教程 講得不錯 can匯流排簡明易懂教程 一 can匯流排簡明易懂教程 二 can匯流排簡明易懂教程 三 深入淺出 通俗易懂的講解can bus 講解比較通俗易懂 基於stm32的can匯流排通訊學...