【HMGD】STM32/GD32 CAN通信

news2024/10/5 15:31:46

各种通信协议速度分析

协议最高速度(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过滤器配置说明

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

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

相关文章

1.4 Mac 电脑 Clion 安装教程

目录 1 安装 2 激活 3 汉化 1 安装 去 https://www.jetbrains.com/clion/download/other.html 下载: 也可以直接到链接进行下载:https

DOS学习-目录与文件应用操作经典案例-comp

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 案例 1: 基本比较 案例 2: 十进制显示差异 案例 3: 字符形式显…

1-Django开端--学生管理系统

目录 项目结构 前端页面: add_data.html class_data.html index.html apps.py models.py views.py settings,py urls.py ...实现简略的身架... 项目结构 前端页面: add_data.html --添加数据. {% extends index/index.html %}{% block content %} <div class&qu…

基于机器学习的一线城市租房价格预测分析与实现,实现三种算法预测

本文旨在基于机器学习方法&#xff0c;对一线城市租房价格进行预测分析&#xff0c;并使用Matplotlib可视化、随机森林、一元线性回归和多元线性模型进行模型对比。通过爬取北京链家二手房数据作为研究对象&#xff0c;探讨了租房价格与各种因素之间的关系&#xff0c;阐述了研…

实时计算及异构计算随笔笔记

3、异构计算的典型应用 异构计算并不神秘&#xff0c;目前已渗透各个领域&#xff0c;不仅是PC领域&#xff0c;也包括了手持移动设备领域、行业领域&#xff0c;甚至是云计算、分布式计算领域。事实上&#xff0c;异构计算至少在应用端&#xff08;前台&#xff09;并不像它的…

【java程序设计期末复习】chapter4 类和对象

类和对象 编程语言的几个发展阶段 &#xff08;1&#xff09;面向机器语言 计算机处理信息的早期语言是所谓的机器语言&#xff0c;使用机器语言进行程序设计需要面向机器来编写代码&#xff0c;即需要针对不同的机器编写诸如0101 1100这样的指令序列。 &#xff08;2&#x…

【XSS CSRF 】访问时篡改密码——以DVWA-High为例

【XSS & CSRF 】泄露cookie——以DVWA-High为例-CSDN博客第一阶段 目录 前言 一、场景想定 二、过程步骤 1.High等级下的CSRF利用 2.XSSCSRF实现页面访问后密码被修改 三、最终利用——cookie可变下的admin密码修改 1.cookie可变 2.利用过程 总结 前言 第二阶段…

编写子函数+最大公约数和最小公倍数

目录 计算级数和 判断并找出非素数 主函数操作流程 求最大公约数和最小公倍数 编写子函数&#xff0c;该函数的功能是是计算下列级数和&#xff0c;并将和值返回主调函数输出。数据由主函数输入。 fun 函数 sum 函数 main 函数 注意事项 编写函数&#xff0c;该函数的…

C语言——malloc和free用法和常见误区

最近写了个关于动态数组的代码&#xff0c;遇到了一个大坑&#xff0c;特此记录 先说结论&#xff1a; 1.利用malloc创建堆空间&#xff0c;大小最好设置大一点&#xff0c;不然后面存进去的值需要的空间过大会导致各种的堆、指针问题 2.只能使用realloc对已经创建的空间进行修…

自定义类型:结构体详解

1.结构体 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。一个整型数组&#xff0c;它的每个数组元素只能是整型&#xff0c;字符型的数组它的每个元素只能是字符型。但是结构体的每个成员可以是各种不同类型的变量。 1.2结构的声明 //声明 struct t…

视频拼接融合产品的产品与架构设计(四)分布式GPU运算合并单元

上一篇如下 视频拼接融合产品的产品与架构设计(三&#xff09;内存和显存单元数据迁移 视频合并单元说明 对下面这张图做些说明&#xff0c;视频接入是比较常见&#xff0c;可以说是普通&#xff0c;但是做到接入后随即进行比较重的算法运算&#xff0c;这个在视频领域并不多…

海外抖音TK自动挂机,手机全自动挂机,每天轻松搞2张

海外抖音TK自动挂机&#xff0c;手机全自动挂机&#xff0c;每天轻松搞2张 课程获取方式&#xff1a; https://zzmbk.com/

linux系统部署Oracle11g:netca成功启动后1521端口未能启动问题

一、问题描述 执行netca命令&#xff0c;进入图形化界面&#xff0c;进行Oracle端口监听设置 #终端输入命令 netca 最终提示设置成功&#xff1a; 但是我们进行下一步“创建数据库”的时候会报错&#xff0c;说数据库端口1521未开启&#xff01; 二、问题处理 使用命令查看开…

ubuntu安装samba实现共享文件windows可查看ubuntu中的文件

samba的作用&#xff1a;实现共享linux/ubuntu系统中的文件&#xff0c;在windows直接查看操作ubuntu/linux中的文件、文件夹 1、安装samba sudo apt-get install samba如果不能安装samba&#xff0c;则更新apt-get sudo apt-get upgrade sudo apt-get update sudo apt-get d…

数据库攻防之MySQL

MySQL 是最流行的关系型数据库&#xff0c;与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库&#xff0c;因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库&#xff0c;…

Go 1.23 Release Notes编写方式改进!

2024.5.22日&#xff0c;Go 1.23 feature冻结&#xff01;Go团队开始Go 1.23rc1的冲刺&#xff0c;截至发文时&#xff0c;Go 1.23 milestone已经完成59%(https://github.com/golang/go/milestone/212)&#xff0c;还有188个open的issue待解决。 Go 1.23有哪些新feature&#x…

【java程序设计期末复习】chapter1 java入门

java入门 java的特点 &#xff08;1&#xff09;简单 Java要比C简单&#xff0c;C中许多容易混淆的概念&#xff0c;或者被Java弃之不用了&#xff0c;或者以一种更清楚更容易理解的方式实现 &#xff08;2&#xff09;面向对象 Java是面向对象的编程语言 &#xff08;3&…

[Vulnhub]Vulnix 通过NFS挂载+SSH公钥免密登录权限提升

端口扫描 Server IP AddressPorts Open192.168.8.103TCP:22/tcp, 25/tcp, 79/tcp, 110/tcp, 111/tcp, 143/tcp, 512/tcp, 513/tcp, 514/tcp, 993/tcp, 995/tcp, 2049/tcp, 37522/tcp, 42172/tcp, 43219/tcp, 47279/tcp, 54227/tcp $ nmap -p- 192.168.8.103 -sV -sC --min-ra…

学 Python 具体能干什么?

Python 是一种功能强大、用途广泛的编程语言&#xff0c;因其简洁易读的语法和丰富的库生态系统而备受欢迎。学习 Python后&#xff0c;你可以从事以下几方面的工作&#xff1a; 1. Web 开发 Python 有很多流行的 Web 框架&#xff0c;如&#xff1a; Django&#xff1a;一个…

导弹初识(一)

目录 导弹初识1 导弹是什么2 导弹的分类2.1 按飞行方式2.2 按发射/目标2.2.1 空空导弹2.2.1 空地导弹2.2.1 地空导弹2.2.1 地地导弹 2.3 按打击目标 3.实例3.1 防空导弹3.2 低空防空导弹武器系统 本文节选自 zh&#xff0c;还有百度百科 导弹初识 1 导弹是什么 导弹两个字拆…