can匯流排通訊的各節點通訊時會產生相位差,所以要進行位同步,兩個節點保持步調一致。
can_sjw:重新同步跳躍寬度(sjw) 。定義了在每位中可以延長或縮短多少個時間單元的上限。其值可以程式設計為1到4個時間單元。
can_bs1:時間段1(bs1):定義取樣點的位置。其值可以程式設計為1到16個時間單元,但也可以被自動延長,以補償因為網路中不同節點的頻率差異所造成的相位的正向漂移。
can_bs2:時間段2(bs2):定義傳送點的位置。其值可以程式設計為1到8個時間單元,但也可以被自動縮短以補償相位的負向漂移。
can_prescaler:直觀理解就是分頻率。
can_sjw : can_sjw_1tq - can_sjw_4tq 一般預設為1 不能比任何一相位緩衝段長
can_bs1 : can_bs1_1tq - can_bs1_16tq
can_bs2 : can_bs2_1tq - can_bs2_8tq
can_prescaler : 1 - 1024
stm32f1x配置說明:
ex:根據需要使用的波特率選擇取樣率:
比如我需要baud = 250k,取樣率就是0.875;
(tss + ts1)/(tss + ts1 + ts2) = 0.875
(1 + ts1) / (1 + ts1 + ts2) = 0.875
要讓ts1 和ts2 都為整數且上面等式成立,則有: can_bs1 = 6,can_bs2= 1;
can_bs1 = 13,can_bs2= 2
……2.根據baud = 36000000 / (1 + can_bs1 + can_bs2) / can_prescaler = 250k
can分頻: can_prescaler = 36000000/(1 + 13 + 2)/250k = 9;
所以需要配置canband = 250k引數為:
can_bs1 = can_bs1_13tq(13)
can_bs2 = can_bs2_2tq(2)
can_prescaler = 9
程式中can波特率給對應引數:
stm32波特率計算
1.什麼是波特率 不管是什麼微控制器,在使用串列埠通訊的時候,有乙個非常重要的引數 波特率。什麼是波特率 波特率就是每秒傳送的位元組數。雙方在傳輸資料的過程中,波特率一致,這是通訊成功的基本保障。下面以stm32微控制器為例,講解一下串列埠波特率的計算方法。2.stm32波特率相關的暫存器 stm3...
STM32之CAN 配置波特率
為了掌握如何設定stm32 can的波特率,首先我們得先了解一下位時間特性。位時間特性邏輯通過取樣來監視序列的can匯流排,並且通過跟幀起始位的邊沿進行同步,及通過跟後面的邊沿進行重新同步,來調整其取樣點。它的操作可以簡單解釋為,如下所述把名義上的每位的時間分為3段 同步段 sync seg 通常期...
STM32之CAN 配置波特率
為了掌握如何設定stm32 can的波特率,首先我們得先了解一下位時間特性。位時間特性邏輯通過取樣來監視序列的can匯流排,並且通過跟幀起始位的邊沿進行同步,及通過跟後面的邊沿進行重新同步,來調整其取樣點。它的操作可以簡單解釋為,如下所述把名義上的每位的時間分為3段 同步段 sync seg 通常期...