当前位置: 首页 > news >正文

STM32G431收发CAN

1.硬件连接

PB8作为CAN_RX,PB9作为CAN_TX,连接一个CAN收发器TJA1051T/3
在这里插入图片描述

2. CubeMX里配置CAN

在这里插入图片描述
在这里插入图片描述
设置连接FDCAN1的参数,使用1个标准过滤器,波特率位500K
在这里插入图片描述
使能FDCAN1的中断

3 自动生成代码

3.1 初始化

static void MX_FDCAN1_Init(void)
{/* USER CODE BEGIN FDCAN1_Init 0 */__HAL_RCC_FDCAN_CLK_ENABLE();/* USER CODE END FDCAN1_Init 0 *//* USER CODE BEGIN FDCAN1_Init 1 *//* USER CODE END FDCAN1_Init 1 */hfdcan1.Instance = FDCAN1;hfdcan1.Init.ClockDivider = FDCAN_CLOCK_DIV2;hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;hfdcan1.Init.AutoRetransmission = DISABLE;hfdcan1.Init.TransmitPause = DISABLE;hfdcan1.Init.ProtocolException = DISABLE;hfdcan1.Init.NominalPrescaler = 2;hfdcan1.Init.NominalSyncJumpWidth = 1;hfdcan1.Init.NominalTimeSeg1 = 14;hfdcan1.Init.NominalTimeSeg2 = 3;hfdcan1.Init.DataPrescaler = 1;hfdcan1.Init.DataSyncJumpWidth = 1;hfdcan1.Init.DataTimeSeg1 = 1;hfdcan1.Init.DataTimeSeg2 = 1;hfdcan1.Init.StdFiltersNbr = 1;hfdcan1.Init.ExtFiltersNbr = 0;hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK){Error_Handler();}/* USER CODE BEGIN FDCAN1_Init 2 */CAN_SetFilter();HAL_FDCAN_Start(&hfdcan1);// Activate notificationsHAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_TX_FIFO_EMPTY,0);HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);/* USER CODE END FDCAN1_Init 2 */}

手工增加:

  • FDCAN时钟使能 __HAL_RCC_FDCAN_CLK_ENABLE();
  • 过滤器设置 CAN_SetFilter();
  • 激活中断信号,发送完成和FIFO0收到新消息
  • 启动 HAL_FDCAN_Start(&hfdcan1);

3.2 过滤器设置

/* USER CODE BEGIN 4 */
void CAN_SetFilter()
{FDCAN_FilterTypeDef sFilterConfig;// 初始化过滤器配置结构sFilterConfig.IdType=FDCAN_STANDARD_ID;sFilterConfig.FilterIndex=0;sFilterConfig.FilterType=FDCAN_FILTER_DUAL;sFilterConfig.FilterConfig=FDCAN_FILTER_TO_RXFIFO0;sFilterConfig.FilterID1=0x11;sFilterConfig.FilterID2=0x22;if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK){// 处理错误Error_Handler();}//全局过滤器设置,如果包含上述条件的帧则通过HAL_FDCAN_ConfigGlobalFilter(&hfdcan1,FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE);
}
  • 采用一个标准过滤器,过滤器号:0, 过滤类型FDCAN_FILTER_DUAL,就是把FilterID1和FilterID2当成2个CAN ID,过滤器配置为FDCAN_FILTER_TO_RXFIFO0,即把那两个CANID的消息存入RX FIFO0
  • 记得进行全局过滤设置,其函数原型如下:
  • 在这里插入图片描述
    本例中拒绝不匹配的标准帧,拒绝不匹配的扩展帧,接收过滤后的标准远程帧,接收过滤后的扩展远程帧。

3.3 中断处理

void FDCAN1_IT0_IRQHandler(void)
{/* USER CODE BEGIN FDCAN1_IT0_IRQn 0 */CAN_Rcv_IR();/* USER CODE END FDCAN1_IT0_IRQn 0 */HAL_FDCAN_IRQHandler(&hfdcan1);/* USER CODE BEGIN FDCAN1_IT0_IRQn 1 *//* USER CODE END FDCAN1_IT0_IRQn 1 */
}

