當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]一、背景: 還是繼續(xù)CAN通信,要節(jié)省開發(fā)時間,使用庫函數(shù)可大大降低開發(fā)周期,并且還能確保寄存器的配置幾 乎是萬無一失,所以,在此就STM32F10xx的CAN操作庫函數(shù)的使用做個簡析。 STM32有庫函數(shù)這件事,對軟

一、背景:

還是繼續(xù)CAN通信,要節(jié)省開發(fā)時間,使用庫函數(shù)可大大降低開發(fā)周期,并且還能確保寄存器的配置幾

乎是萬無一失,所以,在此就STM32F10xx的CAN操作庫函數(shù)的使用做個簡析。

STM32有庫函數(shù)這件事,對軟件開發(fā)人員來說是極其利好的,對庫函數(shù)有褒有貶,說不好的,無非就是

庫函數(shù)會占用一些額外Ram,并且不利于新手對于這款單片機(jī)更深層次的理解等等。我倒覺得,不應(yīng)當(dāng)有這

些顧慮,首先,庫函數(shù)那都是由一些非常牛,并且對該型MCU極其了解的廠方工作人員編寫,不去說萬無一

失,但也是絕對按照標(biāo)準(zhǔn)來的好東西;其次,開發(fā)最重要的既是時間,先利用庫函數(shù)實現(xiàn)快速開發(fā),如若需

要深層次定制或者更改,再來對其進(jìn)行研究,這樣就可以節(jié)省時間去完成別人還未做過的事情,然后自己努

力去變成一個為別人提供庫函數(shù)的人 :) ;至于新手,若需要知道如何正確使用庫函數(shù),必然會去研究手冊

上那些東西。所以,推薦有庫函數(shù)則優(yōu)先使用庫函數(shù)。貌似跑題了 - -! 繼續(xù),開始正文。


二、正文:

1、void CAN_DeInit(CAN_TypeDef* CANx)

// 操作APB1外設(shè)復(fù)位寄存器。對CAN進(jìn)行復(fù)位操作。

// 在STM32F10xx中,CAN的時鐘由APB1分頻提供。

2、uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)

// 根據(jù)CAN_InitStruct結(jié)構(gòu)體(詳見以下),對CAN進(jìn)行初始化操作。

typedef struct

{

// CAN_Mode(Loop back mode)

/* 0: 禁止環(huán)回模式。

* 1:允許環(huán)回模式。

*/

uint8_t CAN_Mode;

// 以下4個參數(shù),決定了CAN的波特率(具體如何配置,網(wǎng)上有計算工具)

uint16_t CAN_Prescaler;

uint8_t CAN_SJW;

uint8_t CAN_BS1;

uint8_t CAN_BS2;

// TTCM(Time Triggered communication mode)

/* 在該模式下,CAN硬件的內(nèi)部定時器被激活,并且被用于產(chǎn)生(發(fā)送與接收郵箱的)時間戳,

* 分別存儲在CAN_RDTxR/CAN_TDTxR寄存器中。內(nèi)部定時器在每個CAN位時間(見22.7.7節(jié))累加。

* 內(nèi)部定時器在接收和發(fā)送的幀起始位的采樣點位置被采樣,并生成時間戳。

*/

FunctionalState CAN_TTCM;

// ABOM(Automatic Bus-off managerment)

/* 0:軟件對CAN_MCR寄存器的INRQ位置"1"隨后清"0"后,一旦硬件檢測到128次11位連續(xù)的隱形位,

* 則退出離線狀態(tài)。

* 1:硬件檢測到128次11位連續(xù)的隱形位,則自動退出離線狀態(tài)。

*/

FunctionalState CAN_ABOM;

// AWUM (Automatic wakeup mode)

/* 0:由軟件清除CAN_MCR的"SLEEP"位后,喚醒睡眠模式。

* 1:檢測到報文,由硬件自動喚醒,且自動清零"SLEEP""SLAK"

*/

FunctionalState CAN_AWUM;

// NART(No Automatic retransmission)

/* 0:按照CAN標(biāo)準(zhǔn),CAN硬件在發(fā)送報文失敗后會一直重新發(fā)送直至發(fā)送成功。

* 1:CAN報文只發(fā)送一次。不管發(fā)送結(jié)果如何。

*/

FunctionalState CAN_NART;

// RFLM (Receive FIFO Locked mode)

/* 0:接收溢出后,F(xiàn)IFO未被鎖定,即報文會被新報文覆蓋。

* 1:接收溢出后,F(xiàn)IFO被鎖定,即新報文會被丟棄。

*/

FunctionalState CAN_RFLM;

// TXFP(Transmit FIFO priority)

/* 0:優(yōu)先級由報文的標(biāo)識符來決定。

* 1:優(yōu)先級由發(fā)送請求的順序來決定。

*/

FunctionalState CAN_TXFP;

// FunctionalState-----------------------------------------------------|

} CAN_InitTypeDef; |

|

typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;<------------|

3、void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct)

// 將所有的CAN設(shè)置均設(shè)置為初始值。

4、void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct)

// 根據(jù)結(jié)構(gòu)體CAN_FilterInitStruct(詳見如下)對CAN濾波進(jìn)行初始化操作。

typedef struct

{

// CANFxR1 高16位

uint16_t CAN_FilterIdHigh;

// CANFxR1 低16位

uint16_t CAN_FilterIdLow;

// CANFxR2 高16位

uint16_t CAN_FilterMaskIdHigh;

// CANFxR2 低16位

uint16_t CAN_FilterMaskIdLow;

// 對應(yīng)哪一個過濾器

uint8_t CAN_FilterNumber;

// 對應(yīng)的CAN_FilterNumber過濾器模式選擇(FM1R)

/* 過濾器組(14組)的2個32位寄存器工作在標(biāo)識符屏蔽位模式。

* 過濾器組(14組)的2個32位寄存器工作在標(biāo)識符列表模式。

*/

uint8_t CAN_FilterMode;

// 對應(yīng)的CAN_FilterNumber過濾器位寬設(shè)置(CAN_FS1R)

/* CAN_FilterScale_16bit: 兩個16位過濾器

* CAN_FilterScale_32bit: 單個32位過濾器

*/

uint8_t CAN_FilterScale;

// 報文被過濾后,存放的哪個FIFO中。(CAN_FFA1R)

// 每個FIFO可以存放3條報文。

/* CAN_Filter_FIFO0: 過濾器被關(guān)聯(lián)到了FIFO0

* CAN_Filter_FIFO1: 過濾器被關(guān)聯(lián)到了FIFO1

*/

uint16_t CAN_FilterFIFOAssignment;

// 是否使能對應(yīng)的CAN_FilterNumber濾波器

FunctionalState CAN_FilterActivation;

} CAN_FilterInitTypeDef;

5、void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState)

/* 調(diào)試凍結(jié),即在調(diào)試時,CAN有兩種工作模式

* -->照常工作

* -->凍結(jié)其收發(fā),但仍可對FIFO進(jìn)行讀寫。

* 操作寄存器為"CAN_MCR"的"DBF"位(Debug Freeze)。

*/

6、void CAN_SlaveStartBank(uint8_t CAN_BankNumber)

/* 內(nèi)部對CAN過濾器主控制器(CAN_FMR)進(jìn)行操作。

* 功能

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