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

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完