CAN0和CAN1相连,互相收发数据。连接方式如下图: 使用扩展模式CAN1发送数据CAN0接收数据。 使用标准模式CAN1发送数据CAN0接收数据。 使用EJTAG中bin文件夹内的can.c代码,使用callbin的方式测试CAN的收发。Can.c中CAN默认工作在扩展模式。当测试CAN的标准模式时需要对代码进行如下修改。 软件流程 设置控制器进入复位模式 检测到有复位请求后将中止当前接收/发送的信息而进入复位模式,一旦向复位位传送了 1-0 的下降沿 CAN 控制器将返回工作模式 设置总线定时。 总线定时0寄存器对应BTR0 总线定时1寄存器对应BTR1 设置标准模式还是扩展模式 向偏移地址为1的寄存器写0x81则为扩展模式 向偏移地址为1的寄存器写0x1则为标准模式 设置过滤,当消息的ID与上验收屏蔽值等于验收代码与上验收屏蔽值时,控制器接收消息。 扩展模式,设置寄存器偏移地址为16~23的寄存器,下图红色方框中。 标准模式,设置寄存器偏移地址为4、5的寄存器 向控制寄存器的RRbit写0,进入正常工作模式。 使能中断 扩展模式:向偏移地址为4的寄存器写入0xff。 标准模式:向控制寄存器写入0x1e打开中断。 发送数据 扩展模式:将发送的数据写入如下图所示寄存器。 标准模式:将发送的数据写入如下图所示寄存器。 需要保证发送的帧不被接受端所过滤掉。 发送数据:数据写入后,将命令寄存器的TR置1。 两种模式操作相同。 接收数据:查询中断寄存器的RI接收中断是否为1。为1则说明接收到数据。 两种模式操作相同。 读取接收的数据 扩展模式 标准模式 注意 CAN在每次发送/接收数据后需要复位。 CAN的两种帧格式 相关文章: