STM32 CAN通訊問題

2021-06-13 23:36:49 字數 1351 閱讀 8187

檢舉

|2012-07-04 20:59

breath123

|分類:工程技術科學

|瀏覽974次

can通訊測試中

/* 使能報文標示符過濾器按照標示符的內容進行比對過濾,擴充套件id不是如下的就拋棄掉,是的話,會存入fifo0。 */

can_filterinitstructure.can_filteridhigh=(((u32)0x1234<<3)&0xffff0000)>>16;//要過濾的id高位

can_filterinitstructure.can_filteridlow=(((u32)0x1234<<3)|can_id_ext|can_rtr_data)&0xffff;//要過濾的id低位

can_filterinitstructure.can_filtermaskidhigh=0xffff;

can_filterinitstructure.can_filtermaskidlow=0xffff;

這段程式中的((u32)0x1234<<3),是左移3位的意思嗎,為什麼要先做這樣的處理?接收的報文一般格式是什麼?

我有更好的答案

提問者採納

2012-07-09 04:38

你用的是庫函式吧?官方提供的庫函式的can傳送函式在傳送過程中左移了3位,然後接受的時候又右移了三位復原。而過濾過程在這兩者之間,所以需要左移三位,才能正確過濾。

接受報文的格式就是你傳送報文的格式啊。有標準識別符號和擴充套件識別符號兩種,然後資料最大是八個位元組。

提問者評價
檢舉|

2011-12-01 20:36

bamboo89cz

|分類:其他程式語言

|瀏覽1245次

我用的微控制器是stm32的,跟上位機通訊,方式是485,通訊時候,上位機一次傳送多個位元組,如果是一下子都發,微控制器只能收到第乙個位元組資料。要是上位機發完乙個位元組後停頓一下,哪怕是1ms,再發下乙個位元組,下位機也都能收到。
我有更好的答案

提問者採納

2011-12-06 08:22

串列埠接收到資料後處理時間太長所引起。可以吧串列埠接收中斷的處理程式縮短
提問者評價

謝謝
|

2

dlamgyq|四級

採納率20%

擅長:硬體

數學化學

物理**動用品

按預設排序|

按時間排序

2011-12-02 03:19

lijianhuaab

|**

中斷時間太長。接收了之後儲存,中斷返回,不要在中斷程式中處理資料。

STM32 CAN 通訊 濾波設定問題

使用的是 32位的識別符號遮蔽位模式 can filteridhigh和can filteridlow組合成乙個32位暫存器,用來儲存將要過濾的id can filtermaskidhigh和can filtermaskidlow組合成乙個32位暫存器,用來表示這個id的哪些位 必須符合 置1 哪些...

stm32 can通訊傳送解釋

uint8 t can transmit can typedef canx,cantxmsg txmessage else if canx tsr can tsr tme1 can tsr tme1 else if canx tsr can tsr tme2 can tsr tme2 else if...

STM32 CAN通訊硬體設計

隔離方案就不說了,之前的usb轉485工具的開發在這塊已經有些基礎。其實板上非隔離can介面設計還有一些額外的注意點。回到最基礎的知識依然是cmos ttl 推挽 開漏的問題。正點原子開發板,can電路最為簡易,基本無可用性 看看乙個常用電路 非隔離 tx rx直連stm32引腳 ft 覺得還是要使...