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

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

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

在STM32H743芯片上實(shí)現(xiàn)CAN通信的步驟

廣成工控 ? 來(lái)源:CSDN博客 ? 作者:CSDN博客 ? 2020-09-14 14:33 ? 次閱讀

1. 摘要

本篇筆記主要介紹,在STM32H743芯片上實(shí)現(xiàn)CAN通信,封裝為BSP驅(qū)動(dòng),為之后實(shí)現(xiàn)CAN的高層通信打下基礎(chǔ)。

2. 準(zhǔn)備工作

1, IAR 8.32.1

2, STM32Cube_FW_H7_V1.6.0

3. 簡(jiǎn)介

STM32H743的控制器局域網(wǎng)絡(luò) (CAN) 子系統(tǒng)由兩個(gè) CAN 模塊、一個(gè)共享消息 RAM 存儲(chǔ)器和一個(gè)時(shí)鐘校準(zhǔn)單元組成。關(guān)于這四個(gè)組成部分的基址,請(qǐng)參見(jiàn)存儲(chǔ)器映射。兩個(gè) CAN 模塊(FDCAN1 和 FDCAN2)均符合 ISO 11898-1: 2015(CAN 協(xié)議規(guī)范第 2.0 版A、 B 部分)和 CAN FD 協(xié)議規(guī)范第 1.0 版。此外,第一個(gè) CAN 模塊 FDCAN1 支持 ISO 11898-4 中規(guī)定的時(shí)間觸發(fā) CAN (TTCAN),包括事件同步時(shí)間觸發(fā)通信、全局系統(tǒng)時(shí)間和時(shí)鐘漂移補(bǔ)償。FDCAN1 還額外包含專供時(shí)間觸發(fā)功能使用的寄存器。CAN FD 選項(xiàng)可與事件觸發(fā)和時(shí)間觸發(fā) CAN 通信一起使用。10 KB 的消息 RAM 存儲(chǔ)器可實(shí)現(xiàn)過(guò)濾器、接收 FIFO、接收緩沖區(qū)、發(fā)送事件 FIFO、發(fā)送緩沖器( TTCAN 觸發(fā))功能。該消息 RAM 在 FDCAN1 和 FDCAN2 模塊之間共用。通用時(shí)鐘校準(zhǔn)單元是可選的。通過(guò)評(píng)估 FDCAN1 接收到的 CAN 消息,該單元可基于 HSI 內(nèi)部 RC 振蕩器和 PLL 為 FDCAN1 和 FDCAN2 生成經(jīng)過(guò)校準(zhǔn)的時(shí)鐘。

CAN 框圖

CAN的底層大部分ST已經(jīng)在HAL庫(kù)里面封裝好,如果你細(xì)看HAL源碼,搞懂這張圖,H743的CAN 你基本上就沒(méi)有問(wèn)題了,在結(jié)合HAL庫(kù)的學(xué)習(xí)。

4. 驅(qū)動(dòng)實(shí)現(xiàn)

良好的驅(qū)動(dòng)封裝,可以方便應(yīng)用開(kāi)發(fā),并且可以容易移植到其他項(xiàng)目,代碼重用率高,所以數(shù)據(jù)和接口是你不得不考慮的問(wèn)題,怎么樣方便的實(shí)現(xiàn),還要通用易用。

4.1 數(shù)據(jù)封裝

首先根據(jù)stm32h7xx_hal_fdcan.h文件我們來(lái)封裝兩個(gè)個(gè)結(jié)構(gòu)體,方便后面軟件實(shí)現(xiàn)開(kāi)發(fā),可以新建bsp_can.c和bsp_can.h, 在頭文件中封裝結(jié)構(gòu)體定義。

在.c文件中定義封裝一些變量,這些變量數(shù)組也是通用,在多款產(chǎn)品中都采用,大家也可以參照。

可以實(shí)現(xiàn)多個(gè)CAN口驅(qū)動(dòng)。如果只有一個(gè)CAN口,將CAN_PORTS宏定義為1,幾個(gè)就定義為幾。

這個(gè)封裝大家可以記著,我在多款器件上都是這么封裝的,之前在NXP的KE06, KEA, KV46, K64等系列,在ST的F103, F446, H743等等CAN通信都采用這種封裝BSP驅(qū)動(dòng)。

4.2 初始化

參考官方的例程,根據(jù)自己的硬件去實(shí)現(xiàn),做相應(yīng)修改。例程中只使能了接收中斷,我們一般發(fā)送也要采用中斷,所以也要開(kāi)發(fā)送中斷,根據(jù)實(shí)際可能還需要添加濾波,配置緩沖等。

配置時(shí)鐘管腳,中斷。

4.3 中斷回調(diào)函數(shù)

最主要的就是接收和發(fā)送的回調(diào)函數(shù)的實(shí)現(xiàn),首先來(lái)看接收中斷回調(diào)函數(shù)。

發(fā)送完成回調(diào)函數(shù)

4.4 測(cè)試代碼

freeRTOS下建立一個(gè)CAN通信的簡(jiǎn)單測(cè)試任務(wù),實(shí)現(xiàn)收到什么在發(fā)送出去。

在10ms的任務(wù)里去調(diào)用這個(gè)測(cè)試函數(shù),實(shí)現(xiàn)收發(fā)測(cè)試。

