STM32 CAN 波特率的計算
STM32裡的CAN 支援2.0A,2.0B, 帶有FIFO,中斷等, 這裡主要提一下內部的時鐘應用.
bxCAN掛接在APB1總線上,採用匯流排時鐘,所以我們需要知道APB1的匯流排時鐘是多少. 我們先看看下圖,看看APB1匯流排時鐘:
APB1時鐘取自AHB的分頻, 而AHB又取自系統時鐘的分頻, 系統時鐘可選HSI,HSE, PLLCLK, 這個在例程的RC設定裡都有的,
然後再看看有了APB1的時鐘後,如何算CAN的匯流排速率, 先看下圖:
有了上邊的這個圖,基本就清楚了.
匯流排時鐘MHz (3+TS1+TS2)*(BRP+1)
===================================================
下面是我的計算:
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
注意//#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;CAN_InitStructure.CAN_Prescaler = 4;//2nominal bit time(3+5+1)tq=9tq關於分頻係數 檢視 system_stm32f10x.c
所以can時鐘 72MHZ/2/4=9 Mhztq=1/36Mhz波特率為 1/nominal bit time= 9/9=1MHZ
=========================================
-----------------------------------------------
====================================================
void CAN_Configuration(void) { CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; /* CAN register init */ CAN_DeInit(); CAN_StructInit(&CAN_InitStructure); /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_BS2_8tq; CAN_InitStructure.CAN_Prescaler=200; CAN_Init(&CAN_InitStructure); /* CAN filter init */ CAN_FilterInitStructure.CAN_FilterNumber=0; CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit; CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0; CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); } 注意//#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */撥特率10K,公式:72MHZ/2/200/(1+9+8)=0.01,即10K,和SJA1000測試通過
================================================
120歐姆電阻要加上!!!
哦確實是 CAN->BTR = (u32)((u32)CAN_InitStruct->CAN_Mode << 30) | ((u32)CAN_InitStruct->CAN_SJW << 24) | ((u32)CAN_InitStruct->CAN_BS1 << 16) | ((u32)CAN_InitStruct->CAN_BS2 << 20) | ((u32)CAN_InitStruct->CAN_Prescaler - 1); 總結一下 Fpclk=36M 時 can波特率為250k 的配置為 /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=9; CAN_Init(&CAN_InitStructure); 250k
======================================
的:將can匯流排波特率設定為250k 在官方的can例程上 給出了100k 查詢 和500k 中斷方式的例子 分別設定如下: CAN_Polling: /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=5; CAN_Init(&CAN_InitStructure); 100k /* CAN cell init */ CAN_Interrupt CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=1; CAN_Init(&CAN_InitStructure); //500k
can時鐘是RCC_APB1PeriphClock,你要注意CAN時鐘頻率 CAN波特率 = RCC_APB1PeriphClock/CAN_SJW+CAN_BS1+CAN_BS2/CAN_Prescaler; 如果CAN時鐘為8M, CAN_SJW = 1,CAN_BS1 = 8,CAN_BS2 = 7,CAN_Prescaler = 2 那麼波特率就是=8M/(1+8+7)/2=250K
=========================================
得到500Kb/s的波特率
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;每一位的Tq數目 = 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16如果CAN時鐘是 8 MHz : (8M / 1 ) / 16 = 500K其中:1 為分頻係數16 為每一位的Tq數目為了設定為 100K, 把分頻係數改為5即可, BS1 BS2 不變每一位的Tq數目 = 1 (固定) + 8 (BS1) + 7 (BS2) = 16如果CAN時鐘是 8 MHz : (8M / 5 ) / 16 = 100K如果想得到 1M 的波特率, CAN時鐘仍然是 8 MHz的情況下, 分頻係數不變應該改變 BS1 BS2CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;每一位的Tq數目 = 1 (固定) + 5 (BS1) + 2 (BS2) = 8如果CAN時鐘是 8 MHz : (8M / 1 ) / 8 = 1000K另外儘可能的把取樣點設定為 CiA 推薦的值:75% when 波特率 > 800K80% when 波特率 > 500K87.5% when 波特率 <= 500K所以對於 100K 的波特率(假定使用 8MHz 時鐘) 可以修改該BS1 BS2 為:CAN_InitStructure.CAN_Prescaler=5;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以對於 500K 的波特率(假定使用 8MHz 時鐘) 可以修改該BS1 BS2 為:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以對於 1000K 的波特率(假定使用 8MHz 時鐘) 可以修改該BS1 BS2 為:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+5) / (1+5+2) = 75%個人見解, 僅供參考。 |
上邊這個公式算出來的就是CAN的速率了
相關推薦
STM32 CAN 波特率的計算
STM32裡的CAN 支援2.0A,2.0B, 帶有FIFO,中斷等, 這裡主要提一下內部的時鐘應用. bxCAN掛接在APB1總線上,採用匯流排時鐘,所以我們需要知道APB1的匯流排時鐘是多少. 我們先看看下圖,看看APB1匯流排時鐘: APB1時鐘取自AHB的分頻,
飛思卡爾s12系列CAN波特率計算
最近在看飛思卡爾s12系列CAN部分,發現波特率計算這塊沒有一個講的詳細的,在資料手冊裡也沒有詳細說明。 經過仔細研究,特將CAN部分波特率計算總結出來。 引用部分CAN波特率計算資料如下: 簡單介紹一個波特率的計算,在CAN的底層協議裡將CAN資料的每一位時間
STM32 CAN 波特率、取樣點設定
為了總結在STM32上設定CAN波特率和取樣點,所以整理自己的理解如下: 一,CAN波特率 1.CAN位時序 2.公式推導 這裡Tpclk理解成CAN時鐘的週期(實際上CAN使用APB1時鐘)
STM32中CAN波特率的計算
車輛使用的250K 的波特率,使用STM32製作的控制板中的CAN波特率的計算 波特率=APB1Clock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler (PS:CAN_SJW表示重新同步跳躍寬度,不參與波特率的計算,其值可以程式設計為1到4個時間單
CAN波特率設定時的引數計算
作者:iamlaosong CAN(Controller Area Network)匯流排最早由德國 BOSCH公司提出,主要用於汽車內部測量與控制中心之間的資料通訊。由於其良好的效能,在世界範圍內廣
8051單片機串口波特率計算方式
計算公式 波特率 post 12c mod 計算 log 系統 時鐘頻率 STC12C5A60S2單片機兼容80C51單片機,其串口波特率可以由定時器產生,也可以由獨立波特率發生器產生。其波特率模式可以是固定的,也可以是可變的。 固定波特率:當 模式0的通信速度設置
CAN波特率設定
通過對CAN位定時暫存器CANBIT以及CAN波特率預分頻擴充套件暫存器CANBRPE的設定可以得到需要的CAN通訊波特率。 CAN的位定時配置不當,將使得CAN模組無法按照目標波特率接入CAN網路,將導致CAN節點無法通訊正常。 根據CAN規範,位時間被分成4個時間段:同步段(Sync_Seg)、傳播時
STM32 -> DWT時間計算
基於ARM-M3核心的DWT 資料監測暫存器: dwt.c檔案 #include "dwt.h" #define DWT_CR *(uint32_t *)0xE0001000 #define DWT_CYCCNT *(uint32_t *)0xE0001004 #d
適合初學者的STM32 CAN協議理解總結( ISO11898 標準)
暑假學習的時候看到了CAN匯流排,幾個小夥伴好像看的都比較苦惱。是的,對於大量的說明難免有些不想看,看不懂為什麼要把TIM這些東西設為1,很多字元又代表什麼意思......但對知識的畏懼是無法向前的。靜下心來慢慢看就好了!我在這裡記錄一些我學習CAN協議過程中的理解總結,希望
stm32CAN波特率計算小程式(QT原始碼)
軟體:Qt Creator 開發環境:Window7 用qt做得一個計算波特率的小程式,在實際的應用中我們設定波特率的時候是通過以下引數來定的: CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStr
stm32 CAN過濾器組
在互聯型產品中, CAN1和CAN2分享28個過濾器組 其它STM32F103xx系列產品中有14個過濾器組 位寬設定 四種配置方式: 1個32位的遮蔽位模式 2個32位的識別符號列表模式,可以過濾2個識別符號id
STM32 CAN應用-過濾器設定
在使用STM32的CAN控制器進行資料收發,當用到位遮蔽模式的時候,就要設定過濾器了,這個關係到是否能夠接收到想要的資料。下面針對幾種不同情況對CAN過濾器(Filter)進行設定。CAN_FilterInitStructure.CAN_FilterMode = CAN_F
微控制器串列埠通訊波特率計算
在模式0和模式2下,串列埠波特率固定,模式0為Fosc/12。模式2為Fosc/32或Fosc/64,具體由PCON暫存器的SMOD位決定。 在模式1和模式3下,波特率是一個可變值,波特率可以由定時器1產生(8052可以由定時2產生),那麼波特率到底為多少呢?波特率由定
CAN波特率與負載率
https://wenku.baidu.com/view/1f3ebacbb9f67c1cfad6195f312b3169a451eaa8.html 1、背景說明: 1.1為了講清這個問題,需要先就兩個概念進行說明:波特率和位元率。 波特率:單位時間內,通訊通道傳輸碼元的速
STM32的CRC計算
CRC計算 CRC校驗僅用於保證全雙工通訊的可靠性。資料傳送和資料接收分別使用單獨的CRC計算器。 通過對每一個接收位進行可程式設計的多項式運算來計算CRC。CRC的計算是在由SPI_CR1暫存器 中CPHA和CPOL位定義的取樣時鐘邊沿進行的。 注意: 該SPI
STM32 CAN匯流排識別符號過濾器難點解析
CAN匯流排是目前應用非常多的一種匯流排,在汽車電子,航空航天中應用廣泛,博主用的是戰艦的STM32開發板。CAN的介紹和功能特點就不講了,書本上網上都有,請大家在閱讀本文前瞭解CAN匯流排協議的特點
STM32 CAN 使用心得!
1.CAN最大的優點是可以實現多機通訊,適合工業控制組網的應用,有專門的PCI板卡可以將CAN連線的PC機上,對網路監控 2.CAN匯流排出了電源線之外就是CANH和CANL兩個線,CAN對總線上點評的解析靠這兩根線同時完成,即時 CAN總線上的電平分為隱形和現行
STM32微控制器的串列埠通訊波特率應該這樣計算~
1什麼是波特率不管是什麼微控制器,在使用串列埠通訊的時候,有一個非常重要的引數:波特率。什麼是波
STM32下調試CAN通信
mas 結構 bits source ant pen eset disable sca 基本流程: 1、初始化CAN模塊: 啟用CAN時鐘 配置CAN功能寄存器(包括位定時,分頻等等) 配置CAN過濾器 打開中斷 2、初始化I/O口
STM32定時器輸出PWM頻率和步進電機控制速度計算
內部 定時 .cn 但是 nbsp 返回 定時器 開發 r12 1、STM32F4系列定時器輸出PWM頻率計算 第一步,了解定時器的時鐘多少: 我們知道AHP總線是168Mhz的頻率,而APB1和APB2都是掛在AHP總線上的。 (1)高級定時器timer1, time