国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

結合STM32F4關于CAN基本的信息描述

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

掃碼添加小助手

加入工程師交流群

CAN,Controller Area Network(控制器局域網絡),在汽車電子工業控制領域的應用比較多,通常用于局域組網。

CAN總線和UARTI2C、SPI總線最大的區別主要在于取消了傳統的地址編碼方式,理論上講總線上的互聯節點數不受限制,擁有強大的握手與出錯管理及重發機制,具有很強的抗干擾能力。

1

STM32 CAN 基礎內容CAN網絡中主要由CAN控制器和CAN收發器組成,大部分STM32內部都集成了CAN控制器,如果需要使用CAN功能,還需要在外部連接一個CAN收發器才能使用。

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

▲ CAN 網絡拓撲結構圖

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

下面結合STM32F4描述一下關于CAN基本的信息:

1. CAN總線

CAN總線上的數據是基于差分信號,通常只有兩根線:CAN_L和CAN_H。從STM32芯片引出來的兩個信號腳CAN發送和CAN接收,有點類似UART的收發引腳,但內部控制邏輯完全不一樣。經過CAN收發器后形成兩根信號線CAN_L和CAN_H掛到CAN總線上。

2. CAN波特率

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

CAN 波特率由多個參數決定,下面章節會講述波特率配置。

3. CAN發送

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

4. CAN接收

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

同時,CAN控制器還支持接收過濾配置,也就是說,有些數據我不需要,CAN控制器可以自動過濾掉。

通過一張CAN框圖來認識CAN控制器:

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

關于CAN的更多信息,可以參看芯片對應的手冊和CAN相關協議資料。

2

STM32 CAN 常規配置STM32 CAN控制器需要配置的參數比較多,對于初學者而言,重點就是波特率。如果你只使用一些基本的功能,不使用的功能建議參考官方代碼默認配置即可。

1. CAN引腳時鐘配置

引腳和時鐘是使用外設基本的配置,比如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常規配置

這些基本參數,需要進一步功能的作用,默認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波特率配置

波特率是第一步需要掌握的,波特率不對,就不能正常通信。波特率 = 時鐘 ÷ 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過濾是相對更高級的功能,建議深入了解,否則建議默認配置即可。

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);

以上是通過標準外設庫配置的參數,使用STM32CubeMX就可以很輕松的一鍵配置了。

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

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

3

STM32 CAN 常見問題STM32的CAN控制器功能相對比較強大,實際開發過程中容易遇到問題,軟件硬件都有可能導致通信異常,下面整理幾點常見問題。

問題一:CAN總線接線問題

CAN控制器出來的信號為CAN_TX和CAN_RX,有點類似UART,但它和外面的收發器接法是TX對應TX,不是UART交叉連接。

同時,CAN總線和485類似是差分信號,具有極性。通常CAN總線只有兩根線CAN_L和CAN_H。

上面指出來的兩點,任意一處接線錯誤都會導致通信失敗。所以,建議參考官方給出的電路原理圖。

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

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

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

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

位時序也是比較重要的一個配置,包含同步段、位段等,需要根據實際情況調整對應的值。

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

問題三:CAN接收數據丟包問題

通常來說,CAN組網之后,總線上的數據量比較大,如果你配置或者處理不正確,就會導致丟失數據的情況。

1. CAN接收數據,通常使用中斷

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

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

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

2. 雙CAN過濾器管理問題

部分STM32芯片具有雙CAN模塊,從整體功能上講,兩個CAN是獨立的。但是,兩個CAN共用過濾器管理模塊,對于STM32芯片來講,該過濾器控制模塊由CAN1統一管理,所以即使只是單獨使用CAN2進行收發,也須開啟CAN1,否則會因為過濾器未能開啟,導致單獨使用CAN2時無法收發的情形。

3.CAN接收過濾

CAN總線接收可以通過配置,對一些“無用”或不需要的信息進行過濾,換言之即對總線上的信息選擇性地進行接收。這個功能也算是CAN總線的高級功能,只有深入理解該功能之后方能靈活使用之。否則會因為過濾配置不當導致收發異常。

復盤一下▼CAN 基礎內容:CAN總線、波特率、發送和接收;▼CAN 常規配置:引腳時鐘、常規配置、波特率配置、過濾配置;▼CAN 常見問題:接線問題、波特率配置問題、接收數據丟包問題;

原文標題:STM32學習筆記 | CAN總線收發數據常見問題分析

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • CAN
    CAN
    +關注

    關注

    59

    文章

    3067

    瀏覽量

    472760
  • STM32
    +關注

    關注

    2309

    文章

    11162

    瀏覽量

    373477