加入接收中断处理函数:CAN_Rcv_IR();

void CAN_Rcv_IR()
{if (__HAL_FDCAN_GET_FLAG(&hfdcan1, FDCAN_FLAG_RX_FIFO0_NEW_MESSAGE)){	       FDCAN_RxHeaderTypeDef pHeader;uint8_t pData[64];// 循环处理新消息while (HAL_FDCAN_GetRxFifoFillLevel(&hfdcan1,FDCAN_RX_FIFO0 ) > 0){// 从Rx FIFO 0中读取消�?if(HAL_FDCAN_GetRxMessage(&hfdcan1,FDCAN_RX_FIFO0 ,&pHeader,pData)== HAL_OK){TxData[4]=pHeader.RxTimestamp & 0xFF;TxData[5]=pHeader.DataLength & 0xFF;TxData[6]=pHeader.Identifier & 0xFF;TxData[7]=pData[0];counter++;CAN_Send();}else{// 处理读取消息时的错误Error_Handler();}}// 清除Rx FIFO 0新消息标志__HAL_FDCAN_CLEAR_FLAG(&hfdcan1, FDCAN_FLAG_RX_FIFO0_NEW_MESSAGE);}
}

如果检测到FIFO0新消息标志:FDCAN_FLAG_RX_FIFO0_NEW_MESSAGE
则循环处理FIFO0中的消息

相关文章:

STM32G431收发CAN

1.硬件连接 PB8作为CAN_RX,PB9作为CAN_TX,连接一个CAN收发器TJA1051T/3 2. CubeMX里配置CAN 设置连接FDCAN1的参数,使用1个标准过滤器,波特率位500K 使能FDCAN1的中断 3 自动生成代码 3.1 初始化 static void MX_FDCAN1_In…...

如何得到深度学习模型的参数量和计算复杂度

1.准备好网络模型代码 import torch import torch.nn as nn import torch.optim as optim# BP_36: 输入2个节点,中间层36个节点,输出25个节点 class BP_36(nn.Module):def __init__(self):super(BP_36, self).__init__()self.fc1 nn.Linear(2, 36) # …...

2025年股指期货每月什么时候交割?

股指期货交割日是指期货合约到期时,买卖双方根据合约规定的指数价值进行现金结算的日期。在中国市场中,股指期货的交割日通常是合约到期月份的第三个星期五。这一规律适用于所有股指期货合约,无论是当月、下月合约,还是季度月合约…...

自从学会Git,感觉打开了一扇新大门

“同事让我用 Git 提交代码,我居然直接把项目文件压缩发过去了……”相信很多初学者都经历过类似的窘境。而当你真正掌握 Git 时,才会发现它就像一本魔法书,轻松解决代码管理的种种难题。 为什么 Git 能成为程序员的标配工具?它究…...

Ansys Discovery 中的网格划分方法:探索模式

本篇博客文章将介绍 Ansys Discovery 中可用于在探索模式下进行分析的网格划分方法。我们将在下一篇博客中介绍 Refine 模式下的网格划分技术。 了解 Discovery Explore 模式下的网格划分 网格划分是将几何模型划分为小单元以模拟系统在不同条件下的行为的过程。这是通过创建…...

关于 AWTK 和 Weston 在旋转屏幕时的资源消耗问题

关于 AWTK 和 Weston 在旋转屏幕时的资源消耗问题,首先需要理解这两者旋转的本质区别及其资源开销。 AWTK的屏幕旋转: AWTK旋转的实现方式: AWTK 是一个用户界面工具包,它通过图形渲染系统处理所有控件和窗口的旋转。当你使用 w…...

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组: 按照 team 列(即团队)。按照 name 列的 首字母(df.name.str[0])。 df.name.s…...

HTML——66.单选框

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>单选框</title></head><body><!--input元素的type属性&#xff1a;(必须要有)--> <!--单选框:&#xff08;如所住省会&#xff0c;性别选择&…...

Couchbase 和数据湖技术的区别、联系和相关性分析

Couchbase 和数据湖技术&#xff08;如 Delta Lake、Apache Hudi、Apache Iceberg&#xff09;分别是两类不同的数据存储与管理系统&#xff0c;但它们也可以在特定场景中结合使用&#xff0c;以下是它们的区别、联系和相关性分析&#xff1a; 区别&#xff1a; 1. 核心用途&a…...

springboot3 性能优化

Spring Boot 3 是基于 Spring Framework 6 的最新版本,支持 Java 17,并引入了多项改进,包括原生镜像支持、性能提升和现代化开发支持。以下是对 Spring Boot 3 应用进行全面优化的详细步骤: 一、开发环境优化 1. 使用最新版本 确保依赖版本为最新: Spring Boot 3.x。 J…...

C++之运算符重载详解篇

1.概念 重载概念&#xff1a; C 允许在同一作用域中的某个函数和运算符指定多个定义&#xff0c;分别称为函数重载和运算符重载。 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 这里主要介绍…...

深度学习应用工程化中的节能减排最佳实践

文章大纲 简介为什么要在制造业节能减排能耗估算显卡能耗CPU 能耗树莓派能耗加速卡能耗硬件层面的改进边缘端硬件简介树莓派 + 加速卡软件层面的改进检测逻辑的改进算法层面改进深度学习模型训练,推理,量化的优化外网参考参考文献简介 为什么要在制造业节能减排 一、制造业…...

电脑文件msvcp110.d丢失的解决方法

电脑运行故障全解析&#xff1a;从文件丢失到系统报错&#xff0c;打造无忧使用环境 在数字化浪潮中&#xff0c;电脑作为我们工作、学习和娱乐的得力助手&#xff0c;其稳定运行至关重要。然而&#xff0c;在实际使用过程中&#xff0c;我们难免会遇到各种各样的问题&#xf…...

xdoj isbn号码

ISBN 号码 问题描述 每一本正式出版的图书都有一个 ISBN 号码与之对应&#xff0c;ISBN 码包括 9 位数字、1 位识别码和 3 位分隔符&#xff0c;其规定格式如"x-xxx-xxxxx-x"&#xff0c; 其中符号“-”是分隔符&#xff08;键盘上的减号&#xff09;&#xff0c;最…...

qt的utc时间转本地时间

代码如下: #include <QCoreApplication> #include <QDateTime> #include <QDebug>int main(int argc...

mariadb变更数据存放目录

1、停止mariadb服务 # systemctl stop maraidb.server 2、创建数据目录 # mkdir /opt/mysql # chown -R mysql:mysql /opt/mysql 3、配置mariadb 3.1 配置文件说明 # cd /etc/mysql/ && ls -l my.cnf为主配置文件&#xff0c;其他的为子配置&#xff0c;同时配置…...

分布式专题(11)之Zookeeper特性与节点数据类型详解

一、Zookeeper数据结构 Zookeeper数据模型与结构与Unix文件系统很类似&#xff0c;整体上可以看做是一棵树&#xff0c;每个节点称做一个ZNode。 Zookeeper的数据模型是层次模型&#xff0c;层次模型常见于文件系统 。层次模型和Key-Value模型是两种主流的数据模型&#xff0c;…...

Java项目实战II基于小程序的驾校管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着汽车保有量的不断增长&#xff0c;驾驶培训市场日…...

Unity Pico 应用失去焦点后,追踪功能被禁用(原生 UI 界面弹出)

在 Unity 中&#xff0c;如果正在使用新的输入系统&#xff0c;任何触发 OnApplicationFocus(false) 的事件都可能会禁用追踪功能。 负责此功能的组件是附加到主摄像机的 "Tracked Pose Driver (Input System)" 组件。由于非输入系统版本不是新输入系统的一部分&…...

第十四届蓝桥杯Scratch省赛中级组—智能计价器

智能计价器 背景信息&#xff1a; A城市的出租车计价&#xff1a;3公里以内13元&#xff0c;基本单价每公里2.3元(超过3公里的部分&#xff0c;不满1公里按照1公里收费&#xff09;&#xff0c;燃油附加费每运次1元。 例如&#xff1a; 3.2公里的打车费用&#xff1a;132.3…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...