# STM32 中无法直接使用指针的解决方案
当我在使用位带操作 led 灯时 首先需要对 GPIO 口进行初始化 所以就需要用到结构体来储存不同寄存器的值
教程中给的是直接使用结构体
1 2 3 4 5 6 7 8 9 10 11 12
| GPIO_InitTypeDef GPIOF_Light;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
GPIOF_Light.GPIO_Mode = GPIO_Mode_OUT; GPIOF_Light.GPIO_OType = GPIO_OType_PP; GPIOF_Light.GPIO_Pin = GPIO_Pin_9; GPIOF_Light.GPIO_PuPd = GPIO_PuPd_DOWN; GPIOF_Light.GPIO_Speed = GPIO_Fast_Speed;
GPIO_Init(GPIOF,GPIOF_Light);
|
但是在撸代码的过程中 打 "." 十分不方便 而且有些时候感觉没有使用结构体指针来的灵活 所以我就在想使用结构体指针来完成 但是遇到了问题
1 2 3 4 5 6 7 8 9 10 11 12
| GPIO_InitTypeDef* GPIOF_Light = (GPIO_InitTypeDef*)malloc(sizeof(GPIO_InitTypeDef));
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
GPIOF_Light->GPIO_Mode = GPIO_Mode_OUT; GPIOF_Light->GPIO_OType = GPIO_OType_PP; GPIOF_Light->GPIO_Pin = GPIO_Pin_9; GPIOF_Light->GPIO_PuPd = GPIO_PuPd_DOWN; GPIOF_Light->GPIO_Speed = GPIO_Fast_Speed;
GPIO_Init(GPIOF,GPIOF_Light);
|
但是报错了
![image-20210426171718009]()
warning不用管 没问题 是keil乱报网上查了一下发现 在 keil 里面默认情况下都是很精简的 如果要是用 C 语言的高级操作 必须在设置中勾选使用 microLiB 才行
所以勾选了之后就没问题了
![image-20210426172028281]()