CAN的回环测试实验

我只有一个STM32F429的开发板,所以这次我就做个回环测试.

1.先了解一下有关CAN的一些标准库,结构体

1.CAN初始化结构体---CAN_InitTypeDef

2.CAN发送及接收结构体--- CanTxMsg(发送结构体) CanRxMsg(接收结构体)

3.CAN筛选器结构体 --- CAN_FilterInitTypeDef

2.代码编写 以及我其中遇到的一些问题

//1.初始化GPIO

//2.初始化CAN的工作模式

//3.初始化接收FIFO

//4.初始化筛选器

//5.编写中断服务函数

这就是程序的大纲,下面我们一个一个来分析

1.初始化GPIO

这里我们板子上使用的PB9 PB8 来当作CAN的Tx Rx 使用它的复用功能

这里就是要注意我们复用功能要连接IO口到它的CAN_Tx 和 CAN_Rx

2.初始化CAN的工作模式

这里有几个要注意的

(1)  时钟开启 别弄错了  我们这是外设 使用的是APB1

(2) CAN的通讯速率我们就配置成 1Mbps 

计算过程就是 SS段+BS1+BS2 = 9Tq

5分频就是  =    45Mhz /5 = 9Mhz 

波特率 = 9Tq/9Mhz = 1Mbps

(3)我们使用的是CAN1

3.初始化筛选器

这里注意的如下:

(1)  一定要使能筛选器 ,不要以为我们不使能筛选器 什么数据都可以都可以接受到,其实是不使能筛选器,我们啥都接受不到了, 我第一次也被坑了

(2)就是配置这个ID和掩码

我们上面是使用ID列表模式 ,筛选器的尺度,我们使用的是32位

因为是小端模式 低位在前 ,所以我们是左移三位, 跳过了IDE RTR  0 这三位,

IDE是判断是否是 扩展帧还是 数据帧   RTR是判断是数据帧 还是 遥控帧

(我们这边是有宏定义的 直接把那几个位 或 上去就好了)

接着与上0xFFFF0000  取出 这高16位 向右移动16位 取出来 保存在 寄存器 最高位

 低16位的操作也差不多 就是我们 相与上0x0000FFFF 但是不用右移

(3)就是我们这里使用的是CAN1 他们公用的是同一个过滤器

(4)最后使能CAN FIFO0 通信中断

4.中断的编写

配置一下中断源  我们配置成CAN1的接收FIFO 0

5.发送和接收函数的编写

首先先初始化 Tx 和Rx的结构体

如果触发CAN1 FIFO0的中断 我们就把can_rx_flag 置 1  

并且使用CAN_Receive 把接收的数据存进 can_rx_msg这个结构体中

在while函数中 我们使用一个按键 函数 按下就发送数据  这里我们配置成数据帧 和扩展帧

最后现象

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

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

相关文章

HarmonyOS 和 OpenHarmony

HarmonyOS 和 OpenHarmony 支持的 shell 命令不同,因此有时候需要做一做区分,目前有些文档上没有标注,因此可能产生歧义。 HarmonyOS 支持 getprop: getprop hw_sc.build.os.apiversion # 查看API版本OpenHarmony 上支持 param…

Android Studio 通过 WIFI 调试手机 app

