目录
什么是GPIO
通用型之输入输出:
GPIO(英语:General-purpose input/output),通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO);
GPIO的输出
简而言之,GPIO就是寄存器(拥有特殊功能的地址),我们通过访问寄存器配置内存单元,从而使GPIO达到我们想要的功能;
void LED_GPIO_config()
{
GPIO_InitTypeDef GPIO_Initstruct;//申明一个结构体
RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);//时钟使能打开
GPIO_Initstruct.GPIO_Speed=GPIO_Speed_50MHz;//给GPIO配置传输速度
GPIO_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP;//GPIO配置为输出模式
GPIO_Initstruct.GPIO_Pin=LED_GPIO_G_PIN|LED_GPIO_R_PIN|LED_GPIO_B_PIN;
//这个GPIO_Initstruct.GPIO_Pin其实就是PB0,PB1...就是那16个端口
//这里的GPIO_PIN要与上,会出现的都列举出来,后面好选择;要是一个一个等于的话,那就只能开最后一个
GPIO_Init(LED_GPIO_PORT, &GPIO_Initstruct);//把前面配置的每个部分合起来
}
比如上面这个,就是控制着GPIOB这个寄存器的端口输出为了表现的更加直观,把输出口放在PB0这个LED上,只要它有输出,那么这个灯就会被点亮;
依据上面的代码,RGB灯三颜色会全亮,所以会配置出其他的颜色,这种灯能够配置出256种颜色,关键在于使用PWM的方式表达,也就是改变占空比;
KEY的输入
配置过程和配置输出一样,个别不同。比如输入不需要配置传输速度,还要就是把输出模式配置为输入模式;
void Key_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStruct;//创建结构体
RCC_APB2PeriphClockCmd(KEY2_GPIO_CLK|KEY1_GPIO_CLK, ENABLE);//两个按键时钟打开
GPIO_InitStruct.GPIO_Pin=KEY1_GPIO_A_PIN; //按键1的端口确定
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//按键1模式选择为浮空输入
GPIO_Init(KEY1_GPIO_PORT,&GPIO_InitStruct); //把上面的每个配置整合到一起
//这里和上面一样就不解释了;
GPIO_InitStruct.GPIO_Pin=KEY2_GPIO_C_PIN;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(KEY2_GPIO_PORT,&GPIO_InitStruct);
}
由于按键占用位置为GPIO,所以为了能够体现输入,我们就是使用按键表达GPIO的输入;
这只是单纯的使这个功能打开了,具体要用的话,还得有其他的代码。
这里的按键GPIO为PA0,所以要配置相应的代码;
该图为KEY.h
为什么需要打开时钟
这是因为 Cortex™-M3 在启动之后为了省电,把不必要的时钟关掉。所以,这就很具有代表性的告诉我们 Cortex™-M3 的外设是需要打开时钟才能运行的。
像上面的这些外设,我们需要用的时候,一定要先开启相应的时钟,只有这样才能保证程序是我们想要的目标。