【HMGD】STM32/GD32 CAN通信

各种通信协议速度分析

协议最高速度(btis/s)
I2C400K
CAN1M
CAN-FD5M
48510M
SPI36M

CAN协议图和通信帧

在这里插入图片描述

在这里插入图片描述

CubeMX CAN配置说明

CAN通信波特率 = APB1频率 / 分频系数 /(BS1 + BS2 + 同步通信段)* 1000

​ = 42 / 1 / (1+1+1) * 1000

​ = 14,000 KHz

​ = 14000000 bit/s

CAN最高只有1M,支持CAN-FD的单片机可以为8M

在这里插入图片描述

Time Triggered Communication Mode:

时间触发模式,用于生成时间戳,可以实现分时同步功能

Automatic Bus-Off Management

自动离线管理,当节点检测到它发送错误或接收错误超过一定值时,会自动进入离线状态

Automatic Wake-Up Mode

自动唤醒功能,CAN 外设可以使用软件进入低功耗的睡眠模式,如果使能了这个自动唤醒功能,当 CAN 检测到总线活动的时候,会自动唤醒

Automatic Retransmission

报文自动重传功能,设置这个功能后,当报文发送失败时会自动重传至成功为止

Receive Fifo Locked Mode

FIFO 锁定模式,该功能用于锁定接收 FIFO。锁定后,当接收 FIFO 溢出时,会丢弃下一个接收的报文。若不锁定,则下一个接收到的报文会覆盖原报文

Transmit Fifo Priority

报文发送优先级的判定方法,ID 优先级还是报文存进邮箱的顺序来发送

Operating Mode:

CAN模式

在这里插入图片描述
自发自收模式配置

在这里插入图片描述

示例程序

在这里插入图片描述

如果是GD32系列单片机需要在stm32f4xx_hal_can.c文件中添加如下代码,解决初始化CAN死机问题

CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP);

在这里插入图片描述

// 申明使用到的变量
uint8_t TX_data[20];
uint8_t RX_data[20];
uint32_t mailbox;
int back;
static CAN_TxHeaderTypeDef Tx_Header;
static CAN_FilterTypeDef can_filter;

// CAN接收回调
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
	if(hcan->Instance == CAN1)
	{
	  	CAN_RxHeaderTypeDef RxHeader;
        // 当接收到数据后放到TX数组,把数据返回去
	  	HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RxHeader, TX_data);
        //HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RxHeader, RX_data);
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_SET);
	}
}

int main(void)
{

  	HAL_Init();
  	SystemClock_Config();
  	MX_GPIO_Init();
  	MX_DMA_Init();
    
    // 初始化CAN1
  	MX_CAN1_Init();
	// 启用CAN的中断通知功能
	HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
    // 启动CAN1
	HAL_CAN_Start(&hcan1);
	// 设置CAN过滤器(CAN配置详解请看下一点)
  	can_filter.FilterActivation = CAN_FILTER_ENABLE; 
  	can_filter.FilterMode = CAN_FILTERMODE_IDMASK;
  	can_filter.FilterScale = CAN_FILTERSCALE_32BIT;
  	can_filter.FilterIdHigh = 0x0000;      
  	can_filter.FilterIdLow = 0x0000;
  	can_filter.FilterMaskIdHigh = 0x0000;  
  	can_filter.FilterMaskIdLow = 0x0000;
  	can_filter.FilterBank = 0;
  	can_filter.FilterFIFOAssignment = CAN_RX_FIFO0;
  	can_filter.SlaveStartFilterBank = 14; 
  	HAL_CAN_ConfigFilter(&hcan1, &can_filter);
	
    // 初始数据
	TX_data[0] = 0x01;
	TX_data[1] = 0x02;
	TX_data[2] = 0x03;
	TX_data[3] = 0x01;
	TX_data[4] = 0x02;
	TX_data[5] = 0x03;
	TX_data[6] = 0x01;
	TX_data[7] = 0x02;
	
  	while (1)
  	{	
		// 设置CAN发送信息
		Tx_Header.StdId=0x12345678;        
		Tx_Header.ExtId=0;                 
		Tx_Header.IDE=CAN_ID_STD;            
		Tx_Header.RTR=CAN_RTR_DATA;          
		Tx_Header.DLC=8;            
		
        // 发送数据
    	back = HAL_CAN_AddTxMessage(&hcan1, &Tx_Header, TX_data, &mailbox);
		
		
		if(back == HAL_OK)
		{
            // 发送成功亮灯
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_SET);
		}
		
		HAL_Delay(1000);
		
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_RESET);
		
		HAL_Delay(1000);
		
  	}
}