操作流程 首先第一步,PC 和手机都需要连在同一个局域网 WIFI。 第二步,手机 USB 连上 PC,确保能查看到通过 USB 连上的设备: >>adb devices List of devices attached CSXasjdhwjqwjhqdh device (最好只看到一个连上的设置…

SYS-2722音频分析仪SYS2722

181/2461/8938产品概述: Audio Precision 2722 音频分析仪是 Audio Precision 屡获殊荣的 PC 控制音频分析仪的旗舰型号,长期以来一直是音频设备设计和测试的全球公认标准。功能齐全的 SYS-2722 提供了测试转换器技术最新进展所需的无与伦比的失真和噪声…

Jetson nano部署Yolov8 安装Archiconda3+创建pytorch环境(详细教程+错误解决)

由于jetson nano 是aarch64架构,Anaconda官方不支持aarch64架构,所以有了一个叫“Archiconda”,其目的就是将conda移植到aarch64平台上 一. 下载地址Releases Archiconda/build-tools GitHub 然后安装archiconda bash Archiconda3-0.2.3…

基于 Java 的数据结构和算法 (不定期更新)

JavaIsBestLang 数据结构 Collection 是 Java 中的接口,被多个泛型容器接口所实现。在这里,Collection 是指代存放对象类型的数据结构。 ArrayList 函数名功能size()返回 this 的长度add(Integer val)在 this 尾部插入一个元素add(int idx, Integer …

PCL 点云的平面裁剪

目录 一、 算法概述二、代码示例三、输出结果一、 算法概述 适用:根据指定的box范围框来裁剪点云数据。(独创的思路,借用opencv内置的函数来实现点云数据在平面上的裁剪)。 二、代码示例 #include<iostream> #include<pcl/point_cloud.h> #include

Docker 中运行一个容器并查看其日志

要在 Docker 中运行一个容器并查看其日志&#xff0c;你可以按照以下步骤操作。首先&#xff0c;确保你已经正确构建了名为 blade-gateway 的 Docker 镜像。 运行容器: 使用 docker run 命令以后台模式&#xff08;-d 参数&#xff09;启动 blade-gateway 容器。这将返回一个容…

(学习日记)2024.03.31:UCOSIII第二十八节:消息队列常用函数

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

铸铁平台的平面度

铸铁平台的平面度是指平台的表面平整程度&#xff0c;即平台表面与其理论平面之间的最大偏差。平台的平面度通常使用国际标准符号GD&T中的平面度符号&#xff08;ⓨ&#xff09;表示&#xff0c;单位为毫米&#xff08;mm&#xff09;或微米&#xff08;μm&#xff09;。 …

KeyguardClockSwitch的父类

KeyguardClockSwitch 定义在KeyguardStatusView中, mClockView findViewById(R.id.keyguard_clock_container);KeyguardClockSwitch的父类为&#xff1a; Class Name: LinearLayout Class Name: KeyguardStatusView Class Name: NotificationPanelView Class Name: Notificat…

【PythonRS】基于GDAL遥感影像分幅裁剪(固定尺寸)

之前分享过一篇分幅裁剪的文章&#xff1a;【Python&RS】基于GDAL遥感影像分幅裁剪&#xff0c;只不过这篇文章当时编写的逻辑是自己输入需要裁剪多少行多少列&#xff0c;由于大家可能并没有直观地希望自己裁剪多少行列&#xff0c;所以非常局限。今天跟大家分享一下使用固…

蓝桥杯 - 穿越雷区

解题思路&#xff1a; dfs 方法一&#xff1a; import java.util.Scanner;public class Main {static char[][] a;static int[][] visited;static int[] dx { 0, 1, 0, -1 };static int[] dy { 1, 0, -1, 0 };static long min Long.MAX_VALUE;static long count 0;publi…

记第一次eudsrc拿到RCE(上)

目录 前言 个人介绍 挖洞公式 漏洞介绍 CLI命令注入介绍 RCE漏洞介绍 漏洞详情 漏洞点1 漏洞点2 修复建议 总结 前言 免责声明 以下漏洞均已经上报漏洞平台。请勿利用文章内的相关技术从事非法测试。若因此产生一切后果与本博客及本人无关。 本来想大学四年都不会…

Linux 线程:使用管理线程、多线程、分离线程

目录 一、使用线程 1、pthread_create创建线程 2、pthread_join等待线程 主线程获取新线程退出结果 获取新线程退出返回的数组 3、线程异常导致进程终止 4、pthread_exit 5、pthread_cancel 6、主线程可以取消新线程&#xff0c;新线程可以取消主线程吗 二、如何管理线…

Linux 常用命令(持续更新中...)

1. ls 查看文件列表命令 语法&#xff1a; ls [-a -l -h] [Linux路径] -a -l -h 是可选的选项 &#xff08;-h需配合-l命令一起使用&#xff09;Linux路径是此命令可选的参数 ls #查看当前目录所有非隐藏文件(平铺方式显示) ls -a #查看当前目录下所有文件 …

C++11 thread_local学习笔记

C11 thread_local thread_local 是 C11 中引入的关键字&#xff0c;用于声明线程局部存储变量。线程局部存储变量是一种在每个线程中都有其自己的独立实例的变量。每个线程都可以独立地访问和修改其线程局部存储变量&#xff0c;而不会影响其他线程的对应变量。 使用 thread_…

【stm32】I2C通信外设

【stm32】I2C通信外设 概念部分 如果简单应用&#xff0c;选择软件I2C。如果对性能指标要求比较高 选择硬件I2C 有硬件电路自动反转引脚电平&#xff0c;软件只需要写入控制寄存器CR和数据寄存器DR 为了实时监控时序的状态&#xff0c;还要读取状态寄存器SR 写入控制寄存器CR…

力扣刷题 二叉树遍历的统一迭代法

题干 给定一个二叉树的根节点 root &#xff0c;返回 它的 前中后序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root […

数据挖掘入门项目二手交易车价格预测之建模调参

文章目录 目标步骤1. 调整数据类型&#xff0c;减少数据在内存中占用的空间2. 使用线性回归来简单建模3. 五折交叉验证4. 模拟真实业务情况5. 绘制学习率曲线与验证曲线6. 嵌入式特征选择6. 非线性模型7. 模型调参&#xff08;1&#xff09; 贪心调参&#xff08;2&#xff09;…

fping命令

fping是一个用于网络扫描的工具&#xff0c;它可以在 Linux 系统上使用。fping可以发送 ICMP ECHO_REQUEST&#xff08;即 ping&#xff09;数据包到指定的网络地址范围&#xff0c;并等待响应。通过这种方式&#xff0c;fping可以用来检测哪些 IP 地址是活跃的。 可以测试多个…