一 什么是 GPIO:  
 
 
 GPIO(general porpose intput output), 通用输入输出端口 .  
 
 
 
  
 
 
 
 二 我们先认识芯片控制 GPIO 输出控制。 
  2.1LED 硬件原理如图:  
   
  当电流从这根电线流通, LED 亮。当电流不通过这根电线, LED 灭。  
  上面 PF** ,芯片电压为低, LED 亮。为高时,不亮。  
  上面 PE** ,芯片电压为高, LED 亮。为低时,不亮。  
  (可以见得,我们的嵌入式工程师编码与硬件工程师密切相关)  
  还可以结论:电流的高低输出,程序决定的。芯片侧 程序决定 给这根电线供电、  
  或者断电。芯片外侧接 LED 灯,我们肉眼观察 led 的亮灭。判断我们控制手段是  
  否达成。 
  
  
 
 
  
  2.2.3.1  ;流程图第一步时钟使能函数: 
  
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph,NewState);  
 
 RCC_AHB2PeriphClockCmd(RCC_AHB2Periph, NewState);  
 
 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph,NewState);  
 
 RCC_APB1PeriphClockCmd( RCC_APB1Periph, NewState);  
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph, NewState);  
 
 
 选择: RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOF , ENABLE ) ;  
  函数解释:让第 F 组成员都有时钟控制。没有这个时钟信号,都无法工作。  
  参数 1:RCC_AHB1Periph_GPIOF, 选择第几组。  
  参数 2 : DISABLE/ENABLE 
   2.2.3.2  流程图第二部 GPIO 基本配置: 
   void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)  
  函数解释:让程序决定第几组第几根引脚,如何工作。  
  参数 1 : GPIOx :第几组,  
  GPIOA/GPIOB/GPIOC/GPIOD/GPIOE/GPIOF/GPIOG/GPIOH/GPIOI/GPIOJ/GPI  
  OK  
  说明:查看确认引脚号,例如 PF9, 对应组为: GPIOF 。  
   参数 2 :第几根,如何干活。  
  GPIO_InitTypeDef  结构体名字;  
  结构体名字 .GPIO_Pin =  引脚号 ; GPIO_Pin_0/....GPIO_Pin_15/GPIO_Pin_ALL  
  结构体名字 .GPIO_Mode =  输入输出类型 ; GPIO_Mode_IN/GPIO_Mode_OUT/  
  ( 
  结构体名字 .GPIO_Speed =  速度 ; GPIO_Low_Speed/...GPIO_High_Speed  
  结构体名字 .GPIO_OType =  类型 ; GPIO_OType_PP/GPIO_OType_OD  
  结构体名字 .GPIO_PuPd =  上下拉电阻 ; GPIO_PuPd_UP /GPIO_PuPd_DOWN  ) 
   2.2.3.3  流程图第三步 GPIO 基本操控:  
  GPIO_SetBits(GPIOF, GPIO_Pin_9); PF9 输出高电平,根据硬件原理图, LED 灭  
  GPIO_ResetBits(GPIOF, GPIO_Pin_9);PF9 输出低电平,根据硬件原理图, LED  
  亮  
  整体编码整体如下: 
 // 时钟使能RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//GPIO 基本参数配置GPIO_InitTypeDef led_gpio_initstruct;led_gpio_initstruct.GPIO_Mode = GPIO_Mode_OUT;led_gpio_initstruct.GPIO_OType = GPIO_OType_PP;led_gpio_initstruct.GPIO_Pin = GPIO_Pin_9;led_gpio_initstruct.GPIO_Speed = GPIO_High_Speed;GPIO_Init(GPIOF,&led_gpio_initstruct);while(1){//gpio 的基本操控GPIO_SetBits(GPIOF, GPIO_Pin_9);GPIO_ResetBits(GPIOF, GPIO_Pin_9);// Bit_RESET Bit_SET//GPIO_WriteBit(GPIOF,GPIO_Pin_9,1);//GPIO_Write(GPIOF,0X0200);}
