根据一个月前设定的想法,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 里实现,要实现的通信内容了。
期间,我也去看了其他单片机的写法,差不多都是这样的思路。
以上,入门小感悟,留帖备查。