blue 发表于 2020-12-25 16:36:27

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 21:59:25

本帖最后由 zly188 于 2021-1-23 22:01 编辑

STC16-CAN总线简单原理图修改过来,请和图形化一致。附件编译的案例也是错误的,请修改。

blue 发表于 2021-2-26 11:10:07

:):):):):):):):):):)

王鲁鑫 发表于 2021-3-18 20:46:25

st16的can视频讲解什么时间可以看到

岑順材 发表于 2021-5-13 18:49:04

:):):):):):D

Tonyhe 发表于 2021-8-19 17:41:58

王鲁鑫 发表于 2021-3-18 20:46
st16的can视频讲解什么时间可以看到

期待CAN的视频
页: [1]
查看完整版本: STC16 CAN总线测试和相关资料