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

本文主要是介绍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 */
}

这篇关于STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002669

相关文章

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提