測(cè)試的可以這樣寫(xiě),正式的我們需要解析收到的內(nèi)容,并且重新組織發(fā)送的幀,這些解析和重組我們將會(huì)在高層的協(xié)議驅(qū)動(dòng)文件中實(shí)現(xiàn),有了這個(gè)驅(qū)動(dòng)就可以實(shí)現(xiàn)CANopen, J1939, DeviceNet等CAN的高層協(xié)議了。

5. 測(cè)試

測(cè)試,擴(kuò)展幀,500k 位速率,發(fā)送數(shù)據(jù) aa,01,02,03,04,05,06,bb。板卡收到電腦發(fā)送的數(shù)據(jù)后,回送給電腦。發(fā)送100000次, 10ms一次。使用USB-CAN連接到電腦端測(cè)試。

至此我們的CAN通信BSP驅(qū)動(dòng)封裝就驗(yàn)證完成,可以輕松移植到其他板卡上。關(guān)注我,為您帶來(lái)更多精彩內(nèi)容

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

    關(guān)注

    5

    文章

    93

    瀏覽量

    17800

原文標(biāo)題:CAN通信之BSP封裝

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32H743以太網(wǎng)與高速USB同時(shí)工作遇到的疑問(wèn)求解

    STM32H743以太網(wǎng)與高速USB同時(shí)工作不可靠 各位大俠,我一個(gè)項(xiàng)目中使用STM32H743的100M以太網(wǎng)和高速USB,高速USB是外置的PHY USB3300。使用的CubeMX生成
    發(fā)表于 04-09 07:53

    STM32H743怎么FreeRTOS中移植canopen?

    STM32H743怎么FreeRTOS中移植canopen?
    發(fā)表于 07-03 06:32

    STM32H743芯片實(shí)現(xiàn)CAN通信

    1. 摘要本篇筆記主要介紹,STM32H743芯片實(shí)現(xiàn)CAN
    發(fā)表于 08-20 07:41

    STM32H743 Flash用來(lái)存什么

    STM32H743 Flash用來(lái)存什么?STM32H743 Flash的硬件特性和基本操作是什么?
    發(fā)表于 09-24 09:41

    NUCLEO STM32H743怎么使用?

    NUCLEO STM32H743怎么使用?
    發(fā)表于 11-08 06:25

    如何對(duì)STM32H743的兩路can進(jìn)行配置呢

    如何對(duì)STM32H743的兩路can進(jìn)行配置呢?有哪些需要注意的事項(xiàng)呢?
    發(fā)表于 11-18 07:30

    stm32h743板子有哪些功能呢

    stm32目前使用非常廣泛,但是目前很多人都還停留在stmf1/f4僅僅只有72/128m主頻階段,stm32h743采用arm m7架構(gòu),高達(dá)400m主頻的處理器,為我們的控制提供強(qiáng)有力的支持
    發(fā)表于 02-11 07:16

    請(qǐng)問(wèn)如何用STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)?

    請(qǐng)問(wèn)如何用STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)?
    發(fā)表于 02-22 06:35

    如何調(diào)試STM32H743的兩串口?

    如何調(diào)試STM32H743的兩串口?
    發(fā)表于 02-28 08:51

    RT-Thread文件系統(tǒng)組件STM32H743的應(yīng)用

    RT-Thread(后文簡(jiǎn)稱RT)提供的DFS組件、Fatfs組件和SDIO驅(qū)動(dòng)組合起來(lái)可用于操作SD卡,但RT的底層驅(qū)動(dòng)目前對(duì)STM32H743(后文簡(jiǎn)稱H743)適配不是很好,stm32
    發(fā)表于 12-05 18:36 ?4次下載
    RT-Thread文件系統(tǒng)組件<b class='flag-5'>在</b><b class='flag-5'>STM32H743</b><b class='flag-5'>上</b>的應(yīng)用

    stm32h750/stm32h743原理圖和pcb源文件

    stm32目前使用非常廣泛,但是目前很多人都還停留在stmf1/f4僅僅只有72/128m主頻階段,stm32h743采用arm m7架構(gòu),高達(dá)400m主頻的處理器,為我們的控制提供強(qiáng)有力的支持
    發(fā)表于 12-08 09:21 ?152次下載
    <b class='flag-5'>stm32h</b>750/<b class='flag-5'>stm32h743</b>原理圖和pcb源文件

    stm32h743外部RAM非字節(jié)對(duì)齊訪問(wèn),引起的hard fault

    stm32h743外部RAM非字節(jié)對(duì)齊訪問(wèn),引起的hard fault
    發(fā)表于 12-09 09:21 ?5次下載
    <b class='flag-5'>stm32h743</b>外部RAM非字節(jié)對(duì)齊訪問(wèn),引起的hard fault

    STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)

    STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)基于STM32cube實(shí)現(xiàn)STM32H743
    發(fā)表于 12-28 19:53 ?38次下載
    用<b class='flag-5'>STM32</b>cube<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>STM32H743</b>的USB驅(qū)動(dòng)

    stm32h743軟件模擬i2c驅(qū)動(dòng)

    stm32h743 實(shí)現(xiàn)gpio模擬i2c資料分享
    發(fā)表于 12-01 11:12 ?7次下載

    STM32H743的FDCAN發(fā)送線程卡死的處理方法

    芯片型號(hào)STM32H743IIT6,測(cè)試時(shí)發(fā)現(xiàn)如果外面沒(méi)有連接CAN設(shè)備,程序調(diào)用CAN發(fā)送時(shí)會(huì)一直等待發(fā)送反饋,導(dǎo)致相關(guān)線程掛起。
    的頭像 發(fā)表于 10-12 11:37 ?3958次閱讀