STM8S的can波特率設定

2021-07-28 01:22:57 字數 2313 閱讀 5484

為了掌握如何設定stm8/32 can的波特率,首先我們得先了解一下位時間特性。

位時間特性邏輯通過取樣來監視序列的can匯流排,並且通過跟幀起始位的邊沿進行同步,及通過跟後面的邊沿進行重新同步,來調整其取樣點。

它的操作可以簡單解釋為,如下所述把名義上的每位的時間分為3段:

● 同步段(sync_seg):通常期望位的變化發生在該時間段內。其值固定為1個時間單元(1 x tcan)。

● 時間段1(bs1):定義取樣點的位置。它包含can標準裡的prop_seg和phase_seg1。其值可以程式設計為1到16個時間單元,但也可以被自動延長,以補償因為網路中不同節點的頻率差異所造成的相位的正向漂移。

● 時間段2(bs2):定義傳送點的位置。它代表can標準裡的phase_seg2。其值可以程式設計為1到8個時間單元,但也可以被自動縮短以補償相位的負向漂移。

● 重新同步跳躍寬度(sjw):定義了在每位中可以延長或縮短多少個時間單元的上限。其值可以程式設計為1到4個時間單元。

● 有效跳變:被定義為,當bxcan自己沒有傳送隱性位時,從顯性位到隱性位的第1次轉變。

如果在時間段1(bs1)而不是在同步段(sync_seg)檢測到有效跳變,那麼bs1的時間就被延長最多sjw那麼長,從而取樣點被延遲了。相反如果在時間段2(bs2)而不是在sync_seg檢測到有效跳變,那麼bs2的時間就被縮短最多sjw那麼長,從而取樣點被提前了。為了避免軟體的程式設計錯誤,對位時間特性暫存器(can_btr)的設定,只能在bxcan處於初始化狀態下進行。

注: 關於can位時間特性和重同步機制的詳細資訊,請參考iso11898標準。

簡而言之,就是:

can波特率=apb1匯流排頻率/(brp分頻器係數*(1+tbs1+tbs2))

該公式用**中的變數來表示,就是

can匯流排的波特率=pclk1/((can_sjw +can_bs1 +  can_bs2)*can_prescaler)
比如外部晶振為8mhz,使用外部晶振的話,一般pclk1也就是8mhz,設can_sjw=1,can_bs1=5,can_bs2=4,can_prescaler=1,則設定的波特率即為8000/((1+4+5)*1)kbps=800kbps。
can位時間特性暫存器 (can_btr)

位址偏移量: 0x1c

復位值: 0x0123 0000

注: 當can處於初始化模式時,該暫存器只能由軟體訪問。

圖2

位31

silm:

靜默模式(用於除錯) 0: 正常狀態; 1: 靜默模式。

位30lbkm: 環迴模式(用於除錯) 0: 禁止環迴模式; 1: 允許環迴模式。

位29:26

保留位,硬體強制為0。

位25:24

sjw[1:0]: 重新同步跳躍寬度為了重新同步,該位域定義了can硬體在每位中可以延長或縮短多少個時間單元的上限。 trjw = tcan x (sjw[1:0]

+ 1)。

位23保留位,硬體強制為0。

位22:20

ts2[2:0]: 時間段2 該位域定義了時間段2占用了多少個時間單元 tbs2 = tcan x (ts2[2:0] + 1)。

位19:16

ts1[3:0]: 時間段1 該位域定義了時間段1占用了多少個時間單元 tbs1 = tcan x (ts1[3:0]

+ 1)

位15:10

保留位,硬體強制其值為0。

位9:0

brp[9:0]: 波特率分頻器該位域定義了時間單元(tq)的時間長度 tq = (brp[9:0]+1) x tpclk

配置波特率是在can模組初始化時配置,**示例如下:

uint8_t  can_configuration(uint8_t  can_prescaler)

在晶振為16mhz的stm8s上執行如下語句:

can_configuration(2);
則pclk1也就是16mhz,can_sjw=1,can_bs1=5,can_bs2=4,can_prescaler=2,則設定的波特率即為16000/((1+4+5)*2)kbps=800kbps。

一般在配置can波特率時保持tbs1>=tbs2 ,tbs2>=1個can時鐘週期 ,tbs2>=2tsjw。

STM32波特率設定

usart1的波特率公式 baud rate fck 16 usartdiv usartdiv fck 16 baud rate 然後按下述方法計算,例如匯流排時鐘頻率為72mhz,配置波特率為9600過程如下 求得 usartdiv 468.75,因為stm32的波特比率暫存器usart brr分...

STM32之CAN 配置波特率

為了掌握如何設定stm32 can的波特率,首先我們得先了解一下位時間特性。位時間特性邏輯通過取樣來監視序列的can匯流排,並且通過跟幀起始位的邊沿進行同步,及通過跟後面的邊沿進行重新同步,來調整其取樣點。它的操作可以簡單解釋為,如下所述把名義上的每位的時間分為3段 同步段 sync seg 通常期...

STM32之CAN 配置波特率

為了掌握如何設定stm32 can的波特率,首先我們得先了解一下位時間特性。位時間特性邏輯通過取樣來監視序列的can匯流排,並且通過跟幀起始位的邊沿進行同步,及通過跟後面的邊沿進行重新同步,來調整其取樣點。它的操作可以簡單解釋為,如下所述把名義上的每位的時間分為3段 同步段 sync seg 通常期...