学习CAN协议(二):使用CAN发送数据

news2024/11/20 7:18:00

相关文章

学习CAN协议(一):CAN协议简介

学习CAN协议(二):使用CAN发送数据

学习CAN协议(三):使用CAN接收数据

目录

一、配置CubeMX

二、代码编写

CAN的发送示例代码

实机演示


本文主要讲述如何使用STM32 CubeMX配置和使用CAN发送一包数据。

示例芯片:STM32F103C8T6

所用库:HAL库

一、配置CubeMX

1、配置RCC的HSE为外部时钟。

2、配置时钟树,PCLK1是CAN口使用的时钟频率。

3、开启CAN通信,我这里使用的波特率为500KHZ,波特率=PCLK1/Prescaler/(time1+time2+1)

在这里为16MHZ/8=2MHZ   2MHZ/(1+2+1)=500KHZ 

4、生成工程文件

二、代码编写

1、启动CAN通信。

HAL_CAN_Start(CAN_HandleTypeDef *hcan)

需要一个参数,这个参数为CAN通信的句柄,可以追进 MX_CAN_Init 函数中找到

这可看见句柄为 hcan (有的单片机有两组CAN口,所以可能分 hcan1 和 hcan2 ),因为参数是指针类型,所以使用时要加 取地址符 &

HAL_CAN_Start(&hcan);

2、编写一个CAN发送函数

2.1  CAN的发送函数

追进 HAL_CAN_Start 函数,往上划一下可以看到一块注释,里面详细说明了CAN通信的控制函数。

 

HAL_CAN_Start :启动CAN模块

HAL_CAN_Stop :停止CAN模块

HAL_CAN_RequestSleep:进入休眠模式

HAL_CAN_WakeUp:从休眠模式中唤醒

HAL_CAN_IsSleepActive :检查睡眠模式是否激活

HAL_CAN_AddTxMessage :向Tx邮箱添加消息,并激活相应的传输请求

HAL_CAN_AbortTxRequest :中止传输请求

HAL_CAN_GetTxMailboxesFreeLevel:返回发送数据数量

HAL_CAN_IsTxMessagePending:检查是否有传输请求,在选定的Tx邮箱上挂起

HAL_CAN_GetRxMessage :获取CAN消息

HAL_CAN_GetRxFifoFillLevel :返回接收数据数量

由此可以找到 HAL_CAN_AddTxMessage 是发送数据的函数

HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, 
    const CAN_TxHeaderTypeDef *pHeader,const uint8_t aData[], uint32_t *pTxMailbox)

第一个参数是句柄,

第二个参数为一个 CAN_TxHeaderTypeDef 结构体类型的消息头部,

第三个参数的要发送的数据,

第四个参数为返回值,返回一个发送的邮箱号

 2.2 编写消息头部

因为第二个参数为一个 CAN_TxHeaderTypeDef 结构体类型的消息头部,因此我们要先定义一个这个结构体类型的变量,并进行初始化。

先找到这个结构体

通过追源码找个这个结构体,结构体里面有六个成员:

StdId:表示标准ID,范围为 0~0x7FF;

ExtId:表示扩展ID,范围为 0~0x1FFFFFFF;

IDE:表示传输的消息类型,CAN_ID_STD 表示传输消息为标准帧 CAN_ID_EXT 表示传输消息为扩展帧。

RTR:用来表示区分普通消息和控制命令,CAN_RTR_DATA 表示消息为数据,CAN_RTR_REMOTE 表示消息为控制信号

 DLC:表示消息长度,大小为0~8个字节。

TransmitGlobalTime:是否添加时间戳, 启用:ENABLE  禁用:DISABLE

知道了这些信息,我们就可以自己写一个CAN的发送函数了

CAN的发送示例代码

uint32_t mail=0;

