目标 1 , GPIO的使用
目标2 , RCC时钟总线
目标3 , 上下拉输入,浮空输入,高阻输入,模拟输入,推挽输出,开漏输出 的意思
1,GPIO
1,开启RCC时钟总线
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(启用对应的GPIO端口时钟,使能还是不使能);
GPIOA 在RCC时钟总线APB2上
2,初始化GPIO结构体
GPIO_InitTypeDef GPIO_Initstructure;
GPIO_InitTypeDef 用到的结构体类型
GPIO_Initstructure 结构体变量名
结构体需要配置:
GPIO_Mode = 模式;
GPIO_Pin = 引脚号;
GPIO_Speed = 速度;
重点 GPIO的模式
推挽输出 : 有驱动电流的信号
开漏输出 : 没有很强的驱动电流,单纯的高低电平
上下拉输入 : 就是静态时保持默认状态需要高电平就上拉,需要低电平就下拉
浮空输入 : 就是没有加上下拉电阻,可能一高一下低不稳定,一般用于一些信号比较 快又弱的一般不用
模拟输入:用于ADC,数字引脚只有1和0,模拟的话可以读出值,高阻,没有电流和电压
3,配置GPIO初始状态
GPIO_Init(GPIOA,&GPIO_Initstructure);
GPIO初始化(GPIOA,初始化那个结构体的地址);
需要用到的一些函数
GPIO_SetBits(GPIOA,GPIO_Pin_2);
Delay_ms(200);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
Delay_ms(200);
GPIO_SetBits(引脚是GPIOA还GPIOB,那个号); //配置为高电平
GPIO_ResetBits(同上);//重置引脚,默认为低电平
完整代码
#include "stm32f10x.h" // Device header
#include "Delay.h" // Component selection
int main(void)
{
GPIO_InitTypeDef GPIO_Initstructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA,&GPIO_Initstructure);
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);
Delay_ms(200);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
Delay_ms(200);
}
}