先把我的工程给出来
工程上传到了我的github上了,点此进入
我用的芯片型号是stm32f103c8t6
使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
它是用来启用或禁用高速APB (APB2)外围时钟的函数
stm32 GPIO的初始化
stm32 GPIO的初始化实际上就是一个结构体
GPIO_InitTypeDef GPIO_InitStructure;这是一个重命名结构体
进入GPIO_InitTypeDef
这是一个typedef类型的结构体,有三个成员,分别对应要配置的GPIO引脚;指定所选引脚的速度;指定所选引脚的操作模式。
GPIO_Speed与GPIO_Mode又分别是两个枚举类型变量,我们进去GPIOSpeed_TypeDef与GPIOMode_TypeDef
注意这里是枚举类型而不是结构体类型
定义好初始化的结构体后就是根据结构体初始化GPIO参数,调用GPIO_Init(GPIOC,&GPIO_InitStructure); 就OK,具体就是一堆寄存器的配置,可以进去看看
综上,初始化函数如下
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
然后在main函数里定义LED_Init();
int main()
{
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
}
关于GPIO的操作
我们打开stm32f10x_gpio.h可以看到
或者
都可以进去看看函数的定义
常用的有
GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);读取某一指定引脚的输入值(高电平/低电平)
GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);将某一引脚设为输出高电平
GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);将某一引脚设为输出低电平
GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);将某一引脚设为输出 高/低 电平