手把手教你学CAN总线学习流水账-(SJA1000+STC89C52)vs STC32G12k128-2024年3月16日

根据一个月前设定的想法,SJA1000知道点皮毛后,工作之余去学了下STC32G12k128。差不多有一个月了。总结下少许感悟吧:

1:SJA1000+STC89C52  这个搭配其实是挺诺基亚的,古老而实在。

  然后,相关的资料呢,不多。例程我找了半天也就找到三篇例程。还有一些是开发板配套的。

 (没具体实际应用过,类似小实验通信一类的还是能用的)

书籍类有《项目驱动 CAN-bus现场总线基础教程》《CAN总线嵌入式开发-从入门到实战》《手把手教你学CAN总线》《CAN总线轻松入门到实践》

---说起周立功网站关于SJA1000那些资料,还是要感叹下,很可惜,官网里是找不到了。 要不然,真的是入门好途径。

2:STC32G12k128  集成度高,官方支持还行。有2个 CAN口,例程也写好了。 只需花点时间去了解下例程内容。然后根据自己需要改一下就行。

3:上述两者不一样,但是可以简单的理解:

相关寄存器的定义SJA1000 有 basicCAN.h 和 PeliCAN.h  两种。

使用时候,定义好基址。

【basicCAN就是CAN2.0A,只有11位ID , PeliCAN就是CAN2.0B有11位ID--标准帧或29位ID--扩展帧】 ---所以,两个模式下,地址的分配是不一样的。所以有 basicCAN.h 和 PeliCAN.h  两种。

由于SJA1000又是独立的元件,对MCU来说,就是一个外部存储设备。 所以,MCU连接SJA1000的片选引脚,也很重要。关系到定义SJA1000的基址(basicCAN.h 和 PeliCAN.h 寄存器分配结构结构基本上是基址+偏移地址)

//定义SJA1000的基址

//#define SJA_BaseAdr  0X7F00 //决定CS接到P2口的那个管脚,这样定义就是P2.7
//#define SJA_BaseAdr  0XFE00 //决定CS接到P2口的那个管脚,这样定义就是P2.0

//为什么?
//是因为我们连接外部SJA1000的共有16位的地址线。P0口是低8位地址,P2口是高8位地址。
//而P20是接的CS端一定要是为0,所以地址是FE. 1111 1110 
//而P27是接的CS端一定要是为0,所以地址是7F.  0111 1111 

------------------------------------------------------------------------------------------------------------------------
 

STC32G12k128 已经写在官方提供的STC32G.h里, 不用考虑寄存器分配了,只需在例程根据需要选择端口切换。

----------------------------------------------------------------------------------------------------------------------------

分配好寄存器,接下来,就是各种寄存器的配置,比较起来看的话,嗯,

先看SJ1000

再看 STC32

有没有发现,基本上就是:

复位,设置波特率,设置单滤波模式,配置验收屏蔽寄存器,然后退出复位,开始初始化数据 ,写ID ,帧格式,发送内容等等

等这些搞完,最后就是去Main 里实现,要实现的通信内容了。

期间,我也去看了其他单片机的写法,差不多都是这样的思路。

以上,入门小感悟,留帖备查。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

属鼠的金牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值