CAN静默回环模式测试

2023-12-19 04:15
文章标签 模式 测试 回环 静默

本文主要是介绍CAN静默回环模式测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文章主要用于 看自己写的CAN协议代码是否正确 然后因为只有一块板子,不能通信的情况

can.h

#ifndef __CAN_H
#define __CAN_H#include "head.h"extern FlagStatus can0_receive_flag;
extern FlagStatus can0_error_flag;
extern can_trasnmit_message_struct transmit_message;
extern can_receive_message_struct receive_message;void CAN0_init(void);
#endif

can.c

#include "can.h"FlagStatus can0_receive_flag=RESET;
FlagStatus can0_error_flag=RESET;
can_trasnmit_message_struct transmit_message;
can_receive_message_struct receive_message;void CAN0_init(void)
{can_parameter_struct can_parameter;can_filter_parameter_struct can_filter;//使能CAN0和GPIOA的时钟rcu_periph_clock_enable(RCU_CAN0);rcu_periph_clock_enable(RCU_GPIOA);//配置GPIO口,CAN0_RX:PA11  CAN0_TX:PA12gpio_init(GPIOA,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_11);gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_12);//NVIC中断配置nvic_irq_enable(USBD_LP_CAN0_RX0_IRQn ,0,0);//初始化CAN0参数can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);can_deinit(CAN0);can_parameter.time_triggered = DISABLE;//非时间触发通信模式can_parameter.auto_bus_off_recovery = DISABLE;//软件自动离线管理can_parameter.auto_wake_up = DISABLE;//睡眠模式通过软件唤醒can_parameter.auto_retrans = ENABLE;//报文自动重传can_parameter.rec_fifo_overwrite = DISABLE;//报文不锁定,新的覆盖旧的can_parameter.trans_fifo_order = DISABLE;can_parameter.working_mode = CAN_SILENT_LOOPBACK_MODE;//四种通信模式:正常,回环,静默,回环静默can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;//重新同步跳跃宽度can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;//时间段 1 占用时间单位can_parameter.time_segment_2 = CAN_BT_BS2_4TQ;//时间段 2 占用时间单位can_parameter.prescaler = 6;/* 1MBps */can_init(CAN0, &can_parameter);//初始化CAN过滤器,不过滤任何IDcan_struct_para_init(CAN_INIT_STRUCT, &can_filter);can_filter.filter_number=0;can_filter.filter_mode = CAN_FILTERMODE_MASK;can_filter.filter_bits = CAN_FILTERBITS_32BIT;can_filter.filter_list_high = 0x0000;can_filter.filter_list_low = 0x0000;can_filter.filter_mask_high = 0x0000;can_filter.filter_mask_low = 0x0000;can_filter.filter_fifo_number = CAN_FIFO0;can_filter.filter_enable = ENABLE;can_filter_init(&can_filter);//使能接收中断,receive FIFO0 not empty interrupt enablecan_interrupt_enable(CAN0, CAN_INT_RFNE0);
}/************************************函数功能描述************************************************
Function Name : USBD_LP_CAN0_RX0_IRQHandler(void)
Description   : CAN0的接收中断,如果接收到指定的数据则让can0_receive_flag置1,否则can0_error_flag置1
Input         : 无
Output        : 无
*************************************************************************************************
例如,初始化发送结构体,发送完毕之后就会进入中断
transmit_message.tx_sfid = 0x300>>1;
transmit_message.tx_efid = 0x00;
transmit_message.tx_ft = CAN_FT_DATA;//帧的类型:数据帧或者遥控帧
transmit_message.tx_ff = CAN_FF_STANDARD;//帧的格式:标准帧或者拓展帧
transmit_message.tx_dlen = 2;
transmit_message.tx_data[0] = 0x55;
transmit_message.tx_data[1] = 0xAA;
can_message_transmit(CAN0, &transmit_message);
*************************************************************************************************/
void USBD_LP_CAN0_RX0_IRQHandler(void)
{/* check the receive message */can_message_receive(CAN0, CAN_FIFO0, &receive_message);if((0x300>>1 == receive_message.rx_sfid)&&(CAN_FF_STANDARD == receive_message.rx_ff)&&(2 == receive_message.rx_dlen)){can0_receive_flag = SET; }else{can0_error_flag = SET; }
}

这篇关于CAN静默回环模式测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510864

相关文章

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)