目录
适用于板间CAN通信传输数据------锂离子爆肝著作(假的
包括:普通数据传输、标志位传输
板子为一块F103C6T6和F407ZGT6之间进行数据传输
一、CubeMx配置
F103配置
1、RCC
2.sys
3.GPIO灯
4.定时器
定时器配置小知识点:(1ms为例)
5.CAN
CAN配置小知识点:
首先需要配置CAN通信的波特率。用的是Stm32F103,分频系数设为4后,cubemx会自动完成Time Quantum(TQ)的计算;将得到的TQ乘以TBS1、TBS2、SJIY之和刚好就是1us,对应的波特率是1M,这是CAN总线支持的最高通讯频率。通信频率需要根据自己需要设置,注意的是同一条CAN总线上的设备的波特率需要一致。
111.11111111111111*(5+3+1)=999.9999999999999=1000ns=1us
即公式: CAN波特率=TQ*(TBS1+TBS2+SJY)
也能够直接用公式: CAN波特率=APB总线频率/分频系数/(TBS1+TBS2+SJY)
这里要注意的是先设置TS1和TS2,再将预分频系数调4,即从最初一开始的16变4
F407配置
1-2步骤都是相同的
3. GPIO灯
4.定时器设置
5.CAN设置
二、代码
1.文件移植
2.添加头文件
3.DefineLED
在main.h文件中加入
F1芯片灯
#define LED0_ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)
#define LED1_ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET)
#define LED2_ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET)
#define LED0_OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET)
#define LED1_OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET)
#define LED2_OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET)
F4芯片灯
#define LED0_ON HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13, GPIO_PIN_RESET)
#define LED1_ON HAL_GPIO_WritePin(GPIOE, GPIO_PIN_14, GPIO_PIN_RESET)
#define LED2_ON HAL_GPIO_WritePin(GPIOE, GPIO_PIN_15, GPIO_PIN_RESET)
#define LED0_OFF HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13, GPIO_PIN_SET)
#define LED1_OFF HAL_GPIO_WritePin(GPIOE, GPIO_PIN_14, GPIO_PIN_SET)
#define LED2_OFF HAL_GPIO_WritePin(GPIOE, GPIO_PIN_15, GPIO_PIN_SET)
4.点个灯试一下(两块板都是一样的)
都在main.c文件中:
5.开始正题
声明:我的发送数据板是F407 接收板为F103
传输普通数据
发送板F407
main.c文件
Canbus文件
蓝色框框为使用的时候需要更改的地方,其余的都是固定模板,由于我是四个数组,所有为四个iq
这样就可以直接调用函数发送了
直接调用里面的函数就可以将四位浮点数拆成四个数组了
传输标志位
Canbus文件
思路一样,由于所传输的状态标志位是一连串的u8,所有传输8个标志位就直接需要八个数组即可。
main.c文件
接收板F103
main.c文件(main.c主要是做验证标志位)
关于id在.h文件
关于标志位
- 代码
百度网盘自取哦,欢迎指正:
链接:https://pan.baidu.com/s/1R-PzymScR40SmUsZ_ryWDQ?pwd=k3j0
提取码:k3j0