本帖最后由 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 ; 不过,这样的确难记住,取名字的任务就交给库函数编写文件人员了。 |