STM32F103ZET6+TJA1050 HAL CAN通讯笔记
CAN波特率 | 参数设置 |
---|---|
500K | CAN_Prescaler=12; |
CAN_SJW=CAN_SJW_1tq; | |
CAN_BS1=CAN_BS1_3tq; | |
CAN_BS2=CAN_BS2_2tq; |
由于CubeMX不会初始化过滤器,因此需要自己在can.c完成过滤器的配置,并在can.h中声明,然后在main函数中引用:
void CAN1_Config(void)
{CAN_FilterTypeDef CAN_FilterType;CAN_FilterType.FilterBank=0;CAN_FilterType.FilterIdHigh=0x0000;CAN_FilterType.FilterIdLow=0x0000;CAN_FilterType.FilterMaskIdHigh=0x0000;CAN_FilterType.FilterMaskIdLow=0x0000;CAN_FilterType.FilterFIFOAssignment=CAN_RX_FIFO0;CAN_FilterType.FilterMode=CAN_FILTERMODE_IDMASK;CAN_FilterType.FilterScale=CAN_FILTERSCALE_32BIT;CAN_FilterType.FilterActivation=ENABLE;CAN_FilterType.SlaveStartFilterBank=14;if(HAL_CAN_ConfigFilter(&hcan,&CAN_FilterType)!=HAL_OK)//过滤器初始化{Error_Handler();}if(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING)!=HAL_OK)//使能中断{Error_Handler();}if(HAL_CAN_Start(&hcan)!=HAL_OK)//启动CAN1{Error_Handler();}
}
如果需要发送CAN数据,则需要在can.c中定义发送数据函数,并在can.h中进行声明,然后在需要引用的地方对其进行引用(见例1):
/***********************************************
函数功能:向CAN总线发送数据
入口参数:IDE: 0:标准帧 , 1:扩展帧CANID: 帧IDLEN: 数据长度data: 数据
返回值:0:成功。1:失败
************************************************/
uint8_t Can_TxMessage(uint8_t IDE,uint32_t CANID,uint8_t LEN,uint8_t *data)
{uint32_t TxMailbox;CAN_TxHeaderTypeDef CAN_TxHeader;HAL_StatusTypeDef HAL_RetVal; uint16_t i=0;if(IDE == 0){CAN_TxHeader.IDE = CAN_ID_STD; //标准帧CAN_TxHeader.StdId = CANID;}else {CAN_TxHeader.IDE = CAN_ID_EXT; //扩展帧CAN_TxHeader.ExtId = CANID;}CAN_TxHeader.DLC = LEN;CAN_TxHeader.RTR = CAN_RTR_DATA;//数据帧,CAN_RTR_REMOTE遥控帧CAN_TxHeader.TransmitGlobalTime = DISABLE;while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0)//等待可用的发送邮箱{i++;if(i>0xfffe)return 1;}HAL_RetVal = HAL_CAN_AddTxMessage(&hcan,&CAN_TxHeader,data,&TxMailbox);//向发送邮箱添加需要发送的数据if(HAL_RetVal != HAL_OK)return 1;return 0;
}
如果需要接收来自CAN总线的信号,则需要在can.c中进行中断回调函数定义,同步在can.c中声明
uint8_t CAN_RxData[8]; CAN_RxHeaderTypeDef CAN_RxHeader;
在can.h中定义extern uint8_t CAN_RxData[8]; extern CAN_RxHeaderTypeDef CAN_RxHeader;
//CAN Rx中断回调函数,函数名称为系统默认名称"不可更改"
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{HAL_StatusTypeDef HAL_Retval;if(hcan->Instance==CAN1){HAL_Retval=HAL_CAN_GetRxMessage(hcan,CAN_FILTER_FIFO0,&CAN_RxHeader,CAN_RxData);//获取CAN总线数据if(HAL_Retval == HAL_OK){if(CAN_RxHeader.StdId==0x7E0) Can_TxMessage(0,0x7E8,8,CAN_RxData);//如果接收到CANID=7E0的信号则直接转发出来}}
}
例1,在main函数中的while循环中发送CAN消息
/* USER CODE BEGIN WHILE */
CAN1_Config(void);
uint8_t data[8]={0x22,0x02,0x03,0x04,0x00,0x00,0x00,0x00};//定义发送数组
uint8_t CANID=0x001;
uint8_t DLC=8;数据长度=8
uint8_t CANID_Type=0;//标准帧
while (1)
{Can_TxMessage(CANID_Type,CANID,DLC,data);//发送想要发送的报文数据HAL_Delay(10-1); //延时10ms
}
STM32F103ZET6+TJA1050 HAL CAN通讯笔记相关推荐
- STM32 HAL库学习笔记4-SPI
STM32 HAL库学习笔记4-SPI 前言 一.SPI协议简介 SPI物理层 SPI协议层 1.基本通讯过程 2. 通讯的起始和停止信号 3. 数据有效性 4. CPOL/CPHA 及通讯模式 二. ...
- C# Socket SSL通讯笔记
C# Socket SSL通讯笔记 一.x.509证书 1.制作证书 先进入到vs2005的命令行状态,即: 开始-->程序-->Microsoft Visual Studio 2005- ...
- STM32 HAL库学习笔记1-HAL库简介
STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...
- STM32F407霸天虎HAL库学习笔记——串口发送
STM32F407霸天虎HAL库学习笔记--串口收发 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 main函数 五.实验效果 一.软件准备 软件准备 二.硬件准备 ...
- HAL读写FLASH笔记
HAL读写FLASH笔记 目录 HAL读写FLASH笔记 1. 整理数据 2. 解锁 3.擦除扇区 4.写入数据 5.上锁 代码整理 写函数 读函数 注意 效果截图 1. 整理数据 FLASH写入函数 ...
- STM32 HAL库学习笔记2 HAL库介绍
STM32 HAL库学习笔记2 HAL库介绍 CMSIS标准 一.再次认识HAL库 HAL库设计思想 HAL库实现方式 以GPIO模块为例 GPIO外设数据类型 GPIO外设接口函数 二.使用HAL库 ...
- STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示
STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...
- HAL——硬件抽象层读书笔记
本章介绍了--HAL(硬件抽象层),建立在linux驱动之上的一套程序库.它并不属于linux内核,而是属于linux内核层之上的应用层. Google为了满足这些不想开源的linux驱动作者的要求, ...
- RS485_Modbus通讯笔记
前言 RS485由RS232和RS422发展而来,弥补了抗干扰能力差.通信距离短.速率低的缺点,增加了多点.双向通信能力,即允许多个发送器连接在同一条主线上,同时增加了发送器的驱动能力和冲突保护特性, ...
- TwinCAT3 ADS通讯笔记
文章目录 1.ADS通讯方式 2.ADS基本命令 3.ADS通讯方式 4.**PLC与高级语言变量对应 5.ADS错误码查询 6.ADS支持多线程 1.ADS通讯方式 ADS设备的内部地址或者变量与A ...
最新文章
- 【windwos bat】批量把windows下的wav文件转为raw文件
- 剑指 Offer 05. 替换空格(两种做法)
- 【重识 HTML + CSS】官方文档的阅读
- HIVE编程指南之HiveQL的学习笔记1
- ojdbc maven
- h5/uni-app打开手机app,没有则跳转到商店下载
- 证件照如何换背景颜色?这几个软件能免费帮你们制作证件照
- 搭建vue脚手架全教程
- 读书笔记之吴伯凡·认知方法论
- 量化交易让股市成为你的印钞机
- 我的框架-Unity3d中的用户数据储存模块UserDB
- 财务需要哪些计算机能力,建设财务共享中心,财务人员应具备哪些能力?
- java程序员月薪3万需要掌握哪些技术?技术水平需要到什么程度?
- Python爬虫实战之12306抢票开源
- SQL 字母大小写转换函数UPPER()、UCASE()、LOWER()和LCASE()
- 京东:按关键字搜索商品 API
- 彻底搞清楚STM32CubeMX生成工程再次下载后SWD无法使用问题
- springboot 实现redis高并发抢票服务
- 【牛客网】最小公倍数
- simon手册翻译_part1