完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近几天在用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灯亮起。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1560 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
662 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1554 浏览 2 评论
1847浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
609浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
503浏览 3评论
507浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
487浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 08:41 , Processed in 0.507013 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号