李朋(554886913) 16:33:47 void GPIO_DeInit(GPIO_TypeDef* GPIOx) { switch (*(u32*)&GPIOx) { case GPIOA_BASE: RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE); break;
case GPIOB_BASE: RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE); break;
case GPIOC_BASE: RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE); break;
case GPIOD_BASE: RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE); break; case GPIOE_BASE: RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE); break;
default: break; } }
switch (*(u32*)&GPIOx) 这句我看不懂(可能c的基础不行) 李朋(554886913) 16:35:37 #define PERIPH_BASE ((u32)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) case GPIOA_BASE:中的 GPIOA_BASE应该就是(u32)0x40010800 switch (*(u32*)&GPIOx)为什么不能用switch ((u32)&GPIOx)呢?
还是刚才那个程序
switch语句
我觉得 首先GPIO_TypeDef* GPIOx , 定义了结构体, &GPIOx取其首地址, (u32)&GPIOx作类型转换, 不行吗? |