void CAN_SEND(uint8_t *buf,int len)
{
	if(len>8) //发送字节数不能超过8字节
		len=8;
	
	CAN_TxHeaderTypeDef txHead;
	txHead.ExtId=0x1234578;    // 设置扩展ID
	txHead.IDE=CAN_ID_EXT;     
	txHead.RTR=CAN_RTR_DATA;		// 表示发送的为数据
	txHead.DLC=len;							//发送数据的长度
	txHead.TransmitGlobalTime=DISABLE;
	
	HAL_CAN_AddTxMessage(&hcan,&txHead,buf,&mail);

}

如果要使用,我们直接调用这个接口就可以

CAN_SEND("hello",5); //发送一个 hello ,长度5字节

实机演示

可以看一下这位up主的视频

2 STM32的CAN发送_哔哩哔哩_bilibili

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

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

相关文章

数据资产的创新应用与未来展望:探讨数据资产在人工智能、物联网等新兴领域的应用前景,提出前瞻性的数据资产解决方案,为企业探索新的增长点,推动行业创新发展

目录 一、引言 二、数据资产在人工智能领域的应用 1、机器学习与深度学习 2、自然语言处理 3、计算机视觉 三、数据资产在物联网领域的应用 1、智能家居 2、工业物联网 3、智慧城市 四、前瞻性的数据资产解决方案 1、构建统一的数据管理平台 2、加强数据安全和隐私…

SAAM架构-系统架构师(十九)

1、(重点)(问题1)针对最终架构而非详细设计进行评估。(问题2)用于分析多种质量属性之间的折中。 问题1 A SAAM B ATAM C CBAM D SAEM 问题2 A SAAM B ATAM C CBAM D SAEM 解析: SAAM针…

3.js - MeshPhysicalMaterial - 虹彩效果

效果图 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入tween impor…

控制台厂家的创新设计主要体现在哪几方面

在当今科技飞速发展的时代,控制台厂家面临着不断变化的市场需求和激烈的竞争,创新设计成为了他们脱颖而出的关键。这些创新设计主要体现在以下几个引人注目的方面: 人体工程学的深度融合是一大亮点。控制台厂家充分考虑操作人员长时间工作的实…

JsonCpp:更简洁的序列化及反序列化

简介 jsoncpp 提供了一组简单易用的 API&#xff0c;使得在 C 程序中处理 JSON 数据变得更加方便和高效。 安装 linux环境下安装jsoncpp sudo apt-get update sudo apt-get install --reinstall libjsoncpp-dev建立软链接确保编译器找到头文件 #include <json/json.h>…

华为HCIP Datacom H12-821 卷19

1.多选题 如图所示,RTA 的 GE0/0/0、GE0/0/1 接口分别连接部门 1 和 2,其网段分别为 10.1.2.0/24、 10.1.3.0/24 网段,为限制部门 1 和 2 之间的相互访问,在 RTA 上部署 traffic-filter,以下哪些部署方式是正 确? A、配置 ACL3000 拒绝源为 10.1.2.0/24 目的为 10.1.3.0…

智谱AI ChatGLM-4使用教程:函数调用Function calling(赠送免费500w token)

文章目录 智谱AI介绍ChatGLM介绍token资源包函数调用能力编写函数参数列表的 `JSON` 描述函数调用选择Function Call 流程实践智谱AI介绍 北京智谱华章科技有限公司(简称“智谱AI”)致力于打造新一代认知智能大模型,专注于做大模型的中国创新。公司合作研发了中英双语千亿级…

剑神诀_单机架设_无需虚拟机_小白专用

前言 今天给大家带来一款单机游戏的架设&#xff1a;剑神诀&#xff0c;一键端 无需虚拟机 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; 剑神诀 搭建教程 此游戏架设不需要安装虚拟机&#xff0c;…

大会员体系是如何让积分流动起来,实现跨业态引流的?

积分&#xff0c;是大会员体系建设的重点&#xff0c;也是难点之一。 假设积分跨业态或者跨品牌流通&#xff0c;但没有一套统一的积分结算体系&#xff0c;就容易出现各业态或品牌利益分配不均的问题。 因此&#xff0c;大会员体系能有效落地的重点之一&#xff1a;集团必须…

