|||
用mdk自带的仿真功能可以看到,CRH的地址变成了0x44444443,这里也无需奇怪,你可以看stm的中文手册,CRH复位地址为0x44444444,其实你定义的GPIOD的地址后,程序汇总添加了stm32f10x.s后,会自动根据结构体中的位置给寄存器赋予相应的地址,这部分还应该认真了解。
(2)
typedef struct
{
_IO uint32_t CR;
_IO uint32_t CFGR;
_IO uint32_t CIR;
_IO uint32_t APB2RSTR;
_IO uint32_t APB1RSTR;
_IO uint32_t AHBENR;
_IO uint32_t APB2ENR;
_IO uint32_t APB1ENR;
_IO uint32_t BDCR;
_IO uint32_t CSR;
}RCC_TypeDef;
RCC->APB2ENR|=RCC_APB2Periph_GPIOD;
这句程序第一个问题中类似,其实就是开启GPIOD时钟。
(3)
GPIOD->CRH&=0xFFFFFFF0;
GPIOD->CRH|=0x00000003;
设置GPIOD中第8个引脚的工作方式。
大概将程序中部分不易理解的部分写了出来