www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

一、背景:

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

乎是萬(wàn)無(wú)一失,所以,在此就STM32F10xx的CAN操作庫(kù)函數(shù)的使用做個(gè)簡(jiǎn)析。

STM32有庫(kù)函數(shù)這件事,對(duì)軟件開(kāi)發(fā)人員來(lái)說(shuō)是極其利好的,對(duì)庫(kù)函數(shù)有褒有貶,說(shuō)不好的,無(wú)非就是

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

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

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

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

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

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


二、正文:

1、void CAN_DeInit(CAN_TypeDef* CANx)

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

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

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

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

typedef struct

{

// CAN_Mode(Loop back mode)

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

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

*/

uint8_t CAN_Mode;

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

uint16_t CAN_Prescaler;

uint8_t CAN_SJW;

uint8_t CAN_BS1;

uint8_t CAN_BS2;

// TTCM(Time Triggered communication mode)

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

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

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

*/

FunctionalState CAN_TTCM;

// ABOM(Automatic Bus-off managerment)

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

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

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

*/

FunctionalState CAN_ABOM;

// AWUM (Automatic wakeup mode)

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

* 1:檢測(cè)到報(bào)文,由硬件自動(dòng)喚醒,且自動(dòng)清零"SLEEP""SLAK"

*/

FunctionalState CAN_AWUM;

// NART(No Automatic retransmission)

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

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

*/

FunctionalState CAN_NART;

// RFLM (Receive FIFO Locked mode)

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

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

*/

FunctionalState CAN_RFLM;

// TXFP(Transmit FIFO priority)

/* 0:優(yōu)先級(jí)由報(bào)文的標(biāo)識(shí)符來(lái)決定。

* 1:優(yōu)先級(jí)由發(fā)送請(qǐng)求的順序來(lái)決定。

*/

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(詳見(jiàn)如下)對(duì)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;

// 對(duì)應(yīng)哪一個(gè)過(guò)濾器

uint8_t CAN_FilterNumber;

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

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

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

*/

uint8_t CAN_FilterMode;

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

/* CAN_FilterScale_16bit: 兩個(gè)16位過(guò)濾器

* CAN_FilterScale_32bit: 單個(gè)32位過(guò)濾器

*/

uint8_t CAN_FilterScale;

// 報(bào)文被過(guò)濾后,存放的哪個(gè)FIFO中。(CAN_FFA1R)

// 每個(gè)FIFO可以存放3條報(bào)文。

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

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

*/

uint16_t CAN_FilterFIFOAssignment;

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

FunctionalState CAN_FilterActivation;

} CAN_FilterInitTypeDef;

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

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

* -->照常工作

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

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

*/

6、void CAN_SlaveStartBank(uint8_t CAN_BankNumber)

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

* 功能

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

在Linux環(huán)境下的C語(yǔ)言編程中,函數(shù)的可重入性(Reentrancy)是一個(gè)至關(guān)重要的概念。它直接關(guān)系到多線程或多任務(wù)環(huán)境下程序的穩(wěn)定性和可靠性。所謂可重入函數(shù),是指一個(gè)函數(shù)可以被多個(gè)線程或任務(wù)安全地調(diào)用,而不會(huì)導(dǎo)致數(shù)...

關(guān)鍵字: Linux 庫(kù)函數(shù)

CAN和CANopen區(qū)別

關(guān)鍵字: canopen can

這篇文章想分享筆者在嵌入式開(kāi)發(fā)過(guò)程中常用的庫(kù)函數(shù),他們的使用方法,使用場(chǎng)景,使用好處以及頭文件位置。1#include一般我在寫C代碼的時(shí)候都會(huì)包含此頭文件,因?yàn)橐坏┌宋募螅憔涂梢詴晨斓氖褂胋ool數(shù)據(jù)類型,而不...

關(guān)鍵字: 庫(kù)函數(shù)

關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來(lái)源:知乎作者:Clarence這篇文章想分享筆者在嵌入式開(kāi)發(fā)過(guò)程中常用的庫(kù)函數(shù),他們的使用方法,使用場(chǎng)景,使用好處以及頭文件位置。1#include一般我在寫C代碼的時(shí)候都會(huì)包含此頭文件,...

關(guān)鍵字: 庫(kù)函數(shù)

基本概念闡述memcpy和memmove都是C語(yǔ)言的庫(kù)函數(shù),相比于?strcpy和?strncpy只能針對(duì)于字符類型的數(shù)組(),這兩個(gè)函數(shù)可以拷貝其他類型的數(shù)組,對(duì)于?memcpy和?memmove的區(qū)別是什么呢?這里,...

關(guān)鍵字: 庫(kù)函數(shù) ov

在嵌入式Linux的C語(yǔ)言開(kāi)發(fā)中,C語(yǔ)言的基本編程依然是最重要的內(nèi)容。

關(guān)鍵字: 嵌入式 C語(yǔ)言 庫(kù)函數(shù)

工業(yè)現(xiàn)場(chǎng)CAN環(huán)境復(fù)雜多變,工程師面對(duì)信號(hào)的雜、亂、差卻是束手無(wú)策,追根溯源對(duì)于信號(hào)的各種地你接對(duì)了嗎?CAN總線以其高可靠性、實(shí)時(shí)性、靈活性以及嚴(yán)謹(jǐn)?shù)臄?shù)據(jù)處理機(jī)制等特點(diǎn),在工業(yè)現(xiàn)場(chǎng)和汽車行業(yè)得到廣泛應(yīng)用,但隨著環(huán)境干擾...

關(guān)鍵字: can 通信技術(shù)

你知道常常弄混的總線分類嗎?總線是什么?度娘的完整定義總線是計(jì)算機(jī)各種功能部件之間傳送信息的公共通信干線,它是由導(dǎo)線組成的傳輸線束,按照計(jì)算機(jī)所傳輸?shù)男畔⒎N類。

關(guān)鍵字: 系統(tǒng)總線 lin can fd技術(shù)

當(dāng)我們查看Linux kernel.C的Virtio代碼時(shí),我們會(huì)發(fā)現(xiàn)許多相關(guān)的文件。那么,verdio,我們只有Virtio\UC',Virtio\ubk。C、 美德\ubalon。C、 等等。與這些文件相關(guān)聯(lián)...

關(guān)鍵字: Linux virtio bus

奔馳推出Smart汽車專用iPhone助駕系統(tǒng) 戴姆勒集團(tuán)(戴姆勒奔馳)日前宣布,將為旗下迷你車品牌Smart fortwo推出一套整合iPhone的娛樂(lè)、導(dǎo)航一體化系統(tǒng),這將是第一款由汽車廠商開(kāi)發(fā)

關(guān)鍵字: 電動(dòng)車 can 驅(qū)動(dòng)
關(guān)閉