STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代碼生成

0 工具準備

1.STM32CubeMX

1 前言

本文介紹基于STM32CubeMX,使用stm32h743xi的對FDCAN2進行配置的方法。

2 初始化代碼生成

2.1 選擇FDCAN引腳

本例選擇PB5、PB6作為FDCAN2的RX、TX引腳。
在這里插入圖片描述
在這里插入圖片描述

2.2 選擇FDCAN時鐘源

本例選擇PLL2Q作為FDCAN時鐘源,頻率設置為100MHz。配置如下:
在這里插入圖片描述
在這里插入圖片描述

2.3 FDCAN參數設置

這一部分可以在代碼里修改,一般設置標準幀過濾器個數、擴展幀過濾器個數、RX FIFO個數、TX FIFO個數、RX FIFIO元素大小、TX FIFO元素大小即可,其余參數在代碼里修改。
在這里插入圖片描述
本例使用中斷接收CAN報文,使能所有FDCAN2相關中斷:
在這里插入圖片描述
可以在NVIC選項里修改FDCAN2搶占優先級和子優先級為(3,0):
在這里插入圖片描述

2.4 初始化代碼生成

配置好后,直接點擊“生成”按鈕生成我們需要的初始化代碼:
在這里插入圖片描述
生成的初始化相關代碼如下:

/*** @brief FDCAN2 Initialization Function* @param None* @retval None*/
static void MX_FDCAN2_Init(void)
{/* USER CODE BEGIN FDCAN2_Init 0 *//* USER CODE END FDCAN2_Init 0 *//* USER CODE BEGIN FDCAN2_Init 1 *//* USER CODE END FDCAN2_Init 1 */hfdcan2.Instance = FDCAN2;hfdcan2.Init.FrameFormat = FDCAN_FRAME_CLASSIC;hfdcan2.Init.Mode = FDCAN_MODE_NORMAL;hfdcan2.Init.AutoRetransmission = DISABLE;hfdcan2.Init.TransmitPause = DISABLE;hfdcan2.Init.ProtocolException = DISABLE;hfdcan2.Init.NominalPrescaler = 10;hfdcan2.Init.NominalSyncJumpWidth = 1;hfdcan2.Init.NominalTimeSeg1 = 17;hfdcan2.Init.NominalTimeSeg2 = 2;hfdcan2.Init.DataPrescaler = 1;hfdcan2.Init.DataSyncJumpWidth = 1;hfdcan2.Init.DataTimeSeg1 = 1;hfdcan2.Init.DataTimeSeg2 = 1;hfdcan2.Init.MessageRAMOffset = 0;hfdcan2.Init.StdFiltersNbr = 1;hfdcan2.Init.ExtFiltersNbr = 1;hfdcan2.Init.RxFifo0ElmtsNbr = 64;hfdcan2.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_64;hfdcan2.Init.RxFifo1ElmtsNbr = 0;hfdcan2.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_64;hfdcan2.Init.RxBuffersNbr = 0;hfdcan2.Init.RxBufferSize = FDCAN_DATA_BYTES_64;hfdcan2.Init.TxEventsNbr = 0;hfdcan2.Init.TxBuffersNbr = 0;hfdcan2.Init.TxFifoQueueElmtsNbr = 32;hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;hfdcan2.Init.TxElmtSize = FDCAN_DATA_BYTES_64;if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK){Error_Handler();}/* USER CODE BEGIN FDCAN2_Init 2 *//* USER CODE END FDCAN2_Init 2 */}/**
* @brief FDCAN MSP Initialization
* This function configures the hardware resources used in this example
* @param hfdcan: FDCAN handle pointer
* @retval None
*/
void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan)
{GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};if(hfdcan->Instance==FDCAN2){/* USER CODE BEGIN FDCAN2_MspInit 0 *//* USER CODE END FDCAN2_MspInit 0 *//** Initializes the peripherals clock*/PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FDCAN;PeriphClkInitStruct.PLL2.PLL2M = 5;PeriphClkInitStruct.PLL2.PLL2N = 80;PeriphClkInitStruct.PLL2.PLL2P = 2;PeriphClkInitStruct.PLL2.PLL2Q = 4;PeriphClkInitStruct.PLL2.PLL2R = 1;PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;PeriphClkInitStruct.PLL2.PLL2FRACN = 0;PeriphClkInitStruct.FdcanClockSelection = RCC_FDCANCLKSOURCE_PLL2;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK){Error_Handler();}/* Peripheral clock enable */__HAL_RCC_FDCAN_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/**FDCAN2 GPIO ConfigurationPB5     ------> FDCAN2_RXPB6     ------> FDCAN2_TX*/GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN2;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);/* FDCAN2 interrupt Init */HAL_NVIC_SetPriority(FDCAN2_IT0_IRQn, 3, 0);HAL_NVIC_EnableIRQ(FDCAN2_IT0_IRQn);HAL_NVIC_SetPriority(FDCAN2_IT1_IRQn, 3, 0);HAL_NVIC_EnableIRQ(FDCAN2_IT1_IRQn);HAL_NVIC_SetPriority(FDCAN_CAL_IRQn, 3, 0);HAL_NVIC_EnableIRQ(FDCAN_CAL_IRQn);/* USER CODE BEGIN FDCAN2_MspInit 1 *//* USER CODE END FDCAN2_MspInit 1 */}}/**
* @brief FDCAN MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param hfdcan: FDCAN handle pointer
* @retval None
*/
void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan)
{if(hfdcan->Instance==FDCAN2){/* USER CODE BEGIN FDCAN2_MspDeInit 0 *//* USER CODE END FDCAN2_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_FDCAN_CLK_DISABLE();/**FDCAN2 GPIO ConfigurationPB5     ------> FDCAN2_RXPB6     ------> FDCAN2_TX*/HAL_GPIO_DeInit(GPIOB, GPIO_PIN_5|GPIO_PIN_6);/* FDCAN2 interrupt DeInit */HAL_NVIC_DisableIRQ(FDCAN2_IT0_IRQn);HAL_NVIC_DisableIRQ(FDCAN2_IT1_IRQn);HAL_NVIC_DisableIRQ(FDCAN_CAL_IRQn);/* USER CODE BEGIN FDCAN2_MspDeInit 1 *//* USER CODE END FDCAN2_MspDeInit 1 */}}
/*** @brief This function handles FDCAN2 interrupt 0.*/
void FDCAN2_IT0_IRQHandler(void)
{/* USER CODE BEGIN FDCAN2_IT0_IRQn 0 *//* USER CODE END FDCAN2_IT0_IRQn 0 */HAL_FDCAN_IRQHandler(&hfdcan2);/* USER CODE BEGIN FDCAN2_IT0_IRQn 1 *//* USER CODE END FDCAN2_IT0_IRQn 1 */
}/*** @brief This function handles FDCAN2 interrupt 1.*/
void FDCAN2_IT1_IRQHandler(void)
{/* USER CODE BEGIN FDCAN2_IT1_IRQn 0 *//* USER CODE END FDCAN2_IT1_IRQn 0 */HAL_FDCAN_IRQHandler(&hfdcan2);/* USER CODE BEGIN FDCAN2_IT1_IRQn 1 *//* USER CODE END FDCAN2_IT1_IRQn 1 */
}
/*** @brief This function handles FDCAN calibration unit interrupt.*/
void FDCAN_CAL_IRQHandler(void)
{/* USER CODE BEGIN FDCAN_CAL_IRQn 0 *//* USER CODE END FDCAN_CAL_IRQn 0 */HAL_FDCAN_IRQHandler(&hfdcan2);/* USER CODE BEGIN FDCAN_CAL_IRQn 1 *//* USER CODE END FDCAN_CAL_IRQn 1 */
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15420.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15420.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15420.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Expected Boolean, got String with value “true“.

在vue el-tree節點添加屬性expand-on-click-node"false",瀏覽器控制臺提示上面的錯誤, 將false的雙引號去年依然提示,然后在expand-on-click-node"false"最前面添加冒號,即變成雙向綁定,刷新頁面…

UDP的報文結構和注意事項

UDP協議是在傳輸層的協議。 UDP無連接,不可靠傳輸,面向數據報,全雙工。 UDP的報文結構 學習網絡協議,最主要的就是報文格式。 對于UDP來說,應用層的數據到達,UDP之后,就會給應用層的數據報前面…

服務器端口開放,服務器端口開放命令與方法的專業闡述

在計算機網絡中,服務器端口的開放是確保網絡通信暢通無阻的關鍵步驟。服務器端口是服務器與外部網絡通信的入口,通過正確配置和開放相應的端口,可以實現各種網絡服務和應用的功能。 一、命令與工具 在Linux系統中,常用的命令和工…

Python中如何將字符串轉換成可調用的方法

字符串轉化成方法 import importlibdef find_method_by_str(method_path):"""通過字符串,尋找方法"""if not method_path:return Nonemethods method_path.split(".")_module importlib.import_module(".".jo…

4. C++網絡編程-TCP客戶端的實現

TCP Client網絡編程基本步驟 創建socket&#xff0c;指定使用TCP協議使用connect連接服務器使用recv/send接收/發送數據關閉socket TCP-connect連接請求 !man 2 connect #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int connect(int sock…

邦芒簡歷:簡歷照片的藝術與真實

在美顏濾鏡與P圖技術盛行的今天&#xff0c;許多人似乎對“完美”形象有著不懈的追求。從社交平臺的自拍&#xff0c;到簡歷上的證件照&#xff0c;無一不經過精心的修飾與處理。然而&#xff0c;這種對完美的追求在求職過程中&#xff0c;是否總是起到積極的作用呢&#xff1f…

內網滲透(不出網上線CS)

目錄 CS的概述 實驗&#xff1a;不出網上線CS實驗 一&#xff1a;給PC1種馬 二&#xff1a;使用Beacon SMB去控制PC2。 三&#xff1a;將CS權限傳遞給MSF 四&#xff1a;將msf權限傳遞給CS CS的概述 cs是一款強大的控制windows木馬的工具。是目前滲透中常使用的一個工具…

一些Spring Boot直接的解釋

RequestParam() 就是從問號之后的鍵值對獲取值綁定值,這個方法用的是get方法 /fjg?namefjg http://example.com/find?productId1234GetMapping("/find") public String getProduct(RequestParam("productId") String productId) {return "Product …

fastapi中實現多個路由請求

大家伙&#xff0c;我是雄雄&#xff0c;歡迎關注微信公眾號&#xff1a;雄雄的小課堂。 前言 最近在寫機器人相關的接口&#xff0c;順手學了學python&#xff0c;發現這是個好東西&#xff0c;寫代碼效率比java要高很多&#xff0c;比如寫個詞云呀&#xff0c;寫個回調呀&am…

隨手筆記4

1、https://www.pgyer.com/app/distribution 蒲公英 移動發布二維碼

gRPC和ProtoBuf

gRPC介紹 gRPC是一個高性能、開源且通用的RPC框架&#xff0c;它基于HTTP/2標準協議和Protocol Buffers進行數據序列化&#xff0c;支持多種編程語言。 rpc和http區別 傳輸協議&#xff1a;RPC可以基于TCP或HTTP協議&#xff0c;而HTTP服務則工作在HTTP協議之上。效率和性能…

android 問題記錄:gradle.kts文件引入本地jar包

在build.gradle文件中引入本地的jar文件&#xff0c;可以使用files方法來添加本地的jar文件到項目的依賴中。在build.gradle引入jar包我們都很熟悉了&#xff0c;具體代碼如下 implementation files(libs/test.jar)// 或者 compile files(libs/test.jar) 但是這種寫法目前在kt…

kafka 消費模式基礎架構

kafka 消費模式 &基礎架構 目錄概述需求&#xff1a; 設計思路實現思路分析1.kafka 消費模式基礎架構基礎架構2&#xff1a; 參考資料和推薦閱讀 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,…

mainwindow.ui和mainwindow.h和ui_mainwindow.h這幾個文件之間的聯系是什么

在Qt應用程序開發中&#xff0c;mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 這三個文件之間有著緊密的聯系&#xff0c;共同構成了使用Qt Designer設計的圖形用戶界面&#xff08;GUI&#xff09;應用程序的基礎。下面是這三個文件各自的作用及它們之間的關聯&#xff1…

HTML5 文件處理及應用

HTML5 文件處理及應用 目錄 核心對象文件信息讀取文件拖放FileReaderSyncFileWriter APIBlob URL與 revokeObjectURL()跨源資源共享 (CORS)HTML5文件File API為瀏覽器提供了與用戶計算機上的文件進行交互的能力,使得Web應用程序能夠在客戶端直接處理文件數據,而無需依賴服務…

Golang:使用jszwec/csvutil讀取csv文件

jszwec/csvutil 高性能、慣用的CSV記錄編碼和解碼到本機Go結構 文檔 https://github.com/jszwec/csvutil 安裝 go get github.com/jszwec/csvutil要讀取的文件 user.csv name,age,CreatedAt jacek,26,2012-04-01T15:00:00Z john,,2001-01-01T00:00:00Z讀取示例 package m…

93.網絡游戲逆向分析與漏洞攻防-游戲技能系統分析-增強技能信息顯示后進行分析

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 如果看不懂、不知道現在做的什么&#xff0c;那就跟著做完看效果&#xff0c;代碼看不懂是正常的&#xff0c;只要會抄就行&#xff0c;抄著抄著就能懂了 內容…

Ant Design Vue中 a-table 嵌套子表格

需求&#xff1a;在父表格中嵌套子表格&#xff0c;當點擊展開某一行時&#xff0c;有展開的關閉當前展開行。使用a-table中的expandedRowKeys 屬性和expand 方法。鏈接&#xff1a;Ant Design Vue 一、屬性說明&#xff1a; expandedRowKeys&#xff1a;這個主要是控制展開某行…

都2024年了!是誰還不會優化 Hive 的小文件啊!!!速看!

文章目錄 小文件產生的原因1.查詢建表或者插入2.裝載數據3.動態分區小文件影響解決方法針對已經存在的小文件進行優化1.小文件歸檔2.getmerge3.concatenate4.重寫針對寫入數據時的優化1.調參優化2.動態分區優化3.使用 Spark 算子控制小文件數量查看 HDFS 上的文件時,無意間點進…

【QT+VS】如何在現有VS項目中添加Qt界面?【全網最詳細】

0. 前置步驟 參考如下鏈接文章中的 前3個步驟(1:下載Qt;2:安裝Qt;3:安裝Qt插件),完成環境的配置和安裝。 深耕AI:如何聯合Qt,VS,C++,來開發一個電腦版軟件(簡單有趣,詳細) 本文的基礎項目鏈接為: c++工程+圖像分割預測+mmdet+實例分割+最新工程+簡潔易懂+新手…