STM32寄存器版和库函数版

1.STM32头文件(stm3210x.h)为每一个寄存器#define了所有可能用到的值

之前,我以为STM32的寄存器版是直接给寄存器写数据比如16进制 0x0001,而且我所看的教程里第一个例程用的就是寄存器版的代码,也是用16进制数来配置寄存器——这个教程其实是库函数版教程。
但今天真正用寄存器版来玩了一下外部中断,我发现,其实寄存器版也可以有简化的方式,不需要自己去写16进制,而是头文件里面已经给我们准备了各个寄存器可能会使用的值。
比如:

//	//EXTI->FTSR |= 0x4000;   //下降沿 通道14
//	EXTI->FTSR |= EXTI_FTSR_TR14;

其中:

#define EXTI_FTSR_TR14 ((uint32_t)0x00004000)

哈哈哈,有感觉了吧。而且这些值很有规律,只需要前面是寄存器名,后面是位选。

2.STM32头文件(stm32f10x.h)把每一个功能的寄存器封装到对应的结构体中

今天在玩AFIO时,想给AFIO的某个寄存器(其实就是EXTICR)设置值,但一直不知道这个寄存器在系统中是什么名称。现在知道了,STM32的头文件把每个功能的寄存器都整合到对应该功能的结构体中。可以通过结构体调用来找到这些寄存器。
如AFIO:

/** 
  * @brief Alternate Function I/O
  */

typedef struct
{
  __IO uint32_t EVCR;
  __IO uint32_t MAPR;
  __IO uint32_t EXTICR[4];
  uint32_t RESERVED0;
  __IO uint32_t MAPR2;  
} AFIO_TypeDef;
/** 

#define AFIO ((AFIO_TypeDef *) AFIO_BASE)

需要注意的是:AFIO是一个地址或者说结构体指针,使用时需要用“->”操作符不能用"."操作符。

你可能感兴趣的:(stm32,单片机,嵌入式硬件)