您的位置 首页 模拟

STM32单片机bxCAN的作业形式解析

STM32单片机bxCAN的工作模式解析-在硬件复位后,bxCAN工作在睡眠模式以节省电能,同时CANTX引脚的内部上拉电阻被激活。软件通过对CAN_MCR寄存器的INRQ或SLEEP位置’1’,可以请求bxCAN进入初始化或睡眠模式。一旦进入了初始化或睡眠模式,bxCAN就对CAN_MSR寄存器的INAK或SLAK位置’1’来进行确认,同时内部上拉电阻被禁用。

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总线的活动,而不会对总线形成影响-显性位(承认位、过错帧)不会真实发送到总线上。

o4YBAFwnGUSAQaKMAAA1X2koQyk222.jpg

图1

2.2 环回形式

经过对CAN_BTR寄存器的LBKM方位’1’,来挑选环回形式。在环回形式下,bxCAN把发送的报文当作接纳的报文并保存(假如能够经过接纳过滤)在接纳邮箱里。

pIYBAFwnGWmAWLoJAAA2ixskXvc062.jpg

环回形式可用于自测验。为了防止外部的影响,在环回形式下CAN内核疏忽承认过错(在数据/长途帧的承认位时间,不检测是否有显性位)。在环回形式下,bxCAN在内部把Tx输出回馈到Rx输入上,而彻底疏忽CANRX引脚的实践状况。发送的报文能够在CANTX引脚上检测到。

2.3 环回静默形式

经过对CAN_BTR寄存器的LBKM和SILM位一起置’1’,能够挑选环回静默形式。该形式可用于“热自测验”,即能够象环回形式那样测验bxCAN,但却不会影响CANTX和CANRX所衔接的整个CAN体系。在环回静默形式下,CANRX引脚与CAN总线断开,一起CANTX引脚被驱动到隐性位状况。

pIYBAFwnGWmARPSvAAA4W78QlsE706.jpg

图3

3 怎么设置作业形式

固件接口如下:

/**

*@briefSelectstheCANOperaTIonmode.

*@paramCAN_OperaTIngMode:CANOperaTIngMode.

*Thisparametercanbeoneof@refCAN_OperaTIngMode_TypeDefenumeration.

*@retvalstatusoftherequestedmodewhichcanbe

*-CAN_ModeStatus_Failed:CANfailedenteringthespecificmode

*-CAN_ModeStatus_Success:CANSucceedenteringthespecificmode

*/

uint8_tCAN_OperatingModeRequest(CAN_TypeDef*CANx,uint8_tCAN_OperatingMode);

CAN_operating_mode如下界说:

/**

*@defgroupCAN_operating_mode

*@{

*/

#defineCAN_OperatingMode_Initialization((uint8_t)0x00)/*!

#defineCAN_OperatingMode_Normal((uint8_t)0x01)/*!

#defineCAN_OperatingMode_Sleep((uint8_t)0x02)/*!

4 怎么设置测验形式

/**@defgroupCAN_operating_mode

*@{

*/

#defineCAN_Mode_Normal((uint8_t)0x00)/*!

#defineCAN_Mode_LoopBack((uint8_t)0x01)/*!

#defineCAN_Mode_Silent((uint8_t)0x02)/*!

#defineCAN_Mode_Silent_LoopBack((uint8_t)0x03)/*!

在CAN初始化函数接口CAN_Init调用时,运用CAN_TypeDef类型的CAN_Mode界说了CAN的测验形式,其值如上所界说。如下所示:

CAN_DeInit(CAN1);

CAN_StructInit(&CAN_InitStructure);

//。。.

CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//正常形式,或许设置为测验形式

//。。.

if(CAN_Init(CAN1,&CAN_InitStructure)==CANINITFAILED)

{

//。。.

}

//。。.

5 操控和状况寄存器5.1 CAN主操控寄存器 (CAN_MCR)

地址偏移量: 0x00

复位值: 0x0001 0002

pIYBAFwnGWqAa-daAABQ_n_MzPc908.jpg

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/346154.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部