STM32——CAN通訊

来源:https://www.cnblogs.com/wangsiyaoa/p/18039805
-Advertisement-
Play Games

創建工程 在STM32CubeMX中配置,選擇Makefile並生成。 環境安裝 編譯工程需要用到arm-none-eabi,去官網下載對應系統版本,下載後解壓到任意位置。 添加環境變數 添加環境變數到.bashrc文件: echo 'export PATH="/toolchain/arm-none ...


STM32-CAN通訊

一、發送和接收流程

can通訊傳輸的是一種差分信號,關於具體的硬體電路略。

1、發送流程
  • 前置工作:如 時鐘的開啟、引腳的配置;CAN郵箱和模式等配置參考下麵或HAL庫選擇

  • 選擇一個空置的郵箱(判斷空置:CAN_TSR的TMEx位);

  • 在這個空置郵箱中按數據幀格式設置ID、數據長度以及要發送的數據;

  • 請求發送(CAN_TIxR 的 TXRQ = 1 );

  • 後面的是硬體來實現的(這個過程可以被軟體打斷):

    • 郵箱掛號(等優先);
    • 預定(等匯流排);
    • 發送;
    • 空置。
2、接收流程
  • 前置工作略
  • 配置過濾器:給過濾器綁定一個FIFO,之後以FIFO0為例;
  • 硬體自動處理:收到報文後掛號到FIFO0(綁定的)的空閑郵箱深度;如果郵箱深度,再收到報文會溢出;
    • 這個掛號和溢出都可以觸發中斷
  • 軟體接收:有個郵箱深度里掛過一次號即存一個報文,所以,可以通過掛號的數量來獲取到存進來的報文數量。具體參考寄存器的位。

二、數據幀格式

  • 標準幀

    • 仲裁段:
      • SOF : 幀起始,1bit
      • ID : 11bit
      • RTR : 1bit ------------------- 0數據幀;1遠程幀
    • 控制段
      • IDE : 1bit -------------------- 0標準格式;1擴展格式
      • R0 : 1bit ---------------------- 保留位
      • DLC : 4bit ---------------------- 數據位元組個數 , 雖然有4bit容量,但只能放0-8,也就是最大發送8byte數據
    • 數據段 0-64bit,最大64bit,即8byte數據
    • CRC段
      • CRC : 15bit 校驗
      • 界定符 : 1bit 校驗結束
    • ACK段
      • ACK : 1bit 確認
      • 界定符 : 1bit 確認結束
    • 幀結束 7bit
  • 擴展幀

    略。比標準幀多了 1bit SRR, 18bit ID, 1bit R1保留位。

三、bit時段

​ 為了實現發收雙方數據的同步,將傳送每個bit的時間分為n個小的時間單位,這個時間單位就是tq, 可配置每個tq的具體時長。

​ CAN通訊是一種非同步傳輸通訊,通過位時段來確認雙方的通訊無誤。

  • sync (ss) : 同步段。1tq
  • prop-set (pts) : 傳播時間段。一般 1-8tq,補傳輸時的延時的誤差
  • phase1 (pbs1) : 相位緩衝段1。一般 1-8tq,補邊沿誤差
  • phase2 (pbs2) : 相位緩衝段2。一般2-8tq,補邊沿誤差

​ 硬同步:接收到起始幀SOF時,調整同步段SS,使得與發送方SOF的SS段一致。

​ 再同步:接收過起始幀以後,發現與發送方不同步,則通過拉或縮相位段進行位同步。

​ 採樣點:每個bit的採樣位置,採樣時發現位不同步則進行調整。

​ 在stm32f103中,prop-seg和phase1合作為了一段。

​ CAN通訊並【不是】通過波特率(每秒傳輸速率,比如uart中,確定起始位後,可以通過波特率完成)來確保通訊的,但它可以計算出波特率。

​ 1bit花費n個tq

​ tq = ( CAN_BTR的BRP位 + 1 ) * Tcan頻率

​ 1bit中所有時段花費的tq = 1bit花費的時間

​ 波特率 = 1s / 1bit花費的時間

四、工作模式和測試模式

1、工作模式

​ 睡眠、正常、初始化。 通過寄存器控制。

2、測試模式

​ 靜默模式(LBKM=0, SILM=1):可以自通訊,對外部只收不發;

​ 環回模式(LBKM=1, SILM=0):可以自通訊,對外部只發不收;

​ 環回靜默模式(LBKM=1,SILM=1):可以自通訊,對外部不發不收。

五、CAN主體功能

1、CAN1和CAN2

​ 對於非互聯產品,如stm32f103系列,只有一個CAN1,有14個過濾器組;

​ 對於互聯型產品,如105、107系列,有一個CAN1和一個CAN2,連個CAN共用28個過濾器組。

