can控制器初始化:
1 控制器为复位模式: 模式寄存器(0x00)设为1;
reg_write8(CAN0_MOD,0x01); //模式寄存器:复位模式
2 设置时钟分频器:设为0x08;
reg_write8(CAN0_CDR,0x08); //时钟分频寄存器:设置外部CLKOUT信号输出关
3 OCR输出控制器:设为0;
4 设置接收码过滤器寄存器;
接收码过滤器ACR
5 设置接收屏蔽寄存器;
接收码屏蔽器AMR,和ACR配合使用,和ACR对应的位为0时,输入的数据对应位和ACR对应位要匹配,如果和ACR对应位为1时,忽略。
举个例子
6 CAN波特率配置;
TBit = Tseg1+Tseg2+Tsync=(Tseg1+Tseg2+3)*Tscl
Tseg1 = tscl*(8*TSEG1.3 + 4*TSEG1.2 +2*TSEG1.1 + TSEG1.0 + 1)
Tseg2 = tscl*(4*TSEG2.2 +2*TSEG2.1 + TSEG2.0 + 1)
CAN波特率=APB总线频率/BRP分频器/(1+tBS1+tBS2)。
7 中断使能寄存器关闭所有中断;
8 配置错误警告寄存器
9 接收报文寄存器清零;
10 接收缓冲起始地址清零;
11 控制器设置正常模式:模式寄存器设为0x8;
发送报文:
1 发送中断使能(可选);
2 帧标识符赋值;
3 将发送数据写入发送数据缓冲;
4 发送报文:命令寄存器设为1;
接收报文:
1 接收中断使能;
2 中断处理程序中查询中断状态寄存器,查看是否有接收到报文;
3 如果收到报文,从接收数据缓冲中读取数据;
网友评论