https://download.csdn.net/download/hmxm6/89341938

CAN过滤器配置说明

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java面试】二、Redis篇(中)

文章目录 1、Redis持久化1.1 RDB1.2 AOF1.3 RDB与AOF的对比 2、数据过期策略(删除策略)2.1 惰性删除2.2 定期删除 3、数据淘汰策略4、主从复制4.1 主从全量同步4.2 增量同步 5、哨兵模式5.1 服务状态监控5.2 哨兵选主规则5.3 哨兵模式下,Redi…

Android ListView鼠标模式下ListView回滚问题

概述 在 Android 应用程序中,ListView 是一种常用的控件,用于显示可滚动列表数据。然而,当在鼠标操作模式下使用 ListView 时,可能会遇到一个问题:点击列表项时,列表会回滚到指定位置,这可能会导…

c语言IO

前言 老是忘记c语言IO操作,故写个文章记录一下 打开文件 fopen FILE *fopen(const char *path, const char *mode);mode 返回值 如果文件成功打开,fopen 返回一个指向 FILE 结构的指针。如果文件打开失败(例如,因为文件不存…

CMS Full GC流程以及调优配置

个人博客 CMS Full GC流程以及调优配置 | iwts’s blog CMS CMS 收集器是以实现最短 STW 时间为目标的收集器,所以对于偏业务的后台开发而言,基本上都无脑选CMS了。 多线程收集器,工作在老年代,采用标记清除算法。比较特殊&am…

leetcode-顺时针旋转矩阵-111

题目要求 思路 1.假设现在有一个矩阵 123 456 789 2.我们可以根据19这个对角线将数据进行交换&#xff0c;得到矩阵 147 258 369 3.然后将矩阵每一行的数据再翻转&#xff0c;得到矩阵 741 852 963 代码实现 class Solution { public:vector<vector<int> > rot…

贪心-ACW803区间合并-XMUOJ力量碎片合并

题目 思路 附上几个参考链接 for(auto i : v)遍历容器元素_for auto 遍历-CSDN博客 C pair的基本用法总结&#xff08;整理&#xff09;_c pair用法-CSDN博客 使用 sort 实现自定义排序 - AcWing 话不多说&#xff0c;直接上代码 代码 /* ACW803区间合并-XMUOJ力量碎片合…

【C++】二分查找算法:x的平方根

1.题目 2.算法思路 看到题目可能不容易想到二分查找。 这题考察我们对算法的熟练程度。 二分查找的特点&#xff1a;数组具有二段性(不一定有序)。 题目中没有数组&#xff0c;我们可以造一个从0到x的数组&#xff0c;然后利用二分查找找到对应的值即可。 3.代码 class S…

Android 布局中@NULL的使用和代码实现方式详解

文章目录 1、使用场景2、示例代码实现2.1、移除背景2.2 、移除文本2.3、移除布局宽度或高度2.4、移除提示文本2.5、移除图像资源 3、综合示例3.1、布局文件 activity_main.xml3.2、主活动文件 MainActivity.java3.4、资源文件3.5、运行结果 4、优点5、缺点6、综合分析6.1、适用…

MySQL数据库基础:使用、架构、SQL语句、存储引擎

文章目录 什么是数据库CS模式 基本使用安装链接服务器服务器、数据库、表关系简单使用数据库在Linux下的体现 MySQL架构连接器层客户端层服务层存储引擎层物理存储层 SQL分类存储引擎 什么是数据库 mysql&#xff1a;数据库服务的客户端mysqld&#xff1a;数据库服务的服务器端…

BGP策略实验(路径属性和选路规则)

要求&#xff1a; 1、使用preval策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2、使用AS Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4、使用Local Preference策略&#xff0c;确保R1通过R2到达19…

移动云以深度融合之服务,令“大”智慧贯穿云端

移动云助力大模型&#xff0c;开拓创新领未来。 云计算——AI模型的推动器。 当前人工智能技术发展的现状和趋势&#xff0c;以及中国在人工智能领域的发展策略和成就。确实&#xff0c;以 ChatGPT 为代表的大型语言模型在自然语言处理、文本生成、对话系统等领域取得了显著的…

深度学习中的多GPU训练(Pytorch 20)

一 多GPU训练 下面详细介绍如何从零开始并行地训练网络&#xff0c;这里需要运用小批量随机梯度下降算法。后面我还讲介绍如何使用高级API并行训练网络。 我们从一个简单的计算机视觉问题和一个稍稍过时的网络开始。这个网络有多个卷积层和汇聚层&#xff0c;最后可能 有几个…

构建智慧科技园区的系统架构:数字化驱动未来创新

随着科技的不断进步和数字化转型的加速推进&#xff0c;智慧科技园区已成为当今城市发展的重要组成部分。在智慧科技园区建设中&#xff0c;系统架构的设计和实施至关重要&#xff0c;对于提升园区管理效率、优化资源利用、促进创新发展具有重要意义。 一、智慧科技园区系统架构…

数据结构和算法|排序算法系列(三)|插入排序(三路排序函数std::sort)

首先需要你对排序算法的评价维度和一个理想排序算法应该是什么样的有一个基本的认知&#xff1a; 《Hello算法之排序算法》 主要内容来自&#xff1a;Hello算法11.4 插入排序 插入排序的整个过程与手动整理一副牌非常相似。 我们在未排序区间选择一个基准元素&#xff0c;将…

中国人工智能大模型价格战

近年来&#xff0c;人工智能技术迅猛发展&#xff0c;尤其是大模型领域的突破让人们看到了更多的可能性。然而&#xff0c;在这一高科技领域&#xff0c;中美两国的竞争日趋激烈。近日&#xff0c;中国互联网巨头们纷纷启动大模型价格战&#xff0c;引发了广泛关注。这场价格战…

GpuMall智算云:meta-llama/llama3/Llama3-8B-Instruct-WebUI

LLaMA 模型的第三代&#xff0c;是 LLaMA 2 的一个更大和更强的版本。LLaMA 3 拥有 35 亿个参数&#xff0c;训练在更大的文本数据集上GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Llama 3 的推出标志着 Meta 基于 Llama 2 架构推出了四个新…

解决word里加入mathtype公式后行间距变大

1.布局>页面设置>文档网格&#xff0c;网格栏选为无网格 2.固定间距

CentOS Stream 9 vsftpd本地用户设置

1、使用yum指令下载vsftpd yum install vsftpd2、创建wu用户&#xff0c;为ftp组的成员 useradd -g ftp wu3、设置一个密码 echo 1 |passwd --stdin wu4、修改本地用户目录的权限&#xff08;所有者为wu用户&#xff09; chown -R wu /data/wu5、创建本地用户的信息数据存放…

领导VS管理:技术团队掌舵者的双重角色解析

文章目录 引言一、管理1.1 管理的定义1.2 管理的特点1.3 管理的作用 二、领导2.1 领导的定义2.2 领导的特点2.3 领导的作用 三、管理与领导的互补性3.1 互补策略 总结 引言 在科技飞速发展的今天&#xff0c;技术团队作为推动企业创新的核心力量&#xff0c;其管理显得尤为关键…

Quartus Cyclone I II III IVE 器件型号

玩耍了一个 EP2 型号的开发板&#xff0c;发现 安装的quartus13 没有Cyclone II 型号&#xff0c;经过探索发现了是版本不对。 https://www.intel.com/content/www/us/en/software-kit/711920/intel-quartus-ii-subscription-edition-design-software-version-13-0sp1-for-win…