历史上的今天
今天是:2025年04月07日(星期一)
2021年04月07日 | STM32之CAN详解
2021-04-07 来源:eefocus
简介:bxCAN有3个主要的工作模式:初始化模式、正常模式和睡眠模式。
当bxCAN处于睡眠模式,软件必须对CAN_MCR寄存器的INRQ位置’1’并且同时对SLEEP位清’0’,才能进入初始化模式。
有2种方式可以唤醒(退出睡眠模式)bxCAN:通过软件对SLEEP位清’1’,或硬件检测到CAN总线的活动。
1 bxCAN工作模式
bxCAN有3个主要的工作模式:初始化模式、正常模式和睡眠模式。
在硬件复位后,bxCAN工作在睡眠模式以节省电能,同时CANTX引脚的内部上拉电阻被激活。软件通过对CAN_MCR寄存器的INRQ或SLEEP位 置’1’,可以请求bxCAN进入初始化或睡眠模式。一旦进入了初始化或睡眠模式,bxCAN就对CAN_MSR寄存器的INAK或SLAK位置’1’来 进行确认,同时内部上拉电阻被禁用。
当INAK和SLAK位都为’0’时,bxCAN就处于正常模式。在进入正常模式前,bxCAN必须跟CAN总线取得同步;为取得同步,bxCAN要等待CAN总线达到空闲状态,即在CANRX引脚上监测到11个连续的隐性位。
1.1 初始化模式
软件初始化应该在硬件处于初始化模式时进行。设置CAN_MCR寄存器的INRQ位为’1’,请求bxCAN进入初始化模式,然后等待硬件对CAN_MSR寄存器的INAK位置’1’来进行确认。
清除CAN_MCR寄存器的INRQ位为’0’,请求bxCAN退出初始化模式,当硬件对CAN_MSR寄存器的INAK位清’0’就确认了初始化模式的退出。
当bxCAN处于初始化模式时,禁止报文的接收和发送,并且CANTX引脚输出隐性位(高电平)。初始化模式的进入,不会改变配置寄存器。
软件对bxCAN的初始化,至少包括位时间特性(CAN_BTR)和控制(CAN_MCR)这2个寄存器。
在对bxCAN的过滤器组(模式、位宽、FIFO关联、激活和过滤器值)进行初始化前,软件要对CAN_FMR寄存器的FINIT位设置’1’。对过滤器的初始化可以在非初始化模式下进行。
注: 当FINIT=1时,报文的接收被禁止。可以先对过滤器激活位清’0’(在CAN_FA1R中),然后修改相应过滤器的值。如果过滤器组没有使用,那么就应该让它处于非激活状态(保持其FACT位为清’0’状态)。
1.2 正常模式
在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文。软件可以通过对CAN_MCR寄存器的INRQ位清’0’,来请求从初始化模式进 入正常模式,然后要等待硬件对CAN_MSR寄存器的INAK位置’1’的确认。在跟CAN总线取得同步,即在CANRX引脚上监测到11个连续的隐性位 (等效于总线空闲)后,bxCAN才能正常接收和发送报文。
不需要在初始化模式下进行过滤器初值的设置,但必须在它处在非激活状态下完成(相应的FACT位为0)。而过滤器的位宽和模式的设置,则必须在初始化模式中进入正常模式前完成。
1.3 睡眠模式(低功耗)
bxCAN可工作在低功耗的睡眠模式。软件通过对CAN_MCR寄存器的SLEEP位置’1’,来请求进入这一模式。在该模式下,bxCAN的时钟停止了,但软件仍然可以访问邮箱寄存器。
当bxCAN处于睡眠模式,软件必须对CAN_MCR寄存器的INRQ位置’1’并且同时对SLEEP位清’0’,才能进入初始化模式。
有2种方式可以唤醒(退出睡眠模式)bxCAN:通过软件对SLEEP位清’1’,或硬件检测到CAN总线的活动。
如果CAN_MCR寄存器的AWUM位为’1’,一旦检测到CAN总线的活动,硬件就自动对SLEEP位清’0’来唤醒bxCAN。如果CAN_MCR寄存器的AWUM位为’0’,软件必须在唤醒中断里对SLEEP位清’0’才能退出睡眠状态。
注: 如果唤醒中断被允许(CAN_IER寄存器的WKUIE位为’1’),那么一旦检测到CAN总线活动就会产生唤醒中断,而不管硬件是否会自动唤醒bxCAN。
在对SLEEP位清’0’后,睡眠模式的退出必须与CAN总线同步,当硬件对SLAK位清’0’时,就确认了睡眠模式的退出。
2 测试模式
通过对CAN_BTR寄存器的SILM和/或LBKM位置’1’,来选择一种测试模式。只能在初始化模式下,修改这2位。在选择了一种测试模式后,软件需要对CAN_MCR寄存器的INRQ位清’0’,来真正进入测试模式。
2.1 静默模式
通过对CAN_BTR寄存器的SILM位置’1’,来选择静默模式。
在静默模式下,bxCAN可以正常地接收数据帧和远程帧,但只能发出隐性位,而不能真正发送报文。如果bxCAN需要发出显性位(确认位、过载标志、主动 错误标志),那么这样的显性位在内部被接回来从而可以被CAN内核检测到,同时CAN总线不会受到影响而仍然维持在隐性位状态。因此,静默模式通常用于分 析CAN总线的活动,而不会对总线造成影响-显性位(确认位、错误帧)不会真正发送到总线上。

