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通讯笔记相关推荐

  1. STM32 HAL库学习笔记4-SPI

    STM32 HAL库学习笔记4-SPI 前言 一.SPI协议简介 SPI物理层 SPI协议层 1.基本通讯过程 2. 通讯的起始和停止信号 3. 数据有效性 4. CPOL/CPHA 及通讯模式 二. ...

  2. C# Socket SSL通讯笔记

    C# Socket SSL通讯笔记 一.x.509证书 1.制作证书 先进入到vs2005的命令行状态,即: 开始-->程序-->Microsoft Visual Studio 2005- ...

  3. STM32 HAL库学习笔记1-HAL库简介

    STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...

  4. STM32F407霸天虎HAL库学习笔记——串口发送

    STM32F407霸天虎HAL库学习笔记--串口收发 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 main函数 五.实验效果 一.软件准备 软件准备 二.硬件准备 ...

  5. HAL读写FLASH笔记

    HAL读写FLASH笔记 目录 HAL读写FLASH笔记 1. 整理数据 2. 解锁 3.擦除扇区 4.写入数据 5.上锁 代码整理 写函数 读函数 注意 效果截图 1. 整理数据 FLASH写入函数 ...

  6. STM32 HAL库学习笔记2 HAL库介绍

    STM32 HAL库学习笔记2 HAL库介绍 CMSIS标准 一.再次认识HAL库 HAL库设计思想 HAL库实现方式 以GPIO模块为例 GPIO外设数据类型 GPIO外设接口函数 二.使用HAL库 ...

  7. STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示

    STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...

  8. HAL——硬件抽象层读书笔记

    本章介绍了--HAL(硬件抽象层),建立在linux驱动之上的一套程序库.它并不属于linux内核,而是属于linux内核层之上的应用层. Google为了满足这些不想开源的linux驱动作者的要求, ...

  9. RS485_Modbus通讯笔记

    前言 RS485由RS232和RS422发展而来,弥补了抗干扰能力差.通信距离短.速率低的缺点,增加了多点.双向通信能力,即允许多个发送器连接在同一条主线上,同时增加了发送器的驱动能力和冲突保护特性, ...

  10. TwinCAT3 ADS通讯笔记

    文章目录 1.ADS通讯方式 2.ADS基本命令 3.ADS通讯方式 4.**PLC与高级语言变量对应 5.ADS错误码查询 6.ADS支持多线程 1.ADS通讯方式 ADS设备的内部地址或者变量与A ...

最新文章

  1. 【windwos bat】批量把windows下的wav文件转为raw文件
  2. 剑指 Offer 05. 替换空格(两种做法)
  3. 【重识 HTML + CSS】官方文档的阅读
  4. HIVE编程指南之HiveQL的学习笔记1
  5. ojdbc maven
  6. h5/uni-app打开手机app,没有则跳转到商店下载
  7. 证件照如何换背景颜色?这几个软件能免费帮你们制作证件照
  8. 搭建vue脚手架全教程
  9. 读书笔记之吴伯凡·认知方法论
  10. 量化交易让股市成为你的印钞机
  11. 我的框架-Unity3d中的用户数据储存模块UserDB
  12. 财务需要哪些计算机能力,建设财务共享中心,财务人员应具备哪些能力?
  13. java程序员月薪3万需要掌握哪些技术?技术水平需要到什么程度?
  14. Python爬虫实战之12306抢票开源
  15. SQL 字母大小写转换函数UPPER()、UCASE()、LOWER()和LCASE()
  16. 京东:按关键字搜索商品 API
  17. 彻底搞清楚STM32CubeMX生成工程再次下载后SWD无法使用问题
  18. springboot 实现redis高并发抢票服务
  19. 【牛客网】最小公倍数
  20. simon手册翻译_part1

热门文章

  1. 基于NXP i.MX 8M Plus处理器的核心板和开发板有什么功能
  2. 迁移学习与小样本学习
  3. ansible进阶(五)-handlers-任务发生更改时触发操作
  4. vue生成随机订单号
  5. 累计亏31亿的尚德机构:研发费用递减,多次被罚,市值缩水近九成
  6. MySQL 按照天数查询数据
  7. 蓝瘦香菇!美国帅小伙作死尝试无人机剪头发
  8. 神舟Z8-SP7D1驱动安装
  9. 程序员转行,干什么比较好
  10. Spark开发环境的搭建(一)