【通讯协议备忘录】stm32的CAN外设

news2025/1/11 0:40:06

文章目录

  • 帧结构
  • 测试模式(静默/换回/环回静默):
    • 环回测试配置
  • 过滤器的使用
  • 测试参考用例
    • 过滤器的初始化
    • 发送和接收
  • 中断

帧结构

  • CAN的报文结构:
    在这里插入图片描述

测试模式(静默/换回/环回静默):

  • 静默模式:
    在这里插入图片描述
  • 环回模式:
    在这里插入图片描述
    在这里插入图片描述
  • 环回静默模式:
    在这里插入图片描述

环回测试配置

  • 选好对应GPIO即可,APB1 36 Mhz, 500kbps:
    在这里插入图片描述

过滤器的使用

  • 不配置过滤器亦可使用
  • 根据不同位长模式,每个过滤器组,32位模式可以配置一个屏蔽掩码或两个白名单列表,16位模式翻倍
  • 标准帧和扩展帧的ID长度分别为11比特和29比特,通过移位操作对齐其对应的高低位
    在这里插入图片描述

测试参考用例

过滤器的初始化

  • cube不能配置过滤器,需要手动配置,直接添加到生成代码的自定义区即可
  • 初始化后需要手动打开CAN外设
  • 单机测试使用了环回模式
static void MX_CAN_Init(void)
{

  /* USER CODE BEGIN CAN_Init 0 */

  /* USER CODE END CAN_Init 0 */

  /* USER CODE BEGIN CAN_Init 1 */

  /* USER CODE END CAN_Init 1 */
  hcan.Instance = CAN1;
  hcan.Init.Prescaler = 4;
  hcan.Init.Mode = CAN_MODE_LOOPBACK;
  hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan.Init.TimeSeg1 = CAN_BS1_9TQ;
  hcan.Init.TimeSeg2 = CAN_BS2_8TQ;
  hcan.Init.TimeTriggeredMode = DISABLE;
  hcan.Init.AutoBusOff = DISABLE;
  hcan.Init.AutoWakeUp = DISABLE;
  hcan.Init.AutoRetransmission = DISABLE;
  hcan.Init.ReceiveFifoLocked = DISABLE;
  hcan.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN CAN_Init 2 */
  //接收所有
	CAN_FilterTypeDef can_filterconfig;
	can_filterconfig.FilterMode = CAN_FILTERMODE_IDMASK;
	can_filterconfig.FilterScale = CAN_FILTERSCALE_32BIT;
	can_filterconfig.FilterIdHigh = 0;
	can_filterconfig.FilterIdLow = 0;
	can_filterconfig.FilterMaskIdHigh = 0;
	can_filterconfig.FilterMaskIdLow = 0;
	can_filterconfig.FilterBank = 0;
	can_filterconfig.FilterFIFOAssignment = CAN_FilterFIFO0;
	can_filterconfig.FilterActivation = CAN_FILTER_ENABLE;
	can_filterconfig.SlaveStartFilterBank = 14;
	HAL_CAN_ConfigFilter(&hcan, &can_filterconfig);
	
	HAL_CAN_Start(&hcan);
  /* USER CODE END CAN_Init 2 */
}

发送和接收

uint8_t can_send_message(CAN_TxHeaderTypeDef TxHeader,uint32_t std_id, uint8_t aData[],uint16_t lengh)
{
  uint32_t TxMailBox = CAN_TX_MAILBOX0;
  uint8_t FreeTxMailBoxNum = 0;
 
  TxHeader.StdId = std_id; 			//id由IDE决定类型
  TxHeader.ExtId = 0; 				
  TxHeader.DLC = lengh;  			//数据长度
  TxHeader.IDE = CAN_ID_STD;   		//标准帧/扩展帧
  TxHeader.RTR = CAN_RTR_DATA; 		//数据帧
  TxHeader.TransmitGlobalTime = DISABLE;
 
  while(0 == FreeTxMailBoxNum)
  {
   FreeTxMailBoxNum = HAL_CAN_GetTxMailboxesFreeLevel(&hcan);
  }
 
  if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, aData, &TxMailBox) != HAL_OK)
  {
    /* Transmission request Error */
    Error_Handler();
  }
 return 1;
}

