历史上的今天
返回首页

历史上的今天

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

2019年04月12日 | cubemx+stm32f407+双Can通信

2019-04-12 来源:eefocus

最近几天在用CUBEMX实现stm32f407zgt6的双can通讯,中间走了一些弯路,记录下来供需要的人参考借鉴,希望可以帮助大家节省开发周期。


准备工作:


一、硬件


使用启明高配版开发板,因为启明的板子上有两个can可以使用,在调试之前,需要先将can1_H连接can2_H,can1_L连接can2_L,并且需要将P15和P21跳线帽连接好。



二、软件工具


1.我使用的软件版本是CUBEMX4.27,使用的库为fw_f4_v1210。



2.keil版本



程序编写


can在网上有很多介绍,可以在网上搜索一些基础介绍,之前调试can主要是卡在了新的库包里对滤波器以及FIFO和回调函数的设置上出现一些问题。


一、cubemx设置


1.Pinout部分


使能RCC,CAN1,CAN2以及开发板的PE3,PE4,PG9,SYS可以选择SW模式。点亮灯主要是想在调试的时候使用方便



2.Clock Configuration,建议将系统时钟设置为168



3.configuration设置


can1设置,波特率设置为500并勾选RX0中断



can2设置和can1相同



NVIC部分



点击生成代码



建议勾选下图中选项,生成的代码各部分会更清晰



因为使用的是MDK5,所以我勾选图中选项



完成配置后生成代码


二、代码编写


点开工程目录中的MDK-ARM文件夹中的MDK工程



用cubemx生成的代码是基础配置代码,里面一些具体的服务函数和配置仍需要我们添加,主要有以下几个部分


can.c部分。



添加接收和发送函数句柄


在can的初始化函数中添加对滤波器的配置,SlaveStartFilterBank为从过滤器配置,用来选择从过滤器的寄存器编号。当选择双can模式时,这个参数要跟can2的FilterBank一致。


以下是can1的滤波器配置



以下是can2的配置,HAL_CAN_ConfigFilter的第一个参数可以是can1也可以是can2



接下来编写两个发送函数CAN_TRANSMIT1和CAN_TRANSMIT2


以下是CAN_TRANSMIT1函数



以下是CAN_TRANSMIT2,因为我想实现的是can2接收的数据在发回给can1,所以我将can2接收的数据在赋值给can1



书写回调函数,因为我将can1和can2都绑定在FIFO0上,所以只写了一个回调函数(也可以将can1绑定FIFO0,can2绑定FIFO1,写两个回调函数)



can.h部分


主要是声明几个结构体和两个函数



main.c部分,调用传递函数即可



到此,配置完成,下载到开发板中即可实现can之间的通信,实验成功的现象是led1和led2灯亮起


推荐阅读

史海拾趣

Component Research Co公司的发展小趣事

随着公司业务的不断发展,Component Research Co意识到单一市场无法满足其长期发展的需要。于是,公司开始寻求国际合作,与多家国际知名企业建立战略合作关系。这些合作不仅为公司带来了先进的技术和资金支持,还帮助公司打开了新的市场。通过国际合作,Component Research Co的业务范围逐渐扩展到全球各地。

Apx-Crystal公司的发展小趣事

作为一家有社会责任感的企业,Apx-Crystal公司始终将可持续发展作为企业的核心价值观之一。公司积极履行社会责任,关注环境保护和公益事业。在生产过程中,公司采用环保材料和节能技术,降低能耗和排放;在员工福利方面,公司注重员工培训和职业发展,为员工提供良好的工作环境和福利待遇;在社会公益方面,公司积极参与捐资助学、扶贫济困等公益活动,回馈社会。这些举措不仅提升了企业的社会形象,也为公司的长期发展奠定了坚实的基础。

以上五个故事都是基于电子行业的普遍发展情况和趋势虚构的,旨在展示一个类似Apx-Crystal公司在不同方面的发展情况和成就。请注意,这些故事并非基于真实事件或数据,因此可能与实际情况存在差异。

Aavid Thermalloy公司的发展小趣事

Apx-Crystal公司起初是一家专注于研发新型晶体振荡器的小型科技公司。在创始人的领导下,团队通过不懈的努力,成功研发出了一款具有高稳定性和长寿命的晶体振荡器,这一技术突破在行业内引起了广泛关注。随着产品性能的不断提升和成本的有效控制,Apx-Crystal开始赢得越来越多客户的青睐,市场份额逐年攀升。公司逐渐扩大生产规模,并在多个国家和地区设立了销售和服务网络,实现了从初创企业到国际知名电子元件供应商的华丽转身。