图1
2.2 环回模式
通过对CAN_BTR寄存器的LBKM位置’1’,来选择环回模式。在环回模式下,bxCAN把发送的报文当作接收的报文并保存(如果可以通过接收过滤)在接收邮箱里。

环回模式可用于自测试。为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数据/远程帧的确认位时刻,不检测是否有显性位)。在环回模式 下,bxCAN在内部把Tx输出回馈到Rx输入上,而完全忽略CANRX引脚的实际状态。发送的报文可以在CANTX引脚上检测到。
2.3 环回静默模式
通过对CAN_BTR寄存器的LBKM和SILM位同时置’1’,可以选择环回静默模式。该模式可用于“热自测试”,即可以象环回模式那样测试 bxCAN,但却不会影响CANTX和CANRX所连接的整个CAN系统。在环回静默模式下,CANRX引脚与CAN总线断开,同时CANTX引脚被驱动 到隐性位状态。
下一篇:STM32 外部中断 易出错总结
史海拾趣
|
首届“时代民芯”杯电子设计大赛评审专家对参赛作品进行了评审,评审采取设计报告评审和现场答辩及实物演示相结合的方式进行,最终评审出11项大奖。从即日起进入异议期。 评委名单: 中国半导体行业协会 秘书长 陈 贤 《单片机与嵌入式系统应用 ...… 查看全部问答> |
|
CEPB (5.0)上, Tools --> Windows CE Remote Call Profiler 工具如何使用? CEPB (5.0)上, Tools --> Windows CE Remote Call Profiler 工具如何使用? (我想用它来看 开发板上EVC写的程序消耗的资源) launch --> EVC写的程序 后, 提示接收等待数据.... 但EVC写的程序的运行和消耗的资源等 数据无 ...… 查看全部问答> |
|
filedisk 虚拟磁盘镜像? 我mount了一个iso文件 盘符有 但打不开 我是从 网上下载的 filedisk.exe 它是不是可以将一个镜像文件装载到一个盘符里? 我现在还不清楚它的功能/ 我是这么做的 cmd ->c:\\filedisk /mount 1 c:\\myiso.iso z: 看到 ...… 查看全部问答> |
|
各位坛友们,你们好,我是一个刚到论坛不久的小白,经同学推荐到这学习MSP430单片机的知识,参加TI大讲堂的学习,我还有第五讲没有学完,可是今天怎么也点不进去,点完之后就页面就卡住不动了,活动时间眼看就要到了,我真的很想获得这块板子,请懂 ...… 查看全部问答> |
|
图片上是一个TI的运放,插座J5是一个微弱电流输入信号(uA级),继电器K1是控制运放的放大倍数的切换,R4是运放输出(是个电压,0~5V)。 我想问下这个电路的放大倍数是怎么计算的,整个运放的工作原理是什么样子的?谢谢 [ 本帖最后由 jukw 于 20 ...… 查看全部问答> |
|
想知道P2.6,P2.7口是怎么用的,好像是接晶振的那两个IO。 想知道P2.6,P2.7口是怎么用的,好像是接晶振的那两个IO。要用程序怎么设置。请教了!还有别的IO怎么设置成别的功能。… 查看全部问答> |