AI绘画Stable Diffusion 双重曝光-神秘意境和难以言喻的视觉体验,SD提示词轻松搞定

大家好&#xff0c;我是画画的小强 今天给大家介绍AIGC绘图提示语使用常见摄影手法&#xff1a;双重曝光。双重曝光摄影效果是一种摄影爱好所热衷的常见摄影手法之一。通过双重曝光摄影手法&#xff0c;能够为图同摄影图像引入神秘的意境感和一种难以言喻的视觉体验&#xff0…

python基础_类

在Python中&#xff0c;类&#xff08;Class&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念之一。类提供了一种创建新对象的模板&#xff0c;这些对象通常被称为类的实例或对象。以下是关于Python类的一些关键点和特性&#xff1a; 定义类 类通过class关键…

Swagger php注解常用语法梳理

Swagger php注解常用语法梳理 快速编写你的 RESTFUL API 接口文档工具&#xff0c;通过注释定义接口和模型&#xff0c;可以和代码文件放置一起&#xff0c;也可以单独文件存放。 Swagger 优势 通过代码注解定义文档&#xff0c;更容易保持代码文档的一致性模型复用&#xff0…

CSS 背景添加白色小圆点样式

css也是开发过程中不可忽视的技巧 此专栏用来纪录不常见优化页面样式的css代码 效果图: 未添加之前: 代码: background: radial-gradient(circle at 1px 1px, #3d3c3c 2px, transparent 0);background-size: 20px 25px;

Java代码生成器(开源版本)

一、在线地址 Java在线代码生成器&#xff1a;在线访问 二、页面截图 三、核心功能 支持Mybatis、MybatisPlus、Jpa代码生成使用 antlr4 解析SQL语句&#xff0c;保证了SQL解析的成功率支持自定义包名、作者名信息支持自定义方法名、接口地址支持自定义选择是否生成某个方法…

沃尔玛自养号测评:从入门到精通的全方位指南

沃尔玛测评自养号优势要点及IP环境搭建技术及主要可以归结为以下几个方面&#xff1a; 一、沃尔玛IP环境搭建技术 1.使用国外的服务器&#xff1a;为了确保测评活动的隐蔽性和安全性&#xff0c;卖家需要选择使用国外的服务器&#xff0c;并通过远程搭建一个安全终端防火墙。…

IDEA中Java源文件编译后class文件中文乱码

文章目录 一、设置 一、设置 路径&#xff1a;File -> Settings -> Bulid, Execution,Deployment -> Compiler -> Java Compiler

2024年度潍坊市职业技能大赛——网络搭建(网络与信息安全管理员)职业技能竞赛样题

2024年度潍坊市职业技能大赛 ——网络搭建&#xff08;网络与信息安全管理员&#xff09;职业技能竞赛样题 网络搭建职业技能竞赛组委会 2024年6月 一、项目简介 &#xff08;一&#xff09;竞赛须知 1.技能操作比赛时间150分钟&#xff0c;你需要合理分配时间。 2.如果没…

为什么越来越多的企业选择外包?赋能企业未来

软件开发过程包括设计需求、设计方案、产品研发、产品交付、后期维护&#xff0c;许多企业并沒有软件开发的专业能力与工作经验&#xff0c;将软件开发工作进行外包是比较节约成本的&#xff0c;企业能少走不少弯路。 YesPMP平台&#xff08;一站式软件外包、项目外包服务-YesP…

自适应站长跑路单页网站源码

跑路单页HTML源码自行修改文字就行了,上传到服务器里面运行即可&#xff0c;本地运行的话音乐会加载不出来&#xff0c;涉及到跨域问题 自适应站长跑路单页网站源码

ssm校园二手交易平台小程序

设计技术&#xff1a; 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMybatisSpringMvc微信小程序 工具&#xff1a;IDEA、Maven、Navicat 主要功能&#xff1a; (a) 管理员&#xff1b;管理员进入系统主要功能包括首页&#xff0c;个人中心&…