一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

結(jié)合STM32F4關(guān)于CAN基本的信息描述

strongerHuang ? 來源:STM32 ? 作者:STM32 ? 2021-04-02 11:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

CAN,Controller Area Network(控制器局域網(wǎng)絡(luò)),在汽車電子、工業(yè)控制領(lǐng)域的應(yīng)用比較多,通常用于局域組網(wǎng)。

CAN總線和UARTI2C、SPI總線最大的區(qū)別主要在于取消了傳統(tǒng)的地址編碼方式,理論上講總線上的互聯(lián)節(jié)點(diǎn)數(shù)不受限制,擁有強(qiáng)大的握手與出錯(cuò)管理及重發(fā)機(jī)制,具有很強(qiáng)的抗干擾能力。

1

STM32 CAN 基礎(chǔ)內(nèi)容CAN網(wǎng)絡(luò)中主要由CAN控制器和CAN收發(fā)器組成,大部分STM32內(nèi)部都集成了CAN控制器,如果需要使用CAN功能,還需要在外部連接一個(gè)CAN收發(fā)器才能使用。

6be1ba8a-92ed-11eb-8b86-12bb97331649.png

▲ CAN 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖

STM32內(nèi)部集成的CAN控制器,支持 2.0A 和 B 版本的 CAN 協(xié)議。還有通信速度更快的CAN FD、 CAN XL,目前一部分STM32支持CAN FD(比如STM32H7)。

下面結(jié)合STM32F4描述一下關(guān)于CAN基本的信息:

1. CAN總線

CAN總線上的數(shù)據(jù)是基于差分信號(hào),通常只有兩根線:CAN_L和CAN_H。從STM32芯片引出來的兩個(gè)信號(hào)腳CAN發(fā)送和CAN接收,有點(diǎn)類似UART的收發(fā)引腳,但內(nèi)部控制邏輯完全不一樣。經(jīng)過CAN收發(fā)器后形成兩根信號(hào)線CAN_L和CAN_H掛到CAN總線上。

2. CAN波特率

CAN 總線屬于異步通信,和UART類似,因此具有通信的波特率,標(biāo)準(zhǔn) CAN 波特率通常支持高達(dá) 1 Mb/s。當(dāng)然,也可以配置成500Kb/s、 250Kb/s等。

CAN 波特率由多個(gè)參數(shù)決定,下面章節(jié)會(huì)講述波特率配置。

3. CAN發(fā)送

STM32集成的CAN控制器支持三個(gè)發(fā)送郵箱,也就是說可以支持隊(duì)列發(fā)送消息(數(shù)據(jù)),如果同一時(shí)間發(fā)送數(shù)據(jù)比較多,使用郵箱就比較高效,不用消耗CPU資源,CAN控制器自動(dòng)發(fā)送,直到完成。

4. CAN接收

和發(fā)送類似,CAN接收支持接收FIFO,可以連續(xù)接收多個(gè)消息(數(shù)據(jù)),CPU空閑了再去處理接收到的數(shù)據(jù)。

同時(shí),CAN控制器還支持接收過濾配置,也就是說,有些數(shù)據(jù)我不需要,CAN控制器可以自動(dòng)過濾掉。

通過一張CAN框圖來認(rèn)識(shí)CAN控制器:

6c0cc37e-92ed-11eb-8b86-12bb97331649.png

關(guān)于CAN的更多信息,可以參看芯片對(duì)應(yīng)的手冊(cè)和CAN相關(guān)協(xié)議資料。

2

STM32 CAN 常規(guī)配置STM32 CAN控制器需要配置的參數(shù)比較多,對(duì)于初學(xué)者而言,重點(diǎn)就是波特率。如果你只使用一些基本的功能,不使用的功能建議參考官方代碼默認(rèn)配置即可。

1. CAN引腳時(shí)鐘配置

引腳和時(shí)鐘是使用外設(shè)基本的配置,比如F4例程:

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(CAN_GPIO_CLK, ENABLE);RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE);

GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_RX_SOURCE, CAN_AF_PORT);GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_TX_SOURCE, CAN_AF_PORT);

GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN | CAN_TX_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(CAN_GPIO_PORT, &GPIO_InitStructure);

2. CAN常規(guī)配置

這些基本參數(shù),需要進(jìn)一步功能的作用,默認(rèn)DISABLE。

CAN_InitTypeDef CAN_InitStructure;

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;

3. CAN波特率配置

波特率是第一步需要掌握的,波特率不對(duì),就不能正常通信。波特率 = 時(shí)鐘 ÷ Prescaler ÷ (SJW + BS1 + BS2);

比如:42M / 2 / (1 + 12 +8) = 1M

CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;CAN_InitStructure.CAN_Prescaler = 2;

4. CAN過濾配置CAN過濾是相對(duì)更高級(jí)的功能,建議深入了解,否則建議默認(rèn)配置即可。

CAN_FilterInitTypeDef CAN_FilterInitStructure;CAN_FilterInitStructure.CAN_FilterNumber = 0;CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;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);

以上是通過標(biāo)準(zhǔn)外設(shè)庫配置的參數(shù),使用STM32CubeMX就可以很輕松的一鍵配置了。

6c25ad58-92ed-11eb-8b86-12bb97331649.png

對(duì)CAN有一定基礎(chǔ)了解,同時(shí)掌握HAL庫使用方法的人,建議直接使用STM32CubemMX 配置并生成初始化代碼。

3

STM32 CAN 常見問題STM32的CAN控制器功能相對(duì)比較強(qiáng)大,實(shí)際開發(fā)過程中容易遇到問題,軟件硬件都有可能導(dǎo)致通信異常,下面整理幾點(diǎn)常見問題。

問題一:CAN總線接線問題

CAN控制器出來的信號(hào)為CAN_TX和CAN_RX,有點(diǎn)類似UART,但它和外面的收發(fā)器接法是TX對(duì)應(yīng)TX,不是UART交叉連接。

同時(shí),CAN總線和485類似是差分信號(hào),具有極性。通常CAN總線只有兩根線CAN_L和CAN_H。

上面指出來的兩點(diǎn),任意一處接線錯(cuò)誤都會(huì)導(dǎo)致通信失敗。所以,建議參考官方給出的電路原理圖。

問題二:通信波特率配置問題

CAN屬于異步通信,如果波特率不對(duì),就會(huì)通信失敗,或者接收到亂碼。影響波特率的因素有很多:CAN時(shí)鐘、分頻值、位時(shí)序。

CAN時(shí)鐘也就是RCC出來進(jìn)入CAN控制器的APB時(shí)鐘,比如上面代碼中配置的是APB1,42M時(shí)鐘。(一定要分清,不能認(rèn)為是84M)。

6c4437dc-92ed-11eb-8b86-12bb97331649.png

位時(shí)序也是比較重要的一個(gè)配置,包含同步段、位段等,需要根據(jù)實(shí)際情況調(diào)整對(duì)應(yīng)的值。

6c61bca8-92ed-11eb-8b86-12bb97331649.png

問題三:CAN接收數(shù)據(jù)丟包問題

通常來說,CAN組網(wǎng)之后,總線上的數(shù)據(jù)量比較大,如果你配置或者處理不正確,就會(huì)導(dǎo)致丟失數(shù)據(jù)的情況。

1. CAN接收數(shù)據(jù),通常使用中斷

CAN中斷入口和CAN中斷函數(shù)處理比較容易引起數(shù)據(jù)丟失的問題。

有些CAN中斷入口和其它外設(shè)的共用,比如STM32F103的CAN和USB共用一個(gè)中斷入口。

通信時(shí),由于CAN中斷頻率較高,中斷函數(shù)不能占用太多時(shí)間,通常來說,只對(duì)接收到的數(shù)據(jù)進(jìn)行一些簡(jiǎn)單搬運(yùn)處理,不建議在中斷程序里處理較為復(fù)雜的邏輯或算法運(yùn)算。

2. 雙CAN過濾器管理問題

