STC16 CAN总线测试和相关资料
本帖最后由 blue 于 2021-10-22 18:32 编辑STC16F支持CAN总线通讯,支持CAN2.0标准,支持标准帧和扩展帧,好好搭搭已经做了图形化模块,可以快速的开发。
一、所需器材
[*]天问51-STC16F x2
[*]CAN总线接口驱动(TJA1050)模块 x2
[*]公母杜邦线x8
[*]双绞线若干米,本次测试采用的是5米8芯网线,每4芯拧为一根,测试导线电阻为1欧。
二、硬件连接
1.示意图
主板 P50(RX)--------RXD CAN模块
主板 P51(TX)--------TXD CAN模块
2.实物图
4. 电源设置
CAN模块供电为5V,需要设置主板和下载器上的两个跳线帽到5V端
三、程序
1. 发送
采用标准帧发送,CAN数据最大为8字节,如果需要发送大于8字节的数据,需要采用协议分段发送。
在线版例程:CAN发送
2.接收
接收到数据通过串口打印
在线版例程:CAN接收
四、效果
四、更多资料
有关CAN总线的介绍、协议、书籍等等详见附件
补充说明:
驱动默认没有使用硬件自动过滤ID,大部分场合需要自动过滤ID,减小CPU的负荷,可以自己修改驱动CANInit的这部分代码
单滤波设置如下:
uint16 CanID = 0x3E3;
CANSetBaudrate(); //设置波特率
CanWriteReg(ACR0,CanID>>3); //总线验收代码寄存器
CanWriteReg(ACR1,CanID<<5);
CanWriteReg(ACR2,0x00);
CanWriteReg(ACR3,0x00);
CanWriteReg(AMR0,0x00); //总线验收屏蔽寄存器
CanWriteReg(AMR1,0x1F);
CanWriteReg(AMR2,0xFF);
CanWriteReg(AMR3,0xFF);
CanWriteReg(MR,0x01); //单滤波设置双滤波设置如下:
uint16 CanID1 = 0x111;
uint16 CanID2 = 0x222;
uint8 tempH = CanID2<<5;
uint8 templ = (CanID1&0x0007);
CANSetBaudrate(); //设置波特率
CanWriteReg(ACR0,CanID1>>3); //总线验收代码寄存器
CanWriteReg(ACR1,0x00);
CanWriteReg(ACR2,CanID2>>3);
CanWriteReg(ACR3,tempH | templ);
//CanWriteReg(ACR3,0x42);
CanWriteReg(AMR0,0x00); //总线验收屏蔽寄存器
CanWriteReg(AMR1,0xFF);
CanWriteReg(AMR2,0x00);
CanWriteReg(AMR3,0x18);
CanWriteReg(MR,0x00); //双滤波设置
有关这几个寄存器的说明,可以看下芯片手册,不在过多解释
本帖最后由 zly188 于 2021-1-23 22:01 编辑
STC16-CAN总线简单原理图修改过来,请和图形化一致。附件编译的案例也是错误的,请修改。 :):):):):):):):):):) st16的can视频讲解什么时间可以看到 :):):):):):D 王鲁鑫 发表于 2021-3-18 20:46
st16的can视频讲解什么时间可以看到
期待CAN的视频
页:
[1]