2、發送郵箱

​ 3個。將要發送的報文放到某個郵箱中,硬體自動發送出去。

3、接收郵箱和FIFO

關於FIFO和接收郵箱,可以說每個FIFO里有三個郵箱,但一般說法是每個FIFO里有三個郵箱深度。

stm32f103系列中,CAN功能有2個FIFO(隊列), 每個FIFO有3個郵箱深度, 每個郵箱深度可放一個報文。

當報文通過濾波器過濾之後,就存儲到了某個FIFO的某郵箱中,這個需要FIFO和過濾器進行關聯配置。

硬體會遍歷配置好的FIFO中的郵箱深度以存儲報文。

4、接收濾波器 (關於位寬和模式)

​ 上面說到,stm32103系列CAN功能有14個過濾器組;

​ 每個過濾器組由2個32位寄存器組成。

  • 位寬:

    可通過CAN_FS1R寄存器的FSCx(0-13)位將這2個32位運用為:

    • 0 ———— 4個單位,每個單位16bit
    • 1 ———— 2個單位,每個單位32bit
  • 過濾器模式:

    可通過CAN_FM1R寄存器的FBMx位控制

    • 1 ———— 標識符模式: 4或2個單位全填ID, 只有填進去的ID才可通過過濾器放到FIFO的郵箱深度中
    • 0 ———— 屏蔽位模式: 4或2個單位 的 其中一半是1/0位,另一半(每個32bit的低16bit)是規則(0驗證 1不驗證)

六、CAN錯誤狀態

  • 錯誤主動——————出錯次數較少, [0, 127]

  • 錯誤被動——————出錯次數中等, [128, 255]

  • 離線 ——————出錯次數較多, [256, ∞)

    從離線模式進入正常模式(錯誤主動)可以由軟體或硬體控制,MCR的ABOM位可配置這個。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 與TXT文本文件,PDF文件更加專業也更適合傳輸,常用於正式報告、簡歷、合同等場合。項目中如果有使用Java將TXT文本文件轉為PDF文件的需求,可以查看本文中介紹的免費實現方法。 免費Java PDF庫 本文介紹的方法需要用到Free Spire.PDF for Java,該免費庫支持多種操作、轉 ...
  • 雲採用框架(Cloud Adoption Framework,簡稱CAF)為企業上雲提供策略和技術的指導原則和最佳實踐,幫助企業上好雲、用好雲、管好雲,併成功實現業務目標。本雲採用框架是基於服務大量企業客戶的經驗總結,將企業雲採用分為四個階段,並詳細探討企業應在每個階段採取的業務和技術策略;同時,還 ...
  • Excelize 是 Go 語言編寫的用於操作電子錶格辦公文檔的開源基礎庫,2024年2月26日,社區正式發佈了 2.8.1 版本,該版本包含了多項新增功能、錯誤修複和相容性提升優化。 ...
  • 在上一篇文章中,我們介紹了ReentrantLock類的一些基本用法,今天我們重點來介紹一下ReentrantLock其它的常用方法,以便對ReentrantLock類的使用有更深入的理解。 ...
  • 我一直都以為c中除以2的n次方可以使用右移n位代替,然而在實際調試中發現並不都是這樣的。是在計算餘數是發現了異常 被除數:114325068 右移15計算結果:3488 除法取整計算結果:3489 右移操作計算餘數:33772 除法取整計算餘數:1005 顯然:這是不一樣的。 移位操作是一條cpu指 ...
  • 一:背景 1. 講故事 很多.NET開發者在學習高級調試的時候,使用sos的命令輸出會發現這裡也看不懂那裡也看不懂,比如截圖中的這位朋友。 .NET高級調試屬於一個偏冷門的領域,國內可觀測的資料比較少,所以很多東西需要你自己去探究源代碼,然後用各種調試工具去驗證,相關源代碼如下: coreclr: ...
  • 在本篇教程中,我們學習瞭如何使用 Taurus.MVC WebMVC 框架創建一個簡單的頁面。 我們創建了一個控制器並編寫了一個用於呈現頁面的方法,然後創建了對應的視圖,並最終成功運行了應用程式。 在下一篇教程中,我們將繼續探索 Taurus.MVC WebMVC 框架的更多功能和用法。 ...
  • 卡爾曼濾波器(Kalman filter)是一種高效的遞歸濾波器, 能夠從一系列包含噪音的測量值中估計動態系統的狀態. 因為不需要存儲歷史狀態, 沒有複雜計算, 非常適合在資源有限的嵌入式系統中使用. 常用於飛行器的導引, 導航及控制, 機械和金融中的時間序列分析, 軌跡最佳化等. 本文對卡爾曼濾波... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...