第三:请对于GPIO的基本操控进行改写。要求LED灯会一闪一闪的。
 流程: 1 打开 LED , 2 延时, 3 关闭 LED , 4 延时。重复执行四个步骤  
 
 延时函数实现: delay() { uint32_t t = 50000;while(t--)}  
 
 
while(1){GPIO_SetBits(GPIOF,GPIO_Pin_10);delay(time);GPIO_ResetBits(GPIOF, GPIO_Pin_10);delay(5000-time);time++;if(time == 5000) break;}while(1){GPIO_SetBits(GPIOF,GPIO_Pin_10);delay(time);GPIO_ResetBits(GPIOF, GPIO_Pin_10);delay(5000-time);time--;if(time == 0) break;}
 3.1GPIO 的结构图,从电器特性来看代码:  
 
 
 
 
 1. 保护二极管:保护电压数值,不超过 VDD.  
 
 流程: 1 打开 LED , 2 延时, 3 关闭 LED , 4 延时。重复执行四个步骤  
 
 延时函数实现: delay() { uint32_t t = 50000;while(t--)}  
 
 while(1)  
 
 {  
 
 GPIO_SetBits(GPIOF,GPIO_Pin_10);  
 
 delay(time);  
 
 GPIO_ResetBits(GPIOF, GPIO_Pin_10);  
 
 delay(5000-time);  
 
 time++;  
 
 if(time == 5000) break;  
 
 }  
 
 while(1)  
 
 {  
 
 GPIO_SetBits(GPIOF,GPIO_Pin_10);  
 
 delay(time);  
 
 GPIO_ResetBits(GPIOF, GPIO_Pin_10);  
 
 delay(5000-time);  
 
 time--;  
 
 if(time == 0) break;  
 
 } 2. 可调节电阻,上方接通,为高电平。下方接通为低电平。  
 
 3. 施密特触发器。三角形的宽的一端有电压数值,尖端会输出 1 。反之为 0 。  
 
 4. 两个三极管,上方导通,输出的是高信号对应高电平。下方导通,输出的低电  
 
 平对应的 0 信号。  
 
 GPIO_InitTypeDef led_gpio_initstruct; led_gpio_initstruct.GPIO_Mode =  
 
 GPIO_Mode_OUT;  决定是输入 , 输出 , 复用 , 模拟  led_gpio_initstruct.GPIO_OType  
 
 = GPIO_OType_PP;  决定是推挽还是开漏  led_gpio_initstruct.GPIO_Pin =  
 
 GPIO_Pin_9;  决定哪一个引脚  led_gpio_initstruct.GPIO_Speed =  
 
 GPIO_High_Speed; 决定最大输出速度  GPIO_Init(GPIOF,&led_gpio_initstruct); 
 
 
 3.2GPIO 输出模式:  
 
 推挽输出 :推出去为推。拉回来为挽。推挽输出可以输出高电平与低电平。  
 
 当高电平输出的时候, LED 灭。当低电平输出的时候  LED 亮。局限在于推挽输出  
 
 引脚与输入引脚连接后,容易烧坏板子。因此引入开漏输出。不能与数据输入同  
 
 时存在。 
 
 
 开漏输出 :开路输出 , 仅仅输出低电平和高阻态,开漏输出会有外部电流供电,  
  LED 默认为 LED 亮。当输出低电平会产生短路,实现了对于 LED 灭。耗电时间长  
  的,耗电量大的首选这个。而且,采集信号输出信号可以同时存在。 
   3.3GPIO 输出开发任务:  
  任务选择:  
  开漏输出用例:  
  推挽输出用例:  
  LED 灯的代码封装 : 初始化封装, led.c led.h  
  输出总结:  
  输出模式: 共计四种输出模式。 开漏输出 , 推挽输出 , 开漏复用 * * , 推挽复用 。  
  两种输出模式仅仅是数据来源来自 复用功能输出而不是输出寄存器。完全可以  
  参考( 开漏输出和推挽输出 )  
   
  
  
  
 