当前位置: 首页 > news >正文

[笔记 自用]CAN总线通信配置

1.STM32配置

波特率 = (CAN时钟 / 分频系数) / (1+Quanta in Bit Segment 1 +Quanta in Bit Segment 2 )
高速通信(接120欧末端电阻)波特率为125kBits/s ~ 1MBits/s
在这里插入图片描述
中断启用FIFO 0 :
在这里插入图片描述

2.电路

直接用的TJA1050模块,使用示波器探头观察总线电压。
设置1s发送一次数据。
注意: 两个TJA1050 CAN收发器可以不共地,本身带有隔离功能。但是需要5V供电。

波形为总线CANH 和 CANL的电压差
总线上只有发送机时的波形(一直在尝试重发):
在这里插入图片描述

总线上有接收机时:
在这里插入图片描述
在这里插入图片描述
接口:
PA11 -> RXD
PA12 -> TXD
TJA1050模块供电接5V,两个STM32使用不同的GND。

3.代码

不包含HAL库已经生成的部分

#define TXMODE 0 //控制接收还是发送
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[10] = {24,26,29,51,99,110,240,12,0,21};/*发送的数据*/
int8_t SendFlag = 0;//发送成功标志
uint32_t TxMailbox=0;
uint8_t ERROR_LIST[20]={0};//故障列表
uint8_t RxData[10]={0};//接收机缓冲区
uint8_t can_data_received = 0;
uint32_t can_receive_count=0; //成功接到标志
CAN_RxHeaderTypeDef RxHeader;
/* 设置过滤器 */
void CAN_Filter_Config(void)
{CAN_FilterTypeDef can_filter;can_filter.FilterBank = 0;                       // 使用筛选器银行0can_filter.FilterMode = CAN_FILTERMODE_IDMASK;   // 掩码模式can_filter.FilterScale = CAN_FILTERSCALE_32BIT;  // 32位模式// 配置为接收所有标准ID报文  接收机只接收ID为0x12的信息can_filter.FilterIdHigh = 0x12<<5;  //筛选器高16位 // 32位筛选器中 高11位是标准IDcan_filter.FilterIdLow =  0x0000;   //筛选器低16位 // 32位筛选器中 高11位是标准IDcan_filter.FilterMaskIdHigh = 0B11111111111<<5;    // 掩码高16位 - 0表示不关心  这里严格匹配11位的每一位标准ID 如果填写0B1111<<5 那就是只匹配最高的位IDcan_filter.FilterMaskIdLow =  0x0000;             // 掩码低16位 - 0表示不关心can_filter.FilterFIFOAssignment = CAN_FILTER_FIFO0; // 分配到FIFO0can_filter.FilterActivation = ENABLE;            // 使能筛选器can_filter.SlaveStartFilterBank = 14;            // 从筛选器银行14开始if (HAL_CAN_ConfigFilter(&hcan, &can_filter) != HAL_OK){ERROR_LIST[0]=1;Error_Handler();}
}void CAN_Receive_Init(void)
{/* 接收机中断初始化 */if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK){//接收FIFO 0ERROR_LIST[2]=1; Error_Handler();}
}void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcanp)//中断回调函数
{// 从FIFO0读取接收到的报文if (HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK){can_receive_count++;if( can_receive_count>1000000 ){can_receive_count=0;}//记录通信成功次数// 闪烁LED指示数据接收HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);// 这里可以添加数据处理代码// 例如:解析接收到的数据,根据ID执行不同操作等}
}void CAN_SendMessage(uint32_t id, uint8_t* data, uint8_t length)
{// 配置发送头TxHeader.StdId = id;           // 标准IDTxHeader.ExtId = 0;            // 扩展ID(标准帧时设为0)TxHeader.IDE = CAN_ID_STD;     // 标准帧TxHeader.RTR = CAN_RTR_DATA;   // 数据帧TxHeader.DLC = length;         // 数据长度(0-8)// 发送消息if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, data , &TxMailbox) == HAL_OK){// 闪烁LED指示发送成功HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);}else{// LED快速闪烁表示发送错误HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);HAL_Delay(50);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);}
}int main(void)
{/* USER CODE BEGIN 1 */uint8_t i=0;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_CAN_Init();/* USER CODE BEGIN 2 */CAN_Filter_Config();//初始化筛选器HAL_CAN_Start(&hcan); //启动CAN收发器
#if (TXMODE==0)CAN_Receive_Init(); // 初始化CAN接收中断
#endifi=0;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */
#if (TXMODE==1)i++;if(i>3){i=0;}CAN_SendMessage( (0x12), TxData, 2);//发送数组前两个数据 数据识别ID为0x12HAL_Delay(1000);
#endif}/* USER CODE END 3 */
}

5.运行效果

在这里插入图片描述

http://www.dtcms.com/a/473918.html

相关文章:

  • HTML 教程
  • 用自己服务器做网站用备案怎样在亚马逊网上开店
  • PHP操作elasticsearch7.8
  • 学校网站建设需求分析哪个小说网站可以做封面
  • 网站制作类软件推荐莆田网站格在哪里做
  • TypeScript 面试题及详细答案 100题 (21-30)-- 接口(Interface)
  • 承德网站新手怎么做网络推广
  • 6. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--渐进式学习闭环:从反馈到再训练
  • 2.c++面向对象(五)
  • python中的一些运算符
  • 【嵌入式面试题】boss收集的11道,持续更新中
  • 保证样式稿高度还原
  • 网站建设 源码怎么注册公司名
  • [xboard] 34 buildroot 的overlay机制
  • 某公司站点的挖掘实战分享
  • 第三方和审核场景回调还是主动查询
  • Git基本命令的使用(超详细)
  • NC40 链表相加(二)
  • 网安面试题收集(3)
  • JetLinks设备接入的认识与理解
  • 从HashMap到ConcurrentHashMap深入剖析Java并发容器的演进与实战
  • 做一组静态页面网站多少钱网站源码上传到哪个文件夹
  • 威海市城乡建设局网站网络整合营销服务商
  • 从报头到路由器——【网络编程】详解 IP 协议:报头字段、路由器功能、网段划分和分片传输
  • 网站验证北京建网站开发
  • 设计模式篇之 装饰器模式 Decorator
  • 虚幻引擎虚拟制片入门教程 之 创建项目及启用插件
  • 淳安县建设网站王璞网站开发实战答案
  • Linux禁用自带键盘和触摸板(无需每次开机重置)
  • 149、【OS】【Nuttx】【周边】效果呈现方案解析:VSCode 打开外部链接(二)