stm32端口有8中工作模式,4中输入(上拉、下拉、浮空、模拟输入),4中输出(开漏、推免、开漏复用、推免复用),具体8中工作模式区别可以参考博文:http://blog.csdn.net/lpp0900320123/article/details/27208911
问题:点亮开发板上的一个LED灯,0点亮,1熄灭;LED灯连接GPIOC的第3个管脚;
需要以下步骤:
(1)开启外设时钟
(2)配置管脚的输入输出方式
(3)设置管脚的电平
1.开启外设时钟
stm32的外设默认时钟源是关闭的,当用到相应的外设,再开启相应的外设的时钟,这样可以降低功耗;首先应该查看外设挂在哪条总线上,再调用相应的时钟函数,可以通过查看库帮助手册去查看总线上挂的相应的外设;
void RCC_AHBPeriphClockCmd ( uint32_t RCC_AHBPeriph, FunctionalState NewState )
void RCC_APB1PeriphClockCmd ( uint32_t RCC_APB1Periph, FunctionalState NewState )
void RCC_APB2PeriphClockCmd ( uint32_t RCC_APB2Periph, FunctionalState NewState )
上面三个函数分别开启AHB、APB1、APB2 总线时钟。GPIOC挂在APB2总线上,所以需要APB2总线时钟。
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC,ENABLE);
2.配置管脚的输入输出方式
st库通过函数GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 实现GPIO管脚的工作方式的配置,这里有一个自定义的数据类型GPIO_InitTypeDef,被封装成结构体了。
typedef struct
{
uint16_t GPIO_Pin; //配置引脚
GPIOSpeed_TypeDef GPIO_Speed; //引脚的输出速度(输出模式下才配置)
GPIOMode_TypeDef GPIO_Mode; //引脚的工作模式
}GPIO_InitTypeDef;
下面是代码实现:
GPIO_InitTypeDef GPIO_InitStruct; //定义结构体变量
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5 ;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推免输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct); //初始化
3.设置管脚的电平
设置管脚的电平的函数很多:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
可以查库的帮助手册,来了解这些函数的使用方法。
点亮LED:
GPIO_ResetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);