原文標題:STM32學習筆記 | CAN總線收發數據常見問題分析

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【教程】使用STM32F4進行E22-400T22S編程通信教程

    通過本文帶大家零基礎使用STM32F407VET6單片機進行E22-400T22S模塊編程并進行簡單的通信,當然如果學會了,也可以舉一反三應用于E22、E220、E32所有模塊上。一、STM32環境
    的頭像 發表于 08-28 19:32 ?2171次閱讀
    【教程】使用<b class='flag-5'>STM32F4</b>進行E22-400T22S編程通信教程

    stm32f4新手求教

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

    零知開源——STM32F4結合BMP581氣壓傳感器實現ST7789中文顯示教程

    零知開源平臺是一個專為國開發者設計的軟硬件開源平臺,提供比Arduino更易上手的開發體驗。本教程展示了如何在STM32F407VET6增強板上實現ST7789顯示屏的中文顯示功能,結合BMP581
    的頭像 發表于 07-09 09:21 ?1830次閱讀
    零知開源——<b class='flag-5'>STM32F4</b><b class='flag-5'>結合</b>BMP581氣壓傳感器實現ST7789中文顯示教程

    【教程】零基礎!手把手教你使用STM32F4進行E22-400T22S編程通信

    通過本文帶大家零基礎使用STM32F407VET6單片機進行E22-400T22S模塊編程并進行簡單的通信,當然如果學會了,也可以舉一反三應用于E22、E220、E32所有模塊上。一STM32環境
    的頭像 發表于 07-03 19:32 ?1498次閱讀
    【教程】零基礎!手把手教你使用<b class='flag-5'>STM32F4</b>進行E22-400T22S編程通信

    6軸步進電機驅動+STM32F767+485+CAN+網口+12輸入輸出原理圖

    6軸步進電機驅動+STM32F767+485+CAN+網口+12路輸入輸出 原理圖?步進電機驅動方案TMC5160
    發表于 06-27 16:18 ?0次下載

    使用studio構建STM32F4工程報錯的原因?

    使用studio 構建STM32F4 工程,什么都沒有動報了以上錯誤.這是為什么 ?
    發表于 06-26 07:26

    零知開源——STM32F4實現ILI9486顯示屏UI界面系列教程(二):日歷功能實現

    本教程詳細介紹了基于STM32F4和ILI9486觸摸屏的日歷應用開發,涵蓋硬件連接、軟件實現與零知IDE配置。核心功能包括月份視圖展示、滑動切換和日期標記,通過LVGL庫實現UI組件及觸摸事件處理
    的頭像 發表于 06-25 17:34 ?754次閱讀
    零知開源——<b class='flag-5'>STM32F4</b>實現ILI9486顯示屏UI界面系列教程(二):日歷功能實現

    STM32F4標準外設庫資料

    stm32f4xx.h,標準外設庫
    發表于 06-08 09:49 ?5次下載

    STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊

    電子發燒友網站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊.pdf》資料
    發表于 06-06 17:06 ?17次下載

    零知開源——STM32F4驅動MAX31865實現PT100高精度測溫

    STM32F
    PCB56242069
    發布于 :2025年05月26日 18:25:17

    STM32F103×8/STM32F103×B MCU手冊

    本文提供了STM32F103x8和STM32F103xB中密度高性能系列微控制器的訂購信息和機械器件特性。有關整個STMicroelectronics STM32F103xx系列的更
    發表于 03-18 16:37 ?0次下載

    使用SPI進行通信,STM32F4做從機,通信時數據異常怎么解決?

    使用SPI進行通信,STM32F4做從機,通信時數據異常,SPI2中SR寄存器會出現0xc0,0xc1,0x80的異常狀態值,大概就是BYS位,OVR位,RXEN位
    發表于 03-14 12:14

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

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

    關于STM32 CAN通信發送函數HAL_CAN_AddTxMessage()的最后一個參數填0和定義一個變量取地址的問題求解

    問題: 關于STM32 CAN通信 發送函數 HAL_CAN_AddTxMessage()的最后一個參數填0和定義一個變量取地址的問題,如果直接傳0,我實驗發現
    發表于 03-11 08:22

    使用STM32F4的ADC的時候,發現測量結果不準確,是什么原因導致的?

    請教各位大佬一個問題,我在使用STM32F4的ADC的時候,發現測量結果不準確。上網查看教程,發現F1系列有自動校準的函數,但是F4沒有校準相關的設置,想請教一下是F4的HAL庫把校準
    發表于 03-11 06:29