历史上的今天
返回首页

历史上的今天

今天是:2025年04月12日(星期六)

2019年04月12日 | STM32的CAN总线使用

2019-04-12

本次调试使用的是珠海鼎芯科技(D-Chip)的STM32核心板。这块核心板上包含了一个CAN总线驱动器。可以很方便的同时与多个种工业设备连接通讯。


STM32处理器的CAN总线有多种工作模式,本次测试的是正常模式。要在正常模式下使用首先需要初始化寄存器和使能相关的功能部件。


第一步是初始化GPIO和时钟,STM32F103C的CAN总线GPIO是GPIOA_PIN_11和GPIOA_PIN_12。



RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PORTA时钟                    

 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化IO

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化IO


配置完GPIO后,需要配置的是CAN总线


//CAN单元设置

CAN_InitStructure.CAN_TTCM=DISABLE;//非时间触发通信模式  

CAN_InitStructure.CAN_ABOM=ENABLE;//软件自动离线管理 

CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)

CAN_InitStructure.CAN_NART=ENABLE;//禁止报文自动传送 

CAN_InitStructure.CAN_RFLM=DISABLE; //报文不锁定,新的覆盖旧的  

CAN_InitStructure.CAN_TXFP=DISABLE;//优先级由报文标识符决定 

CAN_InitStructure.CAN_Mode= mode;        //模式设置: mode:0,普通模式;1,回环模式; 

//设置波特率

CAN_InitStructure.CAN_SJW=tsjw;//重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位  

CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1个时间单位

CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1个时间单位

CAN_InitStructure.CAN_Prescaler=brp;        //分频系数(Fdiv)为brp+1

CAN_Init(CAN1, &CAN_InitStructure);        //初始化CAN1 


CAN总线还需要配置接收ID和过滤器


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=0x0000;//32位ID

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;

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

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

 

CAN_FilterInit(&CAN_FilterInitStructure);//滤波器初始化


最后是设置CAN中断服务



CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许.    

 

NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;     // 主优先级为1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;            // 次优先级为0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);



本人测试1Mhz的速度通信没问题。而且开了自动离线管理短接CAN总线两脚也不会卡死的。


推荐阅读

史海拾趣

Delta Electronics公司的发展小趣事

近年来,网络安全问题日益严重。2022年,Delta Electronics遭遇了一起勒索软件攻击。面对这一挑战,公司迅速启动了应急响应机制,与专业的网络安全机构合作,成功阻止了攻击者的进一步行动。这一事件虽然给公司带来了一定的损失,但也让Delta更加重视网络安全问题,加强了公司网络安全防护体系的建设。

Cicoil公司的发展小趣事

Cicoil公司的创立可以追溯到电子行业的快速发展时期。创始人看到了扁平电缆在电子设备中的巨大潜力,于是决定专注于这一领域的研究和开发。他们投入大量资源,研发出具有独特技术的柔性扁平电缆,为电子设备提供了更为灵活和可靠的连接方案。这一创新产品在市场上引起了轰动,为Cicoil公司赢得了良好的声誉和市场份额。

DIALIGHT公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

ept Connectors公司的发展小趣事

随着全球环保意识的不断提高,EPT Connectors公司也开始关注环保和可持续发展问题。公司积极采取各种措施减少生产过程中的污染和浪费,并推出了一系列环保型连接器产品。同时,EPT还积极参与各种环保活动和社会公益事业,以实际行动践行企业的社会责任。这些举措不仅提升了EPT的品牌形象和社会声誉,也为其未来的发展注入了新的动力。

Applied Micro Circuits (MACOM)公司的发展小趣事

Applied Micro Circuits(MACOM)公司的历史可以追溯到其创立之初。MACOM最初名为Microwave Associates,成立于上世纪某个时期,以磁控管作为首创产品,主要应用于微波雷达领域。随着技术的不断进步,公司逐步扩展产品线,推出了包括真空管、高功率PIN二极管/晶体管和移相器等一系列产品。然而,上世纪九十年代,由于经营不善,MACOM被AMP公司收购,随后又经过多次转手,最终成为Tyco旗下的一部分。

Belden Wire & Cable公司的发展小趣事

在20世纪中期,随着电子技术的快速发展,电线电缆行业也面临着巨大的变革。Belden公司紧跟时代步伐,积极投入研发,推出了一系列具有创新性和前瞻性的产品。这些产品不仅满足了市场对高性能电线电缆的需求,还为公司赢得了众多行业奖项和荣誉。同时,Belden还建立了严格的质量控制体系,确保每一根电线电缆都符合最高的质量标准。

问答坊 | AI 解惑

关于视频系统处理器选择的建议

关于视频系统处理器选择的建议基于ARM核心的Freescale的i.MX系列芯片是视频应用的佼佼者。 比如i.MX27和i.MX31 i.MX27嵌入式开发板是高清视频输入输出的首选,i.mx27芯片提供了更高的灵活性和更强大的多媒体处理能力,成为IP视频和语音(V2IP)、移 ...…

查看全部问答>

自制超级流水灯演示板

单片机的用途非常广阔,各种智能控制的产品中都少不了它的身影,前景看好,因此引起了一阵阵学习单片机的热潮。   相信很多初学单片机的朋友都是从做流水灯开始的,因为流水灯的电路较为简单。看着按照自己的设想做成的流水灯变幻着不同的花样, ...…

查看全部问答>

谁能详细讲讲 uboot smdk2410.h 里面配置信息的含义?

谢谢! 我是初学者,不明白里面都在配置些什么,不明白哪些是最重要的。…

查看全部问答>

proteus支持哪些微处理器

我是个新手,不拍拍砖,重在学习,微芯的支持吗?…

查看全部问答>

如何使程序某个功能运行时不响应其它操作

小弟要实现如下功能: 当我点击打印操作时,程序弹出一个对话框,显示正在打印,在打印的过程中,必须使程序无法响应用户的其它任何操作。当打印结束时,显示打印成功或打印失败,然后才让程序可以继续响应用户其它操作。 请问这个如何解决哈? …

查看全部问答>

PB调试

各位大虾,小弟有一个问题请教。PB有没有象VC那样的单步调试方法啊。 我现在调试都是把NK编译好,然后下载进去调试,这样做的话效率相对比较的低。 比如我写了一个驱动程序,就必须编译把NK烧进去才能调试,有没有不用烧进去,象VC那样F10功能那 ...…

查看全部问答>

车辆信息的无线采集系统

希望管理员支持,谢谢…

查看全部问答>

STM32F103的ADC采样问题

怎样才能不间断采样呢? 我现在的方法:ADC12采样AB相的电压和电流,ADC3采样C相电压和电流,用TIM1的CC2和CC3作为触发,DMA传输采样数据,半传输完成后计算一次,计算期间进行下一个采样,整传输完成后,重新给DMA采样数据个数。 问题是: ...…

查看全部问答>

2.4G无线电力测温解决方案

2.4G无线电力测温解决方案   随着市场的推进,无线电力测温已经收到电力部门的高度重视.从过去的地方项目上升到省局的集中招标.从应用的角度来看,它并不是一个复杂的应用.但是从实现上来看,它需要公司投入相当大的人力和物力.针对于此,上海麓 ...…

查看全部问答>