使用STM32CubeMX对STM32F4的CAN1/2/3配置及接收中断开启

目录

  • 1. CAN配置
    • 1.1引脚(STM32F413VGT6-LQFP100)
    • 1.2 时钟
    • 1.3 RCC配置
    • 1.4 CAN1配置
    • 1.5 CAN2配置
    • 1.6 CAN3配置
    • 1.7 输出设置
  • 2. CAN代码
    • 2.1 CAN初始化
    • 2.2 CAN滤波器设置
    • 2.3 CAN使能
    • 2.4 激活中断
    • 2.5 CAN发送函数
    • 2.6 CAN回调函数
    • 2.7 main之后的代码

1. CAN配置

1.1引脚(STM32F413VGT6-LQFP100)

在这里插入图片描述

1.2 时钟

外部使用8MHz晶振
开启内部16MHz晶振
使用锁相环
最大100MHz,3路CAN时钟挂载于APB1时钟上,频率50MHz

在这里插入图片描述
.
.

1.3 RCC配置

在这里插入图片描述
.
.

1.4 CAN1配置

波特率计算:
500K = 50MHz / (5+4+1)*10 ;(10、5、4、1在下图中有介绍)。
在这里插入图片描述
.
.
接收中断全部开启:

在这里插入图片描述

1.5 CAN2配置

在这里插入图片描述
在这里插入图片描述
.
.

1.6 CAN3配置

在这里插入图片描述
在这里插入图片描述

1.7 输出设置

在这里插入图片描述
.
.
在这里插入图片描述

2. CAN代码

2.1 CAN初始化

这里只改了void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)的这个部分

else if(canHandle->Instance==CAN2){/* USER CODE BEGIN CAN2_MspInit 0 *//* USER CODE END CAN2_MspInit 0 *//* CAN2 clock enable */__HAL_RCC_CAN1_CLK_ENABLE(); //只增加的部分__HAL_RCC_CAN2_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/**CAN2 GPIO ConfigurationPB12     ------> CAN2_RXPB13     ------> CAN2_TX*/GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF9_CAN2;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);/* CAN2 interrupt Init */HAL_NVIC_SetPriority(CAN2_RX0_IRQn, 0, 0);//HAL_NVIC_SetPriority(CAN2_RX0_IRQn, 0, 0);HAL_NVIC_EnableIRQ(CAN2_RX0_IRQn);HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn);/* USER CODE BEGIN CAN2_MspInit 1 *//* USER CODE END CAN2_MspInit 1 */}

.

2.2 CAN滤波器设置

	//CAN1_Filter_Config();CAN2_Filter_Config();CAN3_Filter_Config();
	//CAN1 滤波器设置void CAN1_Filter_Config(){CAN_FilterTypeDef sFilterConfig;sFilterConfig.FilterBank = 0;						//sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;	/sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;	//sFilterConfig.FilterIdHigh = 0X0000;				//sFilterConfig.FilterIdLow = 0X0000;					//sFilterConfig.FilterMaskIdHigh = 0X0000;			//sFilterConfig.FilterMaskIdLow = 0X0000;				//sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;	//sFilterConfig.FilterActivation = ENABLE;			//sFilterConfig.SlaveStartFilterBank = 14;			//if(HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK){Error_Handler();}
}
//CAN2 滤波器设置
void CAN2_Filter_Config(){CAN_FilterTypeDef sFilterConfig;sFilterConfig.FilterBank = 14;						//滤波器组初始化sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;	//sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;	//sFilterConfig.FilterIdHigh = 0X0000;				//sFilterConfig.FilterIdLow = 0X0000;					//sFilterConfig.FilterMaskIdHigh = 0X0000;			//sFilterConfig.FilterMaskIdLow = 0X0000;				//sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;	//sFilterConfig.FilterActivation = ENABLE;			//sFilterConfig.SlaveStartFilterBank = 14;			//从属滤波器组,单路CAN无意义if(HAL_CAN_ConfigFilter(&hcan2, &sFilterConfig) != HAL_OK){Error_Handler();}
}
//CAN3设置
void CAN3_Filter_Config(){CAN_FilterTypeDef sFilterConfig;sFilterConfig.FilterBank = 0;						//sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;	//sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;	//sFilterConfig.FilterIdHigh = 0X0000;				//sFilterConfig.FilterIdLow = 0X0000;					//sFilterConfig.FilterMaskIdHigh = 0X0000;			//sFilterConfig.FilterMaskIdLow = 0X0000;				//sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;	//sFilterConfig.FilterActivation = ENABLE;			//sFilterConfig.SlaveStartFilterBank = 14;			//if(HAL_CAN_ConfigFilter(&hcan3, &sFilterConfig) != HAL_OK){Error_Handler();}
}

