(转)涨姿势,关于类似*(uint32_t*)&GPIOx这样形式的讨论
看了看下面大神的讨论,有些茅厕顿开的感觉,特此搬砖过来 void GPIO_DeInit ( GPIO_TypeDef * GPIOx ) { /* Check the parameters */ assert_param ( IS_GPIO_ALL_PERIPH ( GPIOx ) ) ; switch ( * ( uint32_t * ) & GPIOx ) { case GPIOA_BASE : RCC_APB2PeriphResetCmd ( RCC_APB2Periph_GPIOA , ENABLE ) ; RCC_APB2PeriphResetCmd ( RCC_APB2Periph_GPIOA , DISABLE ) ; break ; . . . . . //不明白switch行中GPIOx为什么要取址,GPIOx本来不就是地址么? # define GPIOA ((GPIO_TypeDef*)GPIOA_BASE) //求解释 首先,从 GPIOx 说起 这是ST库里的经典映射手法。 具体就是 和PC上的程序不一样,在STM32上,可以通过 * ( int * ) 0x08001000 = 34 ; 在地址为 0x80010000上写入 34 这个内容。 ——这里不考虑什么 FLASH RAM之类的问题。 所以,ST库映射寄存器的典型手法就是 比如说