uint8_t can_receive_message(uint8_t *buf)
{
	if(HAL_CAN_GetRxFifoFillLevel(&hcan,CAN_RX_FIFO0) == 0)
		return 0;
	
	HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &canRxType, buf);
	return canRxType.DLC;
}

中断

在这里插入图片描述
四个中断源分别对应cube的四个选项:
在这里插入图片描述
手动中断开启函数:

	HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING);

中断回调函数:

void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
	if(hcan->Instance == CAN1)
	{
		HAL_CAN_GetRxMessage(&hcan, CAN_FILTER_FIFO0,&canRxType,canRxbuf);
	}
}

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

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

相关文章

Apache(httpd) 搭建笔记

Apache 搭建笔记 安装Apache HTTP服务器:启动Apache服务并设置开机自启 配置SSL证书配置Apache的SSL虚拟主机:重启Apache服务以使更改生效: 多站点配置第一个虚拟主机配置第二个虚拟主机创建每个站点的根目录: 强制跳转http>&g…

mysql及事务隔离级别

目录 一 事务之间相互影响分为几种 二 mysql常见的储存引擎 三 死锁 四 查看使用的储存引擎 五 修改储存引擎 六 总结 一 事务之间相互影响分为几种 脏读:就是读取了没有提交的数据, 不可重复读 :前后多次读取内容不一致 幻读:两次读的结果不一样 丢失更新:后一个会覆…

哈夫曼编码(霍夫曼、赫夫曼)

一、发展历史 哈夫曼使用自底向上的方法构建二叉树。 哈夫曼编码的基本方法是先对图像数据扫描一遍,计算出各种像素出现的概率,按概率的大小指定不同长度的唯一码字(这种长度不同的编码方式称为变长编码,对应的长度相同的编码方…

关闭Vue CLI(脚手架)中的语法检查

1.创建一个名为vue.config.js的文件,与package.json文件平级 参考官方文档:Home | Vue CLI (vuejs.org) 2.将下面代码复制进vue.config.js文件中 module.exports{lintOnSave:false;//关闭语法检查 }

c++计算贝塞尔曲线(折线平滑为曲线)坐标方法

效果可查看上一篇博文&#xff1a;js手动画平滑曲线&#xff0c;贝塞尔曲线拟合【代码】js手动画平滑曲线&#xff0c;贝塞尔曲线拟合。https://blog.csdn.net/qiufeng_xinqing/article/details/131711963?spm1001.2014.3001.5502 代码如下&#xff1a; #include <cmath&…

10.6.1 【Linux】撷取命令: cut, grep

cut cut 主要的用途在于将“同一行里面的数据进行分解&#xff01;”最常使用在分析一些数据或文字数据的时候。这是因为有时候我们会以某些字符当作分区的参数&#xff0c;然后来将数据加以切割&#xff0c;以取得我们所需要的数据。 grep 10.6.2 排序命令&#xff1a; sort,…

最火爆的大模型框架LangChain七大核心及案例剖析上(一)

最火爆的大模型框架LangChain七大核心及案例剖析上 10.1 Models解析及案例剖析 本节正式进入当前开源界最火爆的大模型开发框架LangChain的部分,会讲解整个LangChain解决的问题及它的工作机制,通过一个“LangChain GPT内容创建者”(“LangChain GPT Content Creator”)的具体…

第九章:RefineNet——多路径细化网络用于高分辨率语义分割

0.摘要 最近&#xff0c;非常深的卷积神经网络&#xff08;CNN&#xff09;在目标识别方面表现出色&#xff0c;并且也是密集分类问题&#xff08;如语义分割&#xff09;的首选。然而&#xff0c;在深度CNN中&#xff0c;重复的子采样操作&#xff08;如池化或卷积跳跃&#x…

Matplotlib figure图形对象

通过前面的学习&#xff0c;我们知道matplotlib.pyplot模块能够快速地生成图像&#xff0c;但如果使用面向对象的编程思想&#xff0c;我们就可以更好地控制和自定义图像。 在 Matplotlib 中&#xff0c;面向对象编程的核心思想是创建图形对象&#xff08;figure object&#…

第十三章——类继承

面向对象编程的主要目的之一是提供可重用的代码。&#xff08;重用经过测试的代码比重新编写代码要好的多&#xff09; C类提供了更高层次的重用性。很多厂商提供了类库&#xff0c;类组合了数据表示和类方法&#xff0c;因此提供了比函数库更加完整的程序包。通常类库是以源代…

文件IO_文件读写(附Linux-5.15.10内核源码分析)

目录 1.什么是文件偏移量&#xff1f; 1.1 文件偏移量介绍 1.2 文件偏移量重点 1.3 文件偏移量工作原理 2.文件偏移量设置 2.1 lseek函数 2.2 lseek内核源码分析 3.写文件 3.1 write函数 3.2 write内核源码分析 4.读文件 4.1 read函数 4.2 read内核源码分析 5.文…

物流难统计、难管理?学会这招,问题迎刃而解

在当今数字化的时代&#xff0c;商家面临着诸多物流挑战。物流数据人工统计成本高、管理难、决策难是很常见的问题。本文将探讨如何通过智能数据分析解决这些问题&#xff0c;帮助商家提升物流效率和管理能力。 物流数据人工统计&#xff0c;难决策 物流数据沉淀全靠人工线下…

Vue3_简介、CompositionVPI、新的组件

文章目录 Vue3快速上手1.Vue3简介2.Vue3带来了什么1.性能的提升2.源码的升级3.拥抱TypeScript4.新的特性 一、创建Vue3.0工程1.使用 vue-cli 创建2.使用 vite 创建 二、常用 Composition API1.拉开序幕的setup2.ref函数3.reactive函数4.Vue3.0中的响应式原理vue2.x的响应式Vue3…

labview实现呼吸灯颜色渐变效果

呼吸灯效果具有美好的视觉观感&#xff0c;前一段时期感受了一位大佬在MCU中实现呼吸灯颜色渐变效果&#xff0c;很是震撼。这引起了我的兴趣&#xff0c;本文则是实现一种呼吸灯效果(主要在于颜色的渐变体现)。 程序整体视图 程序框图 公式节点程序 int red_is_0 red 0 ?…

探索MR与AIGC技术的发展机遇:教育、医疗领域的前景展望

在当今科技迅猛发展的时代&#xff0c;混合现实&#xff08;MR&#xff09;和增强智能生成创作&#xff08;AIGC&#xff09;技术正逐渐成为教育、医疗领域中的关键驱动力。这两项前沿技术的结合为我们带来了无限的可能性和创新的机遇。 MR技术在教育领域中的发展与机遇是广泛而…

非洲秃鹫优化算法(AVOA)(含MATLAB代码)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

LayUI框架实现OA会议系统——增删改查

目录 前言 1. 配置准备 1.1 Layui框架 1.2 mysql数据库表 1.3 用户管理JSP页面 1.4 新增、修改用户共用界面 2. 后台编写 2.1 编写UserDao类增删改查方法 2.2 R工具类 2.3 BaseDao数据库查询方法 2.4 UserAction控制器类 3. 前台JS编写 3.1 userManage页面JS 3.2…

测试报告?Python自动化测试-Allure测试报告使用大全,一篇全通透

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 安装并配置环境变…

工业相机的基础参数释义

景深&#xff1a; 可以清晰拍摄被测物的距离范围。 工作距离&#xff1a; 相机镜头至被测物的距离。 物像距离&#xff1a; 被测物至芯片靶面的距离。 像元尺寸&#xff1a; 一个像素在长和宽方向上所代表的实际大小&#xff0c;单位通常为微米。像元尺寸越大&#xff0c;分辨率…

记录stm32c8t6使用TIM4_CH1、TIM4_CH2输出PWM波控制编码电机出现的问题

由于之前是使用PB9、PB7引脚即TIM4_ch3\TIM4_ch4&#xff0c;由于项目更改为c8t6的PB、PB7引脚&#xff08;TIM4_ch3\TIM4_ch4&#xff09; 改为配置后发现只有一边的轮子可以转到&#xff0c;明明配置没什么问题&#xff0c;编译也没有报错&#xff0c;最后将pwm的调制模式更改…