.

2.3 CAN使能

	HAL_CAN_Start(&hcan1);HAL_CAN_Start(&hcan2);HAL_CAN_Start(&hcan3);

.

2.4 激活中断

	HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);HAL_CAN_ActivateNotification(&hcan3, CAN_IT_RX_FIFO0_MSG_PENDING);

.

2.5 CAN发送函数

// 配置
CAN_TxHeaderTypeDef CAN_TX_T;
uint32_t tx_mailBox;
uint8_t tx_data[4] = {0x55, 0x66, 0x23, 0x58};
CAN_TX_T.StdId = 0x15;
CAN_TX_T.ExtId = 0;
CAN_TX_T.DLC = 4;
// 发送
HAL_CAN_AddTxMessage(&hcan1, &CAN_TX_T, tx_data, &tx_mailBox);

.

2.6 CAN回调函数

CAN_RxHeaderTypeDef rxHeader;
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{uint8_t data_ss[8];//HAL_UART_Transmit(&huart1, data_s2, 10, 1000);if(hcan->Instance == CAN1){HAL_UART_Transmit(&huart1, data_s1, 10, 1000);HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &rxHeader, data_ss);}if(hcan->Instance == CAN2){HAL_UART_Transmit(&huart1, data_s2, 10, 1000);HAL_CAN_GetRxMessage(&hcan2, CAN_RX_FIFO0, &rxHeader, data_ss);}if(hcan->Instance == CAN3){HAL_UART_Transmit(&huart1, data_s3, 10, 1000);HAL_CAN_GetRxMessage(&hcan3, CAN_RX_FIFO0, &rxHeader, data_ss);}}

2.7 main之后的代码

    MX_CAN1_Init();MX_CAN2_Init();MX_CAN3_Init();CAN1_Filter_Config();CAN2_Filter_Config();CAN3_Filter_Config();HAL_CAN_Start(&hcan1);HAL_CAN_Start(&hcan2);HAL_CAN_Start(&hcan3);HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);HAL_CAN_ActivateNotification(&hcan3, CAN_IT_RX_FIFO0_MSG_PENDING);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下的mysql8.0安装

首先下载mysql8.0压缩包 mysql8.0下载地址: https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-i686.tar.xz # 下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-i686.tar.xz# 解压 tar zxvf mysql-8.0.11…

Node.js使用

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它使得JavaScript能够脱离浏览器,直接在服务器端运行。Node.js的异步I/O模型使其在处理高并发请求时表现出色,适用于构建网络应用、实时应用等。以下是对Node.js使用的总结: …

【无监督+自然语言】 GPT,BERT, GPT-2,GPT-3 生成式预训练模型方法概述 (Generative Pre-Traning)

主要参考 【GPT,GPT-2,GPT-3 论文精读【李沐论文精读】-2022.03.04】 https://www.bilibili.com/video/BV1AF411b7xQ/ 大语言模型综述: https://blog.csdn.net/imwaters/article/details/137019747 GPT与chatgpt的关系 图源:L…

java多功能手机

随着科技的发展,手机的使用已经普及到每个家庭甚至个人,手机的属性越来越强大,功能也越来越多,因此人们在生活中越来越依赖于手机。 任务要求,使用所学知识编写一个手机属性及功能分析程序设计,测试各个手机…

使用Uiautomotorviewer无法获取手机页面元素+解决办法

在进行 Android 应用程序开发或测试时,有时会遇到以下错误: Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException这个错误可能会导致开发或测试过程中的一些困扰,但有一个简单的解决方法: 解决方法…

JEECG/SpringBoot集成flowable流程框架

IDEA安装Flowable BPMN visualizer插件 pom.xml中引入flowable相关依赖 <dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter</artifactId><version>6.7.2</version></dependency><depe…

PHP 错误 Unparenthesized `a ? b : c ? d : e` is not supported

最近在一个新的服务器上测试一些老代码的时候得到了类似上面的错误&#xff1a; [Thu Apr 25 07:37:34.139768 2024] [php:error] [pid 691410] [client 192.168.1.229:57183] PHP Fatal error: Unparenthesized a ? b : c ? d : e is not supported. Use either (a ? b : …

Docker镜像和容器操作

目录 一.Docker镜像创建与操作 1. 搜索镜像 2. 获取镜像 3. 镜像加速下载 4. 查看镜像信息 5. 查看下载的镜像文件信息 ​编辑6. 查看下载到本地的所有镜像 7. 根据镜像的唯一标识ID号&#xff0c;获取镜像详细信息 8. 为本地的镜像添加新的标签 9. 删除镜像 10. 存入…