部分STM32芯片具有雙CAN模塊,從整體功能上講,兩個(gè)CAN是獨(dú)立的。但是,兩個(gè)CAN共用過濾器管理模塊,對(duì)于STM32芯片來講,該過濾器控制模塊由CAN1統(tǒng)一管理,所以即使只是單獨(dú)使用CAN2進(jìn)行收發(fā),也須開啟CAN1,否則會(huì)因?yàn)檫^濾器未能開啟,導(dǎo)致單獨(dú)使用CAN2時(shí)無法收發(fā)的情形。

3.CAN接收過濾

CAN總線接收可以通過配置,對(duì)一些“無用”或不需要的信息進(jìn)行過濾,換言之即對(duì)總線上的信息選擇性地進(jìn)行接收。這個(gè)功能也算是CAN總線的高級(jí)功能,只有深入理解該功能之后方能靈活使用之。否則會(huì)因?yàn)檫^濾配置不當(dāng)導(dǎo)致收發(fā)異常。

復(fù)盤一下▼CAN 基礎(chǔ)內(nèi)容:CAN總線、波特率、發(fā)送和接收;▼CAN 常規(guī)配置:引腳時(shí)鐘、常規(guī)配置、波特率配置、過濾配置;▼CAN 常見問題:接線問題、波特率配置問題、接收數(shù)據(jù)丟包問題;

原文標(biāo)題:STM32學(xué)習(xí)筆記 | CAN總線收發(fā)數(shù)據(jù)常見問題分析

文章出處:【微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2919

    瀏覽量

    467732
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11031

    瀏覽量

    364729

