历史上的今天
返回首页

历史上的今天

今天是:2025年03月18日(星期二)

正在发生

2019年03月18日 | STM32F103 CAN通信的滤波器设置

2019-03-18 来源:eefocus

刚开始接触CAN通信,测试过收发后,还需要使用标识符过滤来实现固定节点的数据收发。记录一下“屏蔽位模式”下滤波参数的设置。


发送代码如下:


//can发送一组数据(固定格式:ID为0X123,标准帧,数据帧)

//len:数据长度(最大为8)     

//msg:数据指针,最大为8个字节.

//返回值:0,成功;

// 其他,失败;

u8 Can_Send_Msg(u8* msg,u8 len)

{

u8 mbox;

u16 i=0;

CanTxMsg TxMessage;

TxMessage.StdId=0X123; // 标准标识符 

TxMessage.ExtId=0x00; // 设置扩展标示符 

TxMessage.IDE=CAN_Id_Standard; // 标准帧

TxMessage.RTR=CAN_RTR_Data; // 数据帧

TxMessage.DLC=len; // 要发送的数据长度

for(i=0;i

TxMessage.Data[i]=msg[i];          

mbox= CAN_Transmit(CAN1, &TxMessage);   

i=0; 

while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //等待发送结束

if(i>=0XFFF)return 1;

return 0;  


}


代码中使用回环测试标识符滤波功能。标准标识符0X123。这里要注意虽然赋值为0X123但是在CAN_Transmit(CAN1, &TxMessage)函数内部会有这样一句话,会发现把StdId右移了21位。


 CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) |  TxMessage->RTR);//标准帧只有31-21位


由上图的寄存器位结构,实际上移位以后可以看做0X123<<21=0X24600000;


再看标识符滤波器的设置代码


CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器0

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //屏蔽位模式

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位宽 

CAN_FilterInitStructure.CAN_FilterIdHigh=0x2460; //32位ID

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFE0;//32位MASK 设置为31-21位全部匹配 

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0


CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活过滤器0


标准帧只有31-21位,所以滤波器设置参数时只需要设置31-21位。


由123<<21位得到0x24600000,所以CAN_FilterInitStructure.CAN_FilterIdHigh=0x2460。


屏蔽位设置为31-21位全部匹配CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFE0;这样只能接收0x123发送的数据。



推荐阅读

史海拾趣

Abbotec Incorporated公司的发展小趣事

在追求经济效益的同时,Abbotec也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,Abbotec还积极参与社会公益活动,为社会的发展做出贡献。

这五个故事都是基于电子行业发展的常见模式而虚构的,旨在展示一个电子企业可能经历的发展过程。请注意,这些故事并非针对任何真实存在的企业,也不涉及任何具体的褒贬评价。

CDE [ CORNELL DUBILIER ELECTRONICS ]公司的发展小趣事

在电子行业的早期,创始人William Dubilier凭借其敏锐的洞察力和创新精神,于1909年创立了CDE公司。Dubilier首次使用一种名为云母的玻璃状矿物,开发出一种新型电容器,这一创新为CDE公司的诞生奠定了基石。自那时起,CDE便以电容器为专业方向,不断追求技术突破和产品创新。

ENPIRION公司的发展小趣事

经过数年的研发和技术积累,ENPIRION公司在2004年推出了其首款革命性的产品——将电感集成的DCDC芯片。这款产品的问世引起了业界的广泛关注,因为它极大地减小了负载点稳压所需要的PCB面积和高度,实现了最高功率密度和最小外形封装。这一创新不仅获得了EDN 2004年度全球电源IC最佳产品奖,还赢得了其他众多国际大奖,为ENPIRION公司赢得了业界的广泛认可。

Austek Microsystems公司的发展小趣事

Austek Microsystems成立之初,便以研发创新为核心驱动力。面对竞争激烈的市场环境,公司团队凭借深厚的技术积累,成功开发出了一款具有高性能和低功耗特点的微控制器芯片。这款芯片不仅满足了当时市场对高效能计算的需求,也为Austek Microsystems在电子行业中赢得了初步的市场认可。

FWBELL公司的发展小趣事
温度阈值应设定在电池安全工作温度范围内,避免过热导致电池损坏甚至爆炸。
Evans Capacitor Company公司的发展小趣事

随着市场竞争的加剧,ECC意识到单纯的技术创新已经不足以保持领先地位。因此,公司开始注重产品品质的提升。ECC引入了严格的质量管理体系,从原材料采购到生产流程,再到成品检测,每一个环节都严格把控。这一举措使得ECC的产品质量得到了显著提升,赢得了客户的广泛信任。

问答坊 | AI 解惑

关于S3C2410裸机驱动LCD的问题

/************************************************************** 320×240 16Bpp TFT LCD功能模块初始化 **************************************************************/ void Lcd_Init(void) {         rLCDCON1=( ...…

查看全部问答>

别人的导航软件的手写输入在我定制的CE平台上识别不了,为什么?跟平台定制有关没?CE组件没加?

别人的导航软件的手写输入在我定制的CE平台上识别不了,为什么?跟平台定制有关没?CE组件没加?…

查看全部问答>

nand drive 问题

nand cach write/read 命令是自动连续读写nand 如果用这个命令后遇到坏blcok 怎么办?nand 自己会跳过吗? 谢谢…

查看全部问答>

请教KEIL中如何输入“%”,我输入就会出现错误

如题,这问题该怎么解决啊?哪位高手知道指点指点啊!谢谢了!…

查看全部问答>

wince5.0下直接读写内存

想在wince5.0下直接读写内存,往指定的空间读写数据,该怎么实现,忘达人们给点建议!!谢谢!!…

查看全部问答>

分析一个程序错误!

module delay_line(start,stop,up_out,upQ,down_out,downQ,clk,reset);input clk,start,stop,reset;reg [60:0]up_out,down_out,upQ,downQ;integer i,j,m,n;delay_unit du0(start,reset,up_out[0]);delay_unit du2(stop,reset,down_out[0]);always @ ...…

查看全部问答>

LM3S8962学习(四) -- 温度传感器

上次使用学习了一下Timer,每隔1秒钟中断一次,现在准备实现每隔1S钟读取一下内部的温度值,并在LCD上显示出来。   从手册288页上可以看出,LM3S8962的内部温度传感器有两个目的: 1.  防止温度过高或过低,影响系统芯片正常运行 ...…

查看全部问答>

大家来说说用DSP的时候你都遇到过什么样无法解决的问题

大家来说说用DSP的时候你都遇到过什么样无法解决的问题?…

查看全部问答>

超级给力DIY钢铁侠MK3方舟反应堆

从《钢铁侠1》到《复仇者联盟》再到《钢铁侠3》,托尼胸前的反应堆,也更新了好几代。高中刚毕业,放假在家,就有了想自己做一个反应堆的想法,然后就开始实践了。 ◆ 第一步:采购原材料(具体如下)      ● 网上定制的亚 ...…

查看全部问答>

∑ -μ01 HELP2416 入门分享

本帖最后由 DavidZH 于 2014-7-9 00:05 编辑 已经收到的HELP2416开发板,很精致。准备开始学习,按照以往学习其他MCU的经验,先是了解开发板的硬件,然后开始收集相关资料,如下图所示: 一、HELP2416的主芯片是S3C2416 芯片,其内核属于ARMv5 ...…

查看全部问答>