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

STM32F103C8T6,bxCAN收发配置实例,包含ID过滤

请添加图片描述

文章目录

  • 引言
  • bxCAN简介
    • bxCAN主要特点
  • 代码示例


引言


bxCAN简介

bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。

对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能。


bxCAN主要特点

● 支持CAN协议2.0A和2.0B主动模式
● 波特率最高可达1兆位/秒
● 支持时间触发通信功能
发送
● 3个发送邮箱
● 发送报文的优先级特性可软件配置
● 记录发送SOF时刻的时间戳
接收
● 3级深度的2个接收FIFO
● 可变的过滤器组:

  • ─ 在互联型产品中,CAN1和CAN2分享28个过滤器组
  • ─ 其它STM32F103xx系列产品中有14个过滤器组

● 标识符列表
● FIFO溢出处理方式可配置
● 记录接收SOF时刻的时间戳
时间触发通信模式
● 禁止自动重传模式
● 16位自由运行定时器
● 可在最后2个数据字节发送时间戳
管理
● 中断可屏蔽
● 邮箱占用单独1块地址空间,便于提高软件效率
双CAN
● CAN1:是主bxCAN,它负责管理在从bxCAN和512字节的SRAM存储器之间的通信
● CAN2:是从bxCAN,它不能直接访问SRAM存储器
● 这2个bxCAN模块共享512字节的SRAM存储器
在这里插入图片描述


代码示例

/*** @brief       CAN初始化* @param       tsjw    : 重新同步跳跃时间单元.范围: 1~3;* @param       tbs2    : 时间段2的时间单元.范围: 1~8;* @param       tbs1    : 时间段1的时间单元.范围: 1~16;* @param       brp     : 波特率分频器.范围: 1~1024;*   @note      以上4个参数, 在函数内部会减1, 所以, 任何一个参数都不能等于0*              CAN挂在APB1上面, 其输入时钟频率为 Fpclk1 = PCLK1 = 36Mhz*              tq     = brp * tpclk1;*              波特率 = Fpclk1 / ((tbs1 + tbs2 + 1) * brp);*              我们设置 can_init(1, 6, 7, 6, 1), 则CAN波特率为:*              36M / ((6 + 7 + 1) * 6)  = 500Kbps*              45M / ((6 + 8 + 1) * 12) = 250Kbps*              45M / ((6 + 8 + 1) * 6)  = 500Kbps** @param       mode    : CAN_MODE_NORMAL,  普通模式;CAN_MODE_LOOPBACK,回环模式;* @retval      0,  初始化成功; 其他, 初始化失败;*/
//250K: 3, 6, 2, 16
//500K: 3, 6, 2, 8
uint8_t can_init(BaudRateType type, uint32_t mode)
{uint32_t tsjw, tbs2, tbs1;uint16_t brp;// uint16_t mask, num, tmp, i;if(type == Bd500K){tsjw = CAN_SJW_3TQ;tbs2 = CAN_BS2_2TQ;tbs1 = CAN_BS1_6TQ;brp  = 8;}else if(type == Bd250K){tsjw = CAN_SJW_3TQ;tbs2 = CAN_BS2_2TQ;tbs1 = CAN_BS1_6TQ;brp  = 16;}g_canx_handler.Instance = CAN1;g_canx_handler.Init.Prescaler = brp;                /* 分频系数(Fdiv)为brp+1 */g_canx_handler.Init.Mode = mode;                    /* 模式设置 */g_canx_handler.Init.SyncJumpWidth = tsjw;           /* 重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1TQ~CAN_SJW_4TQ */g_canx_handler.Init.TimeSeg1 = tbs1;                /* tbs1范围CAN_BS1_1TQ~CAN_BS1_16TQ */g_canx_handler.Init.TimeSeg2 = tbs2;                /* tbs2范围CAN_BS2_1TQ~CAN_BS2_8TQ */g_canx_handler.Init.TimeTriggeredMode = DISABLE;    /* 非时间触发通信模式 */g_canx_handler.Init.AutoBusOff = ENABLE;            /* 软件自动离线管理 */g_canx_handler.Init.AutoWakeUp = DISABLE;           /* 睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位) */g_canx_handler.Init.AutoRetransmission = ENABLE;    /* 禁止报文自动传送 */g_canx_handler.Init.ReceiveFifoLocked = DISABLE;    /* 报文不锁定,新的覆盖旧的 */g_canx_handler.Init.
http://www.xdnf.cn/news/10292.html

相关文章:

  • 香港中乐团六月京津巡演 携多位国际艺术家献演
  • 边缘计算场景下的大模型落地:基于 Cherry Studio 的 DeepSeek-R1-0528 本地部署
  • spring事务的面试题 —— 事务的特性、传播机制、隔离机制、注解
  • 趋势直线指标
  • 机器视觉2D定位引导-合同要点重度讲解-技术要点及注意事项
  • Web开发实战:HTML+CSS+JS期末复习全梳理
  • 动态规划-376.摆动序列-力扣(LeetCode)
  • C++学习打卡
  • AI书签管理工具开发全记录(八):Ai创建书签功能实现
  • MSMQ消息队列》》Rabbit MQ》》安装延迟插件、延迟消息
  • 3D-激光SLAM笔记
  • Rollup打包输出产物遇到的一个坑。(分享心得)
  • Redis缓存问题重点详解
  • 57、IdentityServer4概述
  • [创业之路-398]:企业战略管理案例分析-战略意图是使命、愿景可聚焦、可量化、可落地、可实现、具象化的3-5年左右的目标
  • 三步问题 --- 动态规划
  • 二叉搜索树——AVL
  • 小红书 发评论 分析 x-s x-t
  • 在win10/11下Node.js安装配置教程
  • 网络编程1_网络编程引入
  • Centos环境下安装/重装MySQL完整教程
  • [SC]SystemC在CPU/GPU验证中的应用(二)
  • 【数据结构】图的存储(邻接矩阵与邻接表)
  • Spring Data Redis 实战指南
  • Java对象克隆:从浅到深的奥秘
  • 秒杀系统—5.第二版升级优化的技术文档三
  • Brighter 的线程模型:为何专用线程驱动异步消息泵
  • Python(十四)
  • Vue-自定义指令
  • *JavaScript中的Symbol类型:唯一标识符的艺术