目录

1、开启GPIO和CAN时钟、初始化GPIO口

2、CAN外设初始化

(1)CAN_Mode参数(测试模式)

(2)配置位时序相关参数

(3)6个可更改的特色配置

3、配置过滤器

1)

2)

4、封装一个发送报文的函数

5、CAN总线接收

(1)查询接收

1)判断接收FIFO里是否有报文(检查函数)

2)读取接收FIFO

6、主函数


1、开启GPIO和CAN时钟、初始化GPIO口

PA12——>CAN_Tx,PA11——>CAN_Rx

2、CAN外设初始化

CAN_Init之后,CAN就进入正常模式了

(1)CAN_Mode参数(测试模式)

选择LoopBack环回模式

(2)配置位时序相关参数

(3)6个可更改的特色配置

ENABLE表示置1,DISABLE表示置0

NART是不自动重传,给DISABLE就是自动重传;

TXFP:发送邮箱优先级;

RFLM:FIFO锁定;

AWUM:自动唤醒

TTCM:时间触发通信模式;

ABOM:离线自动恢复

3、配置过滤器

CAN1和CAN2共用一套

CAN进入正常模式后就自动开始工作了,没有CAN_Cmd这个函数

1)

(1)16位列表模式:IdHigh,IdLow,MaskIdHigh,MaskIdLow这四个参数分别存入一组ID,可存4个标准ID

(2)16位屏蔽模式:

IdHigh存入第一组ID,MaskIdHigh存入对应的屏蔽位;

IdLow存入第二组ID,MaskIdLow存入对应的屏蔽位;

(3)32位列表模式:

IdHigh、IdLow组合到一起,存入第一组32位ID;

MaskIdHigh、MaskIdLow组合到一起,存入第二组32位ID;

(4)32位屏蔽模式:

IdHigh、IdLow组合到一起,存入32位ID;

MaskIdHigh、MaskIdLow组合到一起,存入对应屏蔽位;

测试时用这个

2)

(1)FilterFIFOAssignment配置过滤器关联:通过此过滤器的报文进FIFO0排队还是FIFO1排队

(2)FilterActivation激活:相当于过滤器的一个开关,如果不激活就不会工作

4、封装一个发送报文的函数

CRC由硬件自动生成和校验

Data是个数组,空间为8个字节

5、CAN总线接收

可使用查询方式接收(较简单)或使用中断(接收效率更高)

(1)查询接收

需要两个函数,一个判断接收FIFO里是否有报文,另一个读取接收FIFO,把报文内容取出来

1)判断接收FIFO里是否有报文(检查函数)

如果有报文,返回1;无报文返回0

2)读取接收FIFO

返回ID,数据长度,数据内容

由于C语言不支持多返回值,所以用指针

6、主函数

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