CAN的回环测试实验

我只有一个STM32F429的开发板,所以这次我就做个回环测试.

1.先了解一下有关CAN的一些标准库,结构体

1.CAN初始化结构体---CAN_InitTypeDef

2.CAN发送及接收结构体--- CanTxMsg(发送结构体) CanRxMsg(接收结构体)

3.CAN筛选器结构体 --- CAN_FilterInitTypeDef

2.代码编写 以及我其中遇到的一些问题

//1.初始化GPIO

//2.初始化CAN的工作模式

//3.初始化接收FIFO

//4.初始化筛选器

//5.编写中断服务函数

这就是程序的大纲,下面我们一个一个来分析

1.初始化GPIO

这里我们板子上使用的PB9 PB8 来当作CAN的Tx Rx 使用它的复用功能

这里就是要注意我们复用功能要连接IO口到它的CAN_Tx 和 CAN_Rx

2.初始化CAN的工作模式

这里有几个要注意的

(1)  时钟开启 别弄错了  我们这是外设 使用的是APB1

(2) CAN的通讯速率我们就配置成 1Mbps 

计算过程就是 SS段+BS1+BS2 = 9Tq

5分频就是  =    45Mhz /5 = 9Mhz 

波特率 = 9Tq/9Mhz = 1Mbps

(3)我们使用的是CAN1

3.初始化筛选器

这里注意的如下:

(1)  一定要使能筛选器 ,不要以为我们不使能筛选器 什么数据都可以都可以接受到,其实是不使能筛选器,我们啥都接受不到了, 我第一次也被坑了

(2)就是配置这个ID和掩码

我们上面是使用ID列表模式 ,筛选器的尺度,我们使用的是32位

因为是小端模式 低位在前 ,所以我们是左移三位, 跳过了IDE RTR  0 这三位,

IDE是判断是否是 扩展帧还是 数据帧   RTR是判断是数据帧 还是 遥控帧

(我们这边是有宏定义的 直接把那几个位 或 上去就好了)

接着与上0xFFFF0000  取出 这高16位 向右移动16位 取出来 保存在 寄存器 最高位

 低16位的操作也差不多 就是我们 相与上0x0000FFFF 但是不用右移

(3)就是我们这里使用的是CAN1 他们公用的是同一个过滤器

(4)最后使能CAN FIFO0 通信中断

4.中断的编写

配置一下中断源  我们配置成CAN1的接收FIFO 0

5.发送和接收函数的编写

首先先初始化 Tx 和Rx的结构体

如果触发CAN1 FIFO0的中断 我们就把can_rx_flag 置 1  

并且使用CAN_Receive 把接收的数据存进 can_rx_msg这个结构体中

在while函数中 我们使用一个按键 函数 按下就发送数据  这里我们配置成数据帧 和扩展帧

最后现象

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值