高级会员
- 积分
- 560
- 金钱
- 560
- 注册时间
- 2016-4-12
- 在线时间
- 230 小时
|
本帖最后由 wangmingwei093 于 2018-11-1 18:06 编辑
如题,最近用到了CAN通信,但是由于不爱用库函数,一直觉着库函数有时候特别不方便,而且由于第一次用库函数,结果某个引脚一直不能输出高电平(应该自己的原因),果断放弃使用了,毕竟STM8的寄存器这么少。但是网上STM8CAN通信的寄存器我是真没找到,而且论坛里也有好多人问的,所以我就根据原子哥STM32的CAN通信寄存器配置,以及STM8的datasheet,写出一个例程来,用TJA1050收发器测试发送和接收都可以用,例程贴上CAN的代码,顺便稍微讲解一下。STM8 的CAN通信的寄存器设置和STM32寄存器设置区别还是挺大的。STM32的CAN所用的寄存器应该都有一个对应的地址(我没用过32的寄存器写,如有错误,请指正),而STM8的CAN寄存器就不是了,有一大段公用地址,这导致我开始的时候,没有注意,一直认为头文件中没有定义,直到参考了库函数的.h文件寄存器定义和datasheet后,才发现了这个问题,如图所示。
正是由于这个原因,在配置这些公共区域的时候,需要先配置一个页面寄存器,设置成你需要配置的寄存器页面。如图。页面选择寄存器。
例如,我要设置接收fifo,那么我就需要先把这个页面选择寄存器设置为0x07,再去设置接收fifo寄存器。
与STM32不大一样的再就是这个过滤器组了,STM8一共有6个过滤器组,每个过滤器组有8个8位寄存器,其实和STM32原理是一样的。如图。
其他的和STM32的设置基本雷同,只不过寄存器不大一样而已,发送和接收过程也是相似的,附上.c和.h文件,供大家参考,如有问题,可以一块交流。
|
|