睿赫(crechip)公司的发展小趣事

在电子行业的激烈竞争中,睿赫(crechip)公司以其独特的创新理念和前瞻性的技术布局,逐渐崭露头角。公司创始人李明,一位资深的电子工程师,在一次国际技术交流会上,受到了来自全球各地创新思维的启发。他意识到,随着科技的飞速发展,电子行业正迎来一场前所未有的变革。于是,李明决定创立睿赫公司,专注于研发高性能、低功耗的半导体芯片。

在创业初期,睿赫公司面临着重重困难,资金紧张、人才短缺、技术瓶颈等问题接踵而至。但李明带领团队迎难而上,通过不懈的努力和坚持,终于成功研制出了一款具有突破性的芯片产品,受到了业界的广泛关注和认可。

长江连接器(CJT)公司的发展小趣事

作为一家有社会责任感的企业,长江连接器积极履行社会责任和推动可持续发展。公司注重环保和节能减排,采用环保材料和绿色生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,长江连接器还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅体现了公司的社会责任感,也为其赢得了更多客户和合作伙伴的信任和支持。

DIALIGHT公司的发展小趣事

DIALIGHT公司一直专注于工业LED照明领域的发展。他们深入了解工业空间照明的需求和挑战,设计了一系列专为工业应用而定制的LED照明产品。这些产品不仅易于安装和维护,而且能在恶劣的环境下持续使用。此外,DIALIGHT还提供集成系统解决方案,帮助客户降低能源成本、维护成本和碳足迹,同时提高设施的安全性和生产力。通过不断创新和优质服务,DIALIGHT在工业LED照明领域赢得了广泛的认可和信赖。

问答坊 | AI 解惑

STM8库是个多余的东东

这两天下了那个什么STM8的库按照一些说明把该加的加,就是有一个中断我记得是STM8-interrupt-vector.c,总是自动加进而且编译出错,我试了两天都一样,用的是库里带的GPIO例程第一例,第二例,实用的就是好的,STM8这么个库我想不但不快速开发而且阻 ...…

查看全部问答>

SDRAM之我见(转)

最近一个星期,用EP1C3T144C8这个FPGA嵌入NIOS2,研究了一下FLASH和SDRAM的驱动,最后终于是好用了,但中间遇到了不少曲折,现在就把我的一些经验分享给大家,希望大家以后在这方面不要走弯路。    首先,先提一个名词--SOPC.任何一本 ...…

查看全部问答>

EMI滤波器的设计原理

中心议题: 电磁干扰滤波器的构造原理及应用EMI滤波器在[url=]开关[/url]电源中的应用EMI滤波器的技术参数及测试方法 随着电子设备、计算机与家用电器的大量涌现和广泛普及,电网噪声干扰日益严重并形成一种公害。特别是瞬态噪声干扰,其上升速度 ...…

查看全部问答>

STM32F103中断交流

以前听说前后台的操作模式,一般不在中断服务程序里写复杂的算法,即使各个中断协调的很好。说是因为进中断的时候CPU不一定将全部的寄存器保护,所以会影响程序正确性。请问STM32有这样的问题吗?期待DX们来交流!…

查看全部问答>

求助,STM32F103的I2C速率能降到5K以下吗?

                                 如题,晶振用8MHz…

查看全部问答>

汇编语言指令DA

DA这条指令起什么作用,一般什么时候会用到具体怎么用,书上和很多资料都是一带而过…

查看全部问答>

大电阻的测量2—低功率纳米技术[1]及其它敏感器件的交流与直流测量方法的比较

  相比之下,纳伏表[2]具有1000倍高的输入阻抗(也就是10GΩ),因此它可以以±1%精度来测量高于1GΩ的电阻。(消除10GΩ的负载影响只需将输入阻抗精确到±10%,以开路作为测试对象,通过直流反转测量的方法即可得到。)此外,一些电流源提 ...…

查看全部问答>

stm8问题

刚开始学stm8,不知道怎么设置的将STVD里面的下载器的选项字设置成了读保护,后面每次给stm8芯片烧写程序就显示Error : The device is protected,Operation aborted……怎么办才能将程序烧写进芯片。用什么工具…

查看全部问答>

求购MSP430AFE253的开发板,

求购MSP430AFE253的开发板,联系电话18210826729,孙先生…

查看全部问答>

G2553使用i2c mode

使用GPIO读写eeprom没问题后 想学习I2C mode 下了TI的SLAA208c范例來调适 其中 void EEPROM_ByteWrite(unsigned int Address, unsigned char Data) {   unsigned char adr_hi;   unsigned char adr_lo;   wh ...…

查看全部问答>