【Prometheus】了解你的Prometheus指标

简单Prometheus查询用于指标检查 作者&#xff1a;Michal Kazmierczak 来源&#xff1a;mkaz.me 基数是关键。 它很容易失控&#xff0c;就像任何组合爆炸的实例一样。 这&#xff0c;再加上90%的指标从未被访问过的说法&#xff0c;创造了一个值得探索的领域。 观察性云供应…

复杂Python代码看不懂,分享两个工具!

复杂Python代码看不懂&#xff0c;分享两个工具&#xff0c;事半功倍&#xff01; Ryven Ryven是一个Python代码可视化工具&#xff01; 精进地址&#xff1a;https://github.com/leon-thomm/Ryven 一些案例&#xff0c; Ryven可视化操作矩阵 Ryven可视化冒泡排序算法 Ryv…

React Native 复杂列表开发与性能优化全攻略(现在看为时不晚!)

​ ​微信公众号&#xff1a;小武码码码 大家好,上一篇分享了 Flutter复杂列表开发与性能优化全攻略。那接下来这一篇,我想和大家分享一下在 React Native 中开发复杂列表的经验和心得。作为移动开发中最常见的 UI 组件之一,列表几乎出现在每一个应用中。然而,当列表变得复杂起…

设计模式- 装饰器模式(Decorator Pattern)结构|原理|优缺点|场景|示例

设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 创建型&#xff08;5种&#xff09; 工厂方法 抽象工厂模式 单例模式 建造者模式 原型模式 结构型&#xff08;7种&#xff09; 适配器…

JavaScript模块化编程:构建高效、可维护的代码结构

引言 JavaScript 模块是现代前端开发中的重要组成部分。它们允许开发者将代码组织成独立、可重用的单元&#xff0c;从而提高了代码的可维护性、可扩展性和可读性。本文将深入探讨 JavaScript 模块的概念、语法和最佳实践&#xff0c;帮助你充分利用模块化开发的优势。 模块的…

Three.js和Cesium.js中坐标

在了解Three.js和Cesium.js前先了解并弄清楚图形学关于空间的基本概念流程&#xff1a; 计算机图形学 图形学中涉及到多个坐标空间&#xff0c;这些空间之间的变换是图形渲染中的核心部分。下面是一些常见的图形学空间及其变换顺序&#xff1a; 对象空间&#xff08;Object Sp…

Python快速入门1数据类型(需要具有编程基础)

数据类型&#xff1a; Python 3.0版本中常见的数据类型有六种&#xff1a; 不可变数据类型可变数据类型Number&#xff08;数字&#xff09;List&#xff08;列表&#xff09;String&#xff08;字符串&#xff09;Dictionary&#xff08;字典&#xff09;Tuple&#xff08;元…

【InternLM】基于弱智吧数据的微调数据构造实验

1. 数据处理流程 在AI领域有句名言&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。可见数据对整个AI的决定性影响&#xff0c;在模型开源化的今天&#xff0c;很多厂商的模型结构都大同小异&#xff0c;那影响最终模型的一大决定因…

学习redis知识点

学习 Redis 时&#xff0c;可以按照以下分类来组织知识点&#xff1a; 核心概念 内存数据库&#xff1a;理解 Redis 作为内存数据库的特点和限制。数据结构&#xff1a;熟悉 Redis 支持的数据结构&#xff0c;如字符串、列表、集合、有序集合和散列。 数据类型及操作 字符串…

4.28java项目小结

这几天完成了用户修改资料模块的功能&#xff0c;实现了修改用户头像&#xff0c;昵称等信息&#xff0c;并且对数据库进行了操作&#xff0c;大致画了好友资料的页面的内容&#xff0c;这两天尽量完成表的创建&#xff0c;建立多对多的关系&#xff0c;实现好友的添加功能。

.DevicData-P-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复

引言&#xff1a; 随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中勒索病毒以其独特的攻击方式和巨大的破坏性引起了广泛关注。.DevicData-P-XXXXXXXX勒索病毒就是近期出现的一种新型勒索病毒&#xff0c;它利用强大的加密算法和巧妙的传播手段&…

HNCTF 2022 week1 题解

自由才是生活主旋律。 [HNCTF 2022 Week1] Interesting_include <?php //WEB手要懂得搜索 //flag in ./flag.phpif(isset($_GET[filter])){$file $_GET[filter];if(!preg_match("/flag/i", $file)){die("error");}include($file); }else{highlight_…