OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32/FPGA开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 660|回复: 7

关于STM8寄存器定义在哪个头文件中?

[复制链接]

  离线 

33

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-4-12
在线时间
150 小时
发表于 2018-10-26 16:30:20 | 显示全部楼层 |阅读模式
5金钱
如题,最近在写CAN总线的收发功能,在设置STM8的CAN总线寄存器的时候,发现找不到相应的寄存器了,如下图所示,然后我查阅了iostm8af52a8.h文件中,发现只定义了部分寄存器,其他的我没找到,找不到在哪了?网上也找不到关于STM8的CAN的寄存器设置例程,关于CAN总线的寄存器设置也不好找,所以我就自己按照原子哥的STM32的例程以及STM8的手册,想自己写一个,就出现了这个问题,我看了下库函数版的寄存器设置,例如CAN->Page.Config.BTR1这个寄存器,写在我的程序里也找不到这个寄存器定义,有人做过的能解答一下这个疑问吗?我用的STM8AF52A8。
stm8寄存器错误.jpg

最佳答案

查看完整内容[请看2#楼]

上午还想着请教原子哥,下午研究了下库函数的代码,然后结合DATASHEET,一下子明白了为什么会这样了。库函数代码中定义剩下的寄存器,用了union定义,然后我查阅了下datasheet,发现确实是剩下的寄存器公用内存,如图所示,这也就解释了为什么在原始的头文件中,剩下的寄存器只定义了16个,因为这16个是公用一块内存的(不知道说内存对不对),如图所示。
回复

使用道具 举报

  离线 

33

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-4-12
在线时间
150 小时
 楼主| 发表于 2018-10-26 16:30:21 | 显示全部楼层

上午还想着请教原子哥,下午研究了下库函数的代码,然后结合DATASHEET,一下子明白了为什么会这样了。库函数代码中定义剩下的寄存器,用了union定义,然后我查阅了下datasheet,发现确实是剩下的寄存器公用内存,如图所示,这也就解释了为什么在原始的头文件中,剩下的寄存器只定义了16个,因为这16个是公用一块内存的(不知道说内存对不对),如图所示。
CAN寄存器映射图.jpg
CAN寄存器映射图2.jpg
库函数寄存器定义1.jpg
回复

使用道具 举报

  离线 

33

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-4-12
在线时间
150 小时
 楼主| 发表于 2018-10-26 16:34:48 | 显示全部楼层
CAN_MCR定义了,但是CAN_BTR1就没有定义报错
回复

使用道具 举报

  离线 

33

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-4-12
在线时间
150 小时
 楼主| 发表于 2018-10-27 11:08:43 | 显示全部楼层
有人回答下吗
回复

使用道具 举报

  离线 

516

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
134711
金钱
134711
注册时间
2010-12-1
在线时间
1314 小时
发表于 2018-10-28 01:42:22 | 显示全部楼层
帮顶
回复

使用道具 举报

  离线 

33

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-4-12
在线时间
150 小时
 楼主| 发表于 2018-10-29 08:37:51 | 显示全部楼层
回复

使用道具 举报

  离线 

33

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-4-12
在线时间
150 小时
 楼主| 发表于 2018-10-31 08:52:36 | 显示全部楼层
自己给自己回答下吧,CAN寄存器有定义,但是定义的很奇怪,如图一,然后我采用了直接移植函数库中的stm8s.h文件,这样也可以使用寄存器了,就和STM32的方法一样。然而为什么原始的头文件中没有全部的寄存器,我也不解,我自己的理解是,需要自己再添加一些寄存器才可以用,有明白的大神望告知下。附上原始寄存器定义和stm8s.h寄存器的定义。

以下代码是stm8s.h头文件中的寄存器定义。
typedef struct
{
  __IO uint8_t MCR;    /*!< CAN master control register */
  __IO uint8_t MSR;    /*!< CAN master status register */
  __IO uint8_t TSR;    /*!< CAN transmit status register */
  __IO uint8_t TPR;    /*!< CAN transmit priority register */
  __IO uint8_t RFR;    /*!< CAN receive FIFO register */
  __IO uint8_t IER;    /*!< CAN interrupt enable register */
  __IO uint8_t DGR;    /*!< CAN diagnosis register */
  __IO uint8_t PSR;    /*!< CAN page selection register */

  union
  {
    struct
    {
      __IO uint8_t MCSR;
      __IO uint8_t MDLCR;
      __IO uint8_t MIDR1;
      __IO uint8_t MIDR2;
      __IO uint8_t MIDR3;
      __IO uint8_t MIDR4;
      __IO uint8_t MDAR1;
      __IO uint8_t MDAR2;
      __IO uint8_t MDAR3;
      __IO uint8_t MDAR4;
      __IO uint8_t MDAR5;
      __IO uint8_t MDAR6;
      __IO uint8_t MDAR7;
      __IO uint8_t MDAR8;
      __IO uint8_t MTSRL;
      __IO uint8_t MTSRH;
    }TxMailbox;

    struct
    {
      __IO uint8_t FR01;
      __IO uint8_t FR02;
      __IO uint8_t FR03;
      __IO uint8_t FR04;
      __IO uint8_t FR05;
      __IO uint8_t FR06;
      __IO uint8_t FR07;
      __IO uint8_t FR08;

      __IO uint8_t FR09;
      __IO uint8_t FR10;
      __IO uint8_t FR11;
      __IO uint8_t FR12;
      __IO uint8_t FR13;
      __IO uint8_t FR14;
      __IO uint8_t FR15;
      __IO uint8_t FR16;
    }Filter;

    struct
    {
      __IO uint8_t F0R1;
      __IO uint8_t F0R2;
      __IO uint8_t F0R3;
      __IO uint8_t F0R4;
      __IO uint8_t F0R5;
      __IO uint8_t F0R6;
      __IO uint8_t F0R7;
      __IO uint8_t F0R8;

      __IO uint8_t F1R1;
      __IO uint8_t F1R2;
      __IO uint8_t F1R3;
      __IO uint8_t F1R4;
      __IO uint8_t F1R5;
      __IO uint8_t F1R6;
      __IO uint8_t F1R7;
      __IO uint8_t F1R8;
    }Filter01;

    struct
    {
      __IO uint8_t F2R1;
      __IO uint8_t F2R2;
      __IO uint8_t F2R3;
      __IO uint8_t F2R4;
      __IO uint8_t F2R5;
      __IO uint8_t F2R6;
      __IO uint8_t F2R7;
      __IO uint8_t F2R8;
       
      __IO uint8_t F3R1;
      __IO uint8_t F3R2;
      __IO uint8_t F3R3;
      __IO uint8_t F3R4;
      __IO uint8_t F3R5;
      __IO uint8_t F3R6;
      __IO uint8_t F3R7;
      __IO uint8_t F3R8;
    }Filter23;

    struct
    {
      __IO uint8_t F4R1;
      __IO uint8_t F4R2;
      __IO uint8_t F4R3;
      __IO uint8_t F4R4;
      __IO uint8_t F4R5;
      __IO uint8_t F4R6;
      __IO uint8_t F4R7;
      __IO uint8_t F4R8;
                       
      __IO uint8_t F5R1;
      __IO uint8_t F5R2;
      __IO uint8_t F5R3;
      __IO uint8_t F5R4;
      __IO uint8_t F5R5;
      __IO uint8_t F5R6;
      __IO uint8_t F5R7;
      __IO uint8_t F5R8;
    } Filter45;

    struct
    {
      __IO uint8_t ESR;
      __IO uint8_t EIER;
      __IO uint8_t TECR;
      __IO uint8_t RECR;
      __IO uint8_t BTR1;
      __IO uint8_t BTR2;
      uint8_t Reserved1[2];
      __IO uint8_t FMR1;
      __IO uint8_t FMR2;
      __IO uint8_t FCR1;
      __IO uint8_t FCR2;
      __IO uint8_t FCR3;
      uint8_t Reserved2[3];
    }Config;

    struct
    {
      __IO uint8_t MFMI;
      __IO uint8_t MDLCR;
      __IO uint8_t MIDR1;
      __IO uint8_t MIDR2;
      __IO uint8_t MIDR3;
      __IO uint8_t MIDR4;
      __IO uint8_t MDAR1;
      __IO uint8_t MDAR2;
      __IO uint8_t MDAR3;
      __IO uint8_t MDAR4;
      __IO uint8_t MDAR5;
      __IO uint8_t MDAR6;
      __IO uint8_t MDAR7;
      __IO uint8_t MDAR8;
      __IO uint8_t MTSRL;
      __IO uint8_t MTSRH;
    }RxFIFO;
  }Page;
} CAN_TypeDef;

CAN原始头文件寄存器定义.jpg
回复

使用道具 举报

  离线 

33

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-4-12
在线时间
150 小时
 楼主| 发表于 2018-10-31 08:56:47 | 显示全部楼层

原子哥,您抽空看下我这个帖子里,我自己查的回复,您能帮我解答下为什么吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

正点原子双11大促销上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-11-15 16:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */