使用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,一经查实,立即删除!

相关文章

【无监督+自然语言】 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多功能手机

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

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…

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;那影响最终模型的一大决定因…

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_…

求解素数环问题

注&#xff1a;这里我的代码是以第一位为最大数n为首元素不动的 思路&#xff1a; 首先我们分析问题要以较小规模的样例进行分析&#xff0c;例如n3时 第一步&#xff1a;深入搜索 我们先不管后面怎么样&#xff0c;当前的首要目标是先确定第一个元素的值&#xff0c;可知有…

windows电脑改造为linux

有个大学用的旧笔记本电脑没啥用了&#xff0c;决定把它改成linux搭一个服务器&#xff1b; 一、linux安装盘制作 首先要有一个大于8G的U盘&#xff0c;然后去下载需要的linux系统镜像&#xff0c;我下的是ubuntu&#xff0c;这里自选版本 https://cn.ubuntu.com/download/d…

今日arXiv最热NLP大模型论文:韩国团队提出ResearchAgent系统,模仿人类产出论文idea

你是否还在苦于想发论文却没有idea&#xff1f; 在浩瀚无边的文献中苦苦寻找却又无从下手&#xff1f; 那些看似与你研究相关的文章&#xff0c;要么已经被人研究得透彻无比&#xff0c;要么与你的方向南辕北辙&#xff0c;让你倍感挫败。 不要慌&#xff0c;让AI来助你一臂之…

日期类的实现,const成员

目录 一&#xff1a;日期类实现 二&#xff1a;const成员 三&#xff1a;取地址及const取地址操作符重载 一&#xff1a;日期类实现 //头文件#include <iostream> using namespace std;class Date {friend ostream& operator<<(ostream& out, const Dat…

C语言中的三大循环

C语言中为我们提供了三种循环语句&#xff0c;今天我就来与诸君细谈其中之奥妙。循环这一板块总结的内容较多&#xff0c;而且&#xff0c;很重要&#xff01;&#xff08;敲黑板&#xff01;&#xff01;&#xff01;)&#xff0c;所以诸君一定要对此上心&#xff0c;耐住性子…

系统服务(22年国赛)—— nmcli命令部署VXLAN

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; 系统服务&#xff08;22年国赛&#xff09;—— VXLAN服务部署https://myweb.myskillstree.cn/118.html 目录 题目&#xff1a; AppSrv 关闭防火墙和SEli…

Linux 双击sh脚本运行无反应或一闪而退【已解决】

这里写目录标题 一、问题描述二、解决思路1. 开启终端&#xff0c;使用命令行运行.sh脚本文件2. 终端中运行可以&#xff0c;但双击之后运行闪退 (遇到了个这个奇奇怪怪的问题) 三、分析记录3.1 .bashrc设置变量的作用域3.2 环境变量冲突覆盖问题. 四、相关知识点4.1 环境变量配…