原文標(biāo)題:STM32學(xué)習(xí)筆記 | CAN總線收發(fā)數(shù)據(jù)常見問題分析

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    stm32f4新手求教

    芯片包stm32f4xx_DFP3.0.0只有1.98m大小,芯片包stm32f4xx_DFP2.16.0卻有152m大小,為何差距這么大,我該裝哪個(gè)芯片包?
    發(fā)表于 07-09 12:04

    使用studio構(gòu)建STM32F4工程報(bào)錯(cuò)的原因?

    使用studio 構(gòu)建STM32F4 工程,什么都沒有動(dòng)報(bào)了以上錯(cuò)誤.這是為什么 ?
    發(fā)表于 06-26 07:26

    STM32F4標(biāo)準(zhǔn)外設(shè)庫資料

    stm32f4xx.h,標(biāo)準(zhǔn)外設(shè)庫
    發(fā)表于 06-08 09:49 ?0次下載

    STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊(cè).pdf》資料
    發(fā)表于 06-06 17:06 ?5次下載

    零知開源——STM32F4驅(qū)動(dòng)MAX31865實(shí)現(xiàn)PT100高精度測(cè)溫

    STM32F
    PCB56242069
    發(fā)布于 :2025年05月26日 18:25:17

    使用SPI進(jìn)行通信,STM32F4做從機(jī),通信時(shí)數(shù)據(jù)異常怎么解決?

    使用SPI進(jìn)行通信,STM32F4做從機(jī),通信時(shí)數(shù)據(jù)異常,SPI2中SR寄存器會(huì)出現(xiàn)0xc0,0xc1,0x80的異常狀態(tài)值,大概就是BYS位,OVR位,RXEN位
    發(fā)表于 03-14 12:14

    Arduino中可以使用STM32F1或者STM32F4系列芯片的內(nèi)置看門狗嗎?

    Arduino中可以使用STM32F1或者STM32F4系列芯片的內(nèi)置看門狗嗎
    發(fā)表于 03-13 07:32

    使用STM32F4的ADC的時(shí)候,發(fā)現(xiàn)測(cè)量結(jié)果不準(zhǔn)確,是什么原因?qū)е碌模?/a>

    請(qǐng)教各位大佬一個(gè)問題,我在使用STM32F4的ADC的時(shí)候,發(fā)現(xiàn)測(cè)量結(jié)果不準(zhǔn)確。上網(wǎng)查看教程,發(fā)現(xiàn)F1系列有自動(dòng)校準(zhǔn)的函數(shù),但是F4沒有校準(zhǔn)相關(guān)的設(shè)置,想請(qǐng)教一下是F4的HAL庫把校準(zhǔn)
    發(fā)表于 03-11 06:29

    stm32f4 sdio時(shí)鐘如何獲取通過什么函數(shù)?

    stm32f4系列sdio 時(shí)鐘如何獲取,stm32h7可以通過sdmmc_clk=HAL_RCCEx_GetPeriphCLKFreq(STM32_RCC_PERIPHCLK_SDMMC);這個(gè)函數(shù)獲取
    發(fā)表于 03-07 08:26

    STM32項(xiàng)目實(shí)戰(zhàn):基于STM32F4的智能大棚溫控系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

    今天小編來分享一個(gè)《智能大棚溫控系統(tǒng)》的項(xiàng)目案例,硬件平臺(tái)是STM32F4開發(fā)板+資源擴(kuò)展板+顯示觸摸屏+仿真器,項(xiàng)目的演示界面如下圖所示。智能大棚溫控系統(tǒng)項(xiàng)目,需要一個(gè)風(fēng)扇執(zhí)行器件;一個(gè)溫濕度
    的頭像 發(fā)表于 10-25 13:54 ?1500次閱讀
    <b class='flag-5'>STM32</b>項(xiàng)目實(shí)戰(zhàn):基于<b class='flag-5'>STM32F4</b>的智能大棚溫控系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

    基于STM32F4的集中潤(rùn)滑系統(tǒng)的設(shè)計(jì)

    針對(duì)傳統(tǒng)機(jī)械潤(rùn)滑設(shè)備存在的高能耗、勞動(dòng)強(qiáng)度大、結(jié)構(gòu)復(fù)雜及智能化程度低等問題,本文設(shè)計(jì)了一款基于STM32F407控制核心、esp8266無線Wi-Fi通信模塊和KQ330電力載波模塊的集中潤(rùn)滑系統(tǒng)
    的頭像 發(fā)表于 10-18 08:03 ?868次閱讀
    基于<b class='flag-5'>STM32F4</b>的集中潤(rùn)滑系統(tǒng)的設(shè)計(jì)

    STM32項(xiàng)目實(shí)戰(zhàn):基于STM32F4的智能燈光控制系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

    《智能燈光控制系統(tǒng)_STM32F4》項(xiàng)目完整文檔、項(xiàng)目源碼,私信小雯老師免費(fèi)領(lǐng)取。STM32項(xiàng)目實(shí)戰(zhàn)之“智能燈光控制系統(tǒng)”(基于STM32F4)今天小編來分享一個(gè)《智能燈光控制系統(tǒng)》的項(xiàng)目案例,硬件
    的頭像 發(fā)表于 10-17 16:16 ?1861次閱讀
    <b class='flag-5'>STM32</b>項(xiàng)目實(shí)戰(zhàn):基于<b class='flag-5'>STM32F4</b>的智能燈光控制系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

    STM32F4 HAL庫下CAN發(fā)送導(dǎo)致FLASH報(bào)錯(cuò)怎么解決?

    [td]芯片型號(hào)為:STM32F407VET6。使用CubeMX配置并生成HAL庫。 在工程中,配置了CAN1和CAN2。并且調(diào)用了函數(shù)HAL_CAN_AddTxMessage( hc
    發(fā)表于 09-09 08:27

    【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植到 GD32F4xx 系

    GD32F4xx 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F4xx系列 MCU 保持高度兼容。本文主要從以下三個(gè)方面進(jìn)行介紹:硬件資源對(duì)比
    的頭像 發(fā)表于 09-06 09:40 ?2617次閱讀
    【GD32 MCU 移植教程】8、從 <b class='flag-5'>STM32F4</b>xx 系列移植到 GD32<b class='flag-5'>F4</b>xx 系

    STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx中文手冊(cè)

    STM32F4系列單片機(jī)中文手冊(cè)
    發(fā)表于 08-08 14:32 ?2次下載