完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
1 STM32—bxCAN:是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能。
2 CAN--2.0A和2.0B: CAN2.0A为标准格式,CAN2.0B为扩展格式,报文标识符可达2032种(CAN2.0A—11位ID),而扩展标准(CAN2.0B—29位ID)的报文标识符几乎不受限制;CAN2.0规范兼容CAN 1.2 规范。 3 发送邮箱和接收过滤器: >>共有3个发送邮箱供软件来发送报文。发送调度器根据优先级决定哪个邮箱的报文先被发送。 >>在互联型产品中,bxCAN提供28个位宽可变/可配置的标识符过滤器组,软件通过对它们编程,从而在引脚收到的报文中选择它需要的报文,而把其它报文丢弃掉。在其它STM32F103xx系列产品中有14个位宽可变/可配置的标识符过滤器组。 接收FIFO: 共有2个接收FIFO,每个FIFO都可以存放3个完整的报文---共六个报文。它们完全由硬件来管理。 注:互联型产品是指STM32F105xx和STM32F107xx微控制器。 4 bxCAN工作模式:
当微控制器处于调试模式时,Cortex-M3核心处于暂停状态,依据下述配置位的状态,bxCAN可以继续正常工作或停止工作: ● 调试(DBG)模块中的调试MCU配置寄存器DBGMCU_CR的CAN1的DBG_CAN1_STOP位或CAN2的DBG_CAN2_STOP位。DBG_CANx_STOP:当内核进入调试状态时,CAN2停止运行。 0:CANx仍然正常运行; 1:CANx的接收寄存器不继续接收数据。 ● CAN_MCR(CAN主控制寄存器)中的DBF位(位16): 0:在调试时,CAN照常工作 1:在调试时,冻结CAN的接收/发送。仍然可以正常地读写和控制接收FIFO。 7 发送处理: CAN发送邮箱标识符寄存器: >>CAN_TIxR寄存器的TXRQ位置’1-----------请求发送。 CAN发送状态寄存器: >>CAN_TSR寄存器的RQCP和TXOK位置1----来表明一次成功发送。 >>CAN_TSR寄存器的ALST位置’1’---------仲裁引起,TERR位置’1’-----发送错误。 >>CAN_TSR寄存器的ABRQ位置’1’-------中止发送请求: CAN主控制寄存器: >>CAN_MCR寄存器的TXFP位置’1’-------把发送邮箱配置为发送FIFO。 >>CAN_MCR寄存器的NART位置’1’-------禁止自动重传模式。 8 时间触发通信模式: 在该模式下,CAN硬件的内部定时器被激活,并且被用于产生(发送与接收邮箱的)时间戳(时间标记),分别存储在CAN_RDTxR/CAN_TDTxR寄存器(接收/发送该报文SOF的时刻,16位定时器的值)中。内部定时器在每个CAN位时间累加。 内部定时器在接收和发送的帧起始位的采样点位置被采样,并生成时间戳。 9 接收管理: 接收到的报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文。 >>CAN_RFR(CAN接收FIFO寄存器)的FMP[1:0]------- 报文数目。 >>CAN_RFR寄存器的RFOM位设置’1’-------------释放邮箱 >>CAN_RFR寄存器的FOVR位进行置’1’----------表明溢出 >>CAN_RFR寄存器的FULL位就被置’1’-----------FIFO已满 接收中断:CAN_IER-----中断使能寄存器 >>CAN_IER寄存器的FMPIE位为’1’-------产生接收中断请求(有报文)。 >>CAN_IER寄存器的FFIE位为’1’-----------产生满中断请求 >>CAN_IER寄存器的FOVIE位为’1’---------产生溢出中断请求。 10 标识符过滤: CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,在互联型产品中,bxCAN控制器为应用程序提供了28个位宽可变的、可配置的过滤器组(27~0);在其它产品中,bxCAN控制器为应用程序提供了14个位宽可变的、可配置的过滤器组(13~0),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件过滤从而占用一定的CPU开销。
标识符列表模式:在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。 0: 过滤器组x的2个32位寄存器工作在标识符屏蔽位模式; 1: 过滤器组x的2个32位寄存器工作在标识符列表模式。 >>为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 >>为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。 >>应用程序不用的过滤器组,应该保持在禁用状态。
1:过滤器位宽为单个32位。 >>2个16位:即高16位与低16位为两个不同的过滤器。
>>标识符模式 寄存器的每位对应于所期望的标识符的相应位的电平。 0: 期望相应位为显性位; 1: 期望相应位为隐性位。 屏蔽位模式 寄存器的每位指示是否对应的标识符寄存器位一定要与期望的标识符的相应位一致。 0: 不关心,该位不用于比较; 1: 必须匹配,到来的标识符位必须与滤波器对应的标识符寄存器位相一致。 屏蔽位举例:(标准ID) 有效位数 STDID 0xE0F x110 0000 1111 11 FilterID 0xF0F x111 0000 1111 11 MaskID 0xDFFF 110 1111 1111 1 12 ----关键是Std/FilterID都只有11位有效位,都需要移位;而MaskID不存在移位,因此在根据发送的ID确定MaskID时存在一位的位差;即StdID的最高位为无效位—MaskID需要右移一位与StdID对齐。 >> CAN_FiR1始终为标示符寄存器,而CAN_FiR2与模式对应----可以为为标示符寄存器,也可以为屏蔽寄存器,因此标识符模式下有2个或4个(分别对应位宽为32和16)标示符寄存器。 ----------过滤器组位宽设置图表如下: 波特率设置: 波特率最高可达1Mb/S。 PCLK:低速APB1时钟(PCLK1)的时钟频率位36MHz(不超过36MHz)。 tPCLK = 1/PCLK1=1/36MHz 。 tBS1 有0-15共16种可选值 。 tBS2 有0-7共8种可选值 。 CAN_Prescaler- Prescaler(分频)与BRP[9:0]对应-有1024种可选值 。 例:1Mb/s的波特率:CAN_Prescaler = 4;tBS1 =3* tq; tBS2=5* tq。 tq=4* tPCLK =1/(9M);位时间=(1+3+5)tq =1/(1M); 波特率 = 1Mbs。 --------------------stm32的can总线的过滤器总结---------------------- 关键:必须对标识符进行相应的移位---过滤器中的16/32位数不仅包含ID还包含IDE和IDR。 CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE;//CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失) CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //CAN_Mode_LoopBack //CAN_Mode_Normal CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;//1--16 CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;//1--8 CAN_InitStructure.CAN_Prescaler=2; CAN_Init(&CAN_InitStructure); /* CAN filter init */ CAN_FilterInitStructure.CAN_FilterNumber=0;//选择过滤器0 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//指定过滤器被设置为标识符屏蔽模式 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//给出过滤器位宽为32位 下面根据设置的参数不同来决定can总线can总线的配置情况: 1、对扩展数据帧进行过滤:(只接收扩展数据帧) CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id<<3)&0xFFFF0000)>>16; CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF; (注:标准帧数据帧、标准远程帧和扩展远程帧均被过滤) 2、对扩展远程帧过滤:(只接收扩展远程帧) CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id<<3)&0xFFFF0000)>>16; CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_REMOTE)&0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF; 3、对标准远程帧过滤:(只接收标准远程帧) CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id<<21)&0xffff0000)>>16; CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_REMOTE)&0xffff; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF; 4、对标准数据帧过滤:(只接收标准数据帧) CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id<<21)&0xffff0000)>>16; CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF; 5、对扩展帧进行过滤:(扩展帧不会被过滤掉) CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id<<3)&0xFFFF0000)>>16; CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id<<3)|CAN_ID_EXT)&0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC; 6、对标准帧进行过滤:(标准帧不会被过滤掉) CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id<<21)&0xffff0000)>>16; CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id<<21)|CAN_ID_STD)&0xffff; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC; 注:slave_id为要过滤的id号。 三格电子(http://www.tj-sange.com/)品主要有多业务光端机、光猫、光纤收发器、光***换机、噪声与振动信号采集卡、通用信号采集卡、WIFI无线采集卡等。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
2094 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4794 浏览 0 评论
4274 浏览 9 评论
3865 浏览 16 评论
4435 浏览 1 评论
4269浏览 3评论
3439浏览 0评论
1207浏览 0评论
2893浏览 0评论
3956浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 15:47 , Processed in 0.729042 second(s), Total 75, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
763