GD32[E]103的库函数之定时器

[复制链接]
559|5
 楼主 | 2019-2-5 11:23 | 显示全部楼层 |阅读模式
本帖最后由 lvben5d 于 2019-2-8 09:19 编辑

尽管为了避免山寨纠纷,天杀的这库文件编写人员,不但寄存器名字也设计的别具一格,把原来STM32 GD103的寄存器操作风格也大部分抛之脑后,E系列的定时器初始化等应用详情如下:
初始化的风格 基本同GD103F系列和STM32系列,这里不关心。
画风突变的是直接对寄存器的操作,
        TIMER_CNT(TIMER0)     = 0;          //对定时器0    计数器清0
        TIMER_CH0CV(TIMER0)  = pulse;  //设置定时器0  通道0的比较数值
对于喜欢直接操作寄存器的兄弟来说,不如 TIMER0->CNT = 0;  来的兼容以往的啊。
                                                         TIMER0->CH0CV = 100;
如果要兼容之前的画风,库函数就要多封装一层下面这样风格的
typedef struct
{
  __IO uint16_t CR1;
  uint16_t  RESERVED0;
  __IO uint16_t CR2;
  uint16_t  RESERVED1;
  __IO uint16_t SMCR;
  uint16_t  RESERVED2;
  __IO uint16_t DIER;
  uint16_t  RESERVED3;
  __IO uint16_t SR;
  uint16_t  RESERVED4;
  __IO uint16_t EGR;
。。。。。。。。。。
  __IO uint16_t DMAR;
  uint16_t  RESERVED19;
} TIM_TypeDef;

PS: 其实大家可以先调用库函数,编译器在编译的时候 还是会(去掉函数调用浪费时间)直接操作寄存器的! 发此贴,仅仅无聊。哈哈,对于喜欢操作寄存器的兄弟,可以先进去看库函数,跟进去就找到对应画风了。 不过对于ARM M3 M4 M0内核来说,操作寄存器本质是读和写地址空间 那么直接的 (*(volatile u32*)(u32)addr) = u32(数值);  u32 a = *0x4000xxxx ;  不过,这样的确难记住,取名字的任务就交给库函数编写文件人员了。
| 2019-2-5 19:04 | 显示全部楼层
尽管为了避免山寨纠纷,这个真心没办法,命名的人员也是不容易的。
 楼主 | 2019-2-6 19:22 | 显示全部楼层
xyz549040622 发表于 2019-2-5 19:04
尽管为了避免山寨纠纷,这个真心没办法,命名的人员也是不容易的。

是啊 LPC单片机 那边的寄存器名字更捉急。  其实有1个字母不一样就好了,毕竟英文缩写 大家都一样 , 外国专利保护想对我们严格一点,不过这种通用的 就没必要了。搞的第1家取完孩子名字后,其他家大小写一起上了。 库函数名字你大小写,我GD全小写,咋样。不一样了吧。
| 2019-2-9 10:31 | 显示全部楼层
慢慢用多了就熟悉了  这也是没有办法的事情
| 2019-2-9 10:57 | 显示全部楼层
适应了就好 呵呵呵
| 2019-2-9 11:01 | 显示全部楼层
楼主 平常心平常心
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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