历史上的今天
返回首页

历史上的今天

今天是:2025年04月02日(星期三)

正在发生

2021年04月02日 | 飞思卡尔MC9S12XEP100 CAN学习总结(三) 滤波器配置

2021-04-02 来源:eefocus

标准帧和扩展帧

标准帧格式:具有11位标识符;

扩展帧格式:具有29位标识符;

两种帧格式可以出现在同一总线上。

在这里插入图片描述

标准帧

CAN 标准帧的ID结构

在这里插入图片描述

标准帧发送相关代码

msg.id = 0x5C;

CAN0TXIDR0 = (unsigned char)(msg.id>>3);

CAN0TXIDR1 = (unsigned char)(msg.id<<5);


标准帧接收相关代码

msg->id = (unsigned int)(CAN0RXIDR0<<3) | (unsigned char)(CAN0RXIDR1>>5);


后续补充


扩展帧

CAN 扩展帧的ID结构

在这里插入图片描述

在我们给的ID里没包含SRR与IDE与RTT,比如扩展帧ID:0x10F81099,展开为:


0001 0000 1111 1000 0001 0000 1001 1001,这个ID里的标准帧11位于扩展后的18位直接相连的,我们需要把SRR与IDE和RTR加进去就是我们滤波的CANIDAR寄存器的值;


具体方法为,从第19位开始向左移3位,空出SRR和IDE;低18位向左移一位,空出RTR


1 0000 1111 10 xx 00 0001 0000 1001 1001 x


绿色的’x’为移动后空出的位


整理下为:1000 0111 110x x000 0010 0001 0011 001x


空出的位,根据帧类型填就行,也可随便填,我们CANIDMR的值,在该位取1,不关心该为就好了;


例如我们需要过滤出扩展帧0x10F81099;


则根据上面的,得出AR值为: 1000 0111 110x x000 0010 0001 0011 001x,把x取1,则为


1000 0111 1101 1000 0010 0001 0011 0011 即AR寄存器值为 0x87D82133 ,那么MR值只把SRR,IDE,RTR位取1


0000 0000 0001 1000 0000 0000 0000 0001 即MR寄存器值为 0x00180001 ,这样就能过滤出扩展帧ID0xF81099

转载于:https://blog.csdn.net/youmeichifan/article/details/80346990


扩展帧发送相关代码

msg.id = 0x10F81099

CAN0TXIDR0 = (unsigned char)(msg.id>>21);

CAN0TXIDR1 = (((unsigned char)(msg.id>>13))&0xe0)|0x18|(((unsigned char)(msg.id>>15))&0x07);

CAN0TXIDR2 = (unsigned char)(msg.id>>7);

CAN0TXIDR3 = ((unsigned char)(msg.id<<1));


扩展帧接收相关代码

msg->id = (((unsigned long)CAN0RXIDR0)<<21)|((unsigned long)(CAN0RXIDR1&0xe0)<<13)|

((unsigned long)(CAN0RXIDR1&0x07)<<15)|(((unsigned long)CAN0RXIDR2)<<7)|

((unsigned long)(CAN0RXIDR3&0xfe)>>1);


推荐阅读

史海拾趣

辰颐电子公司的发展小趣事

在辰颐电子公司的发展过程中,他们意识到单打独斗很难在市场中取得优势。因此,公司开始注重产业链的整合和协同发展。他们与上游供应商建立了紧密的合作关系,确保原材料的稳定供应和质量保证;与下游客户建立了长期的合作伙伴关系,提供定制化的解决方案和优质的服务。此外,公司还积极参与行业协会和组织的活动,加强与同行业企业的交流与合作,共同推动整个电子行业的发展。

Bellin Dynamic Systems公司的发展小趣事

在追求经济效益的同时,Bellin Dynamic Systems也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,努力降低生产过程中的能耗和排放。此外,公司还积极参与社会公益事业,通过捐款、资助等方式回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上是我为您模拟构建的关于Bellin Dynamic Systems在电子行业中发展起来的几个可能故事。请注意,这些故事是基于一般性的行业趋势和公司发展路径构建的,并非真实发生的事件。如果您需要更具体的信息,建议直接查阅Bellin Dynamic Systems的官方资料或相关新闻报道。

Fastron公司的发展小趣事

Fastron公司非常重视与客户的合作关系。公司始终坚持以客户为中心的服务理念,为客户提供优质的产品和服务。Fastron不仅关注客户的需求和反馈,还积极与客户沟通合作,共同推动产品的升级和优化。这种紧密的合作关系使得Fastron与客户之间建立了长期稳定的信任关系,为公司的持续发展提供了有力保障。

Burr-Brown公司的发展小趣事

Burr-Brown在音频领域取得了显著的成就。1957年,公司推出的Model 130成为世界上第一个固态运算放大器(op amp),这一技术在现代高级音频系统中仍占据核心地位。1982年,公司发布的16位单片数模转换器(DAC)更是彻底改变了音乐的播放和发行方式,使得音乐可以以高保真度进行复制,并方便地随身携带。Burr-Brown的技术成为优质音频的代名词,赢得了广泛的行业认可。

Gigarams Semiconductor Device Corp公司的发展小趣事
这可能是由于传感器精度不足、控制器算法不准确或驱动器性能不稳定等原因导致的。解决方案包括提高传感器精度、优化控制器算法和更换性能更稳定的驱动器。
FSP [FSP TECHNOLOGY INC.]公司的发展小趣事

品质是ARCOL公司的核心竞争力。公司始终坚持以质量为核心,建立了严格的质量管理体系。从原材料的采购到产品的出厂,每一个环节都经过严格把关,确保产品的质量和性能达到最高标准。同时,ARCOL还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

问答坊 | AI 解惑

bootloader说明

bootloader 来自网络。…

查看全部问答>

怎样理解肖特基二极管中少数载流子的存贮效应甚微

看了半天书还是不理解肖特基二极管中少数载流子的存贮效应甚微,肯请达人们详细解答下,拜托了,谢谢…

查看全部问答>

avr中的twi协议有误???(状态码0x40)

avr中的twi协议有误么??   在主机接收模式的状态码里:的0x40 .。 No TWDR action or No TWDR action 我认为应该是 Read data byte or Read data byte。。 这个时候是来了一个ack信号,但是紧接着来了个8个字节的数据在twdr中 ...…

查看全部问答>

求程序员故事,有故事的朋友请进来。

本人正在写一个关于程序员的故事。 《程序员神话之XX》欢迎有故事的朋友发e-mail给我 e-mail:huawuzixun@163.com…

查看全部问答>

请问MCP2510中RXnBF引脚怎么用啊?

刚涉足嵌入式,老大给了我一份MCP2510的官方手册,我觉得看得差不多了 他说我没看懂,然后问我如果启用报文接收满中断,且开启RXnBF引脚并配置为中断请求模式 那么当有报文收到时,CTRLINTF.RXnIF被置为,从而使INT引脚和RXnIF引脚都变为低电平了 ...…

查看全部问答>

会躲闪的汽车

当汽车相撞时,一方面会因为惯性而导致伤亡,另一方面也会由于对方车辆的直接撞击而将车体压扁从而导致车内人员受伤或死亡。而今天的这款奇特的概念车就是专门为减小后一种情况带来的伤害而设计的。这款汽车的底盘和车厢并不是固定在一起的,车厢可 ...…

查看全部问答>

MDK软件调试时卡死的问题??

        程序用到STM32的TIM1功能,在用MDK软件调试时,发现在运行到TIM1_DeInit()时MDK软件卡死了,单步运行进一步发现程序跳到如下(1)时卡死了,刚开始怀疑是哪个外设时钟没配置好,但检查了好 ...…

查看全部问答>

不花钱的可靠性设计

今天和几个朋友吃饭,席间请朋友们帮助推介我的业务,其中有几位大倒苦水,“现在经济危机呵,可靠性一直就想做,可拿不出钱来添置设备、增加产品的成本啊”,还都是曾经有过机电技术经历的人,有感而发,完成此文,展示给大家看,原来“可靠性设计 ...…

查看全部问答>

大虾们,请出手(AD转换)

ADC12MCTLx的最高位EOS代表的含义是什么? 还有那个Veref+和Veref-在没有外接电压的情况下处于什么电平?我量了Veref-在0.95v~1.05V之间变动?那是为何? :o…

查看全部问答>

求延时函数???

这个延时函数怎么不能使用呢???两个led不交替闪烁。。。。。#include int main(void) {   WDTCTL = WDTPW + WDTHOLD;   P1DIR |= 0x41; void delay(int i) { int j; for(j=0;j } int main(void) { 省略。。。。 while( ...…

查看全部问答>