cubemx+stm32f407+双Can通信
最近几天在用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灯亮起
cubemx+stm32f407+双Can通信相关推荐
- linux进程间通信:消息队列实现双端通信
双端通信描述 利用消息队列针对发送接受消息的类型唯一性 进行多个客户端之间消息传递,而不需要server端进行消息转发. 同时消息队列的读阻塞和写阻塞特性(消息队列中已经写入数据,如果再不读出来,则无 ...
- STC12C5A60S2单片机-双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
- Unity与Android交互(双端通信)
前言 最近小编开始做关于手部康复的项目,需要Android集成Unity,以Android为主,Unity为辅的开发:上一篇给大家分享了Unity嵌入Android的操作过程,所以今天想给大家分享一下 ...
- 2021年双非通信方向的详细保研经历(北邮、上交、东南)
2021年双非通信方向的详细保研经历 介绍 专业: 双非通信工程(双非真的太难了,每次都是title被碾压) 基本情况: 绩点4.46/5.0,专业排名2/543(非rk1还是有一点劣势的) 六级47 ...
- Linux 设置双网卡通信,外网网卡和内网网卡
文章目录 Linux 设置双网卡通信,外网网卡和内网网卡 1.配置路由表 2.设置启动自动生效 Linux 设置双网卡通信,外网网卡和内网网卡 1.配置路由表 背景,Linux 主机已经安装了内网.外 ...
- STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车
STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车 文章目录 STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车 前言 一.实现的功能? 二.主要代码及模块讲解 ...
- ROS与STM32F407实现消息通信(含源码)
关注微信公众号"混沌无形",后台回复:13462EE.免费获取完整工程源码! 本文参考STM32F1与ROS的通信工程:https://blog.csdn.net/qq_36349 ...
- 基于STM32的双蓝牙通信
首先我们应该让两个蓝牙间互相通信 1.准备两个蓝牙模块(主从一体),用USB转TTL连接到电脑,再打开两个串口分别连接两个蓝牙模块,上电同时按住蓝牙上的按键进入AT指令模式(指示灯慢闪),波特率设置为 ...
- STM32F407多路串口通信进行数据收发
一直被说是就不能把几个串口放在一起,写个标准例程直接用,非要每次用哪个串口才现场改程序,被迫把usart1,usart2,usart3进行了资源整合,挂在这以备不时之需. 功能简述: 串口1,串口2, ...
最新文章
- CodeIgniter自带的数据库类使用介绍
- java中char占的二进制,java数据类型与二进制详细介绍
- iis服务器怎样配置多张证书,IIS配置多个ssl怎么做?怎么配置?
- 3D空间的指定起点和终点的抛体运动
- linux命令:until循环
- Android Timer编写方式深解
- 4.9.5 通用注释
- Windows 环境下配置 Oracle 11gR2 Data Guard 手记
- TZOJ 4839 麦森数(模拟快速幂)
- [有源滤波器]Sallen-key开关电容电路(二阶低通滤波器)
- java查看eth转账状态_eth交易记录input解析
- SPSS实现两变量相关分析
- 【中科三方】什么是云解析DNS?云解析DNS有必要购买吗?
- 左神算法:找到二叉树中的最大搜索二叉子树(树形dp套路,Java版)
- 《蜗居》台词100句 血淋淋的经典
- NVIDIA Jetson之OTA远程升级Jetpack
- Android发送edp服务器,Android6.0调试笔记之edp屏无法点亮问题怎么解决
- 拿下Facebook黑客杯四冠王!与Jeff Dean相提并论...ACM竞赛之神的传奇前半生
- 一个几乎免费的云服务器和虚拟主机平台
- cocos creator微信小游戏截图