STM32F407学习之GPIO

一、简单介绍

最近,通过百度之星拿到了一块STM32F4-DISCOVERY的开发板,这块板子基于STM32F407VGT6芯片,包括一个板载的有嵌入式调试工具接口的ST-LINK/V2,ST MEMS数字加速器,ST MEMS 数字麦克风,音频DAC集成了class D扬声器驱动器,LED灯,按钮和一个USB OTG的micro-AB连接器。这块板子的功能也比较强大,很适合学习,下面是官方资料对这块板子的说明,供参考:

  • STM32F4DISCOVERY提供如下个特点:
     STM32F407VGT6微控制器有1M的FLASH存储器,192K的RAM,LQFP100封装
     板上的ST-LINK/V2可以使用选择的方式把套件切换成一个独立的 ST-LINK/V2来使用(用SWD连接器来编程和调试)
     板子电源:通过USB总线或者外部5V电源来供电
     外部应用电源:3V和5V
     LIS302DL, ST MEMS运动传感器,3轴数字输出加速器
     MP45DT02,ST MEMS音频传感器,全向数字麦克风
     CS43L22,音频DAC集成了CLASS D扬声器驱动器
     8个LED指示灯
    - LD1(红/绿)用于USB通讯
    - LD2(红)用于3.3V上电
    - 4个用户LED灯,LD3(橙),LD4(绿),LD5(红)和LD6(蓝)
    - 2个USB OTG的LED灯,LD7(绿)VBus,LD8(红)过流指示 2个按钮,(用户按键和复位健)USB OTG,micro-AB连接器
    LQFP100 IO口的扩展头,可以快速连接成原型板,易于探测

和大家一样,刚开始学一块芯片就先拿GPIO来入门一下,写一个LED闪烁的程序,找一找入门的成就感,希望大家多多指点。

二、GPIO介绍

STM32F407系列芯片有PA‐PE 5×16共 80 个复用 IO口, 每个GPIO都有四个32位的配置寄存器(GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR 和GPIOx_PUPDR),两个32位的数据寄存器(GPIOx_IDR 和 GPIOx_ODR),一个32位的set/reset寄存器(GPIOx_BSRR),一个32位的锁存寄存器(GPIOx_LCKR)和两个32位的复用功能选择寄存器(GPIOx_AFRH 
和 GPIOx_AFRL)。

主要特性有以下几个:

● 总共有16个I/OS
● 输出状态:推挽输出或者开漏+上拉/下拉输出
●  输出数据可以来自输出寄存器GPIOx_ODR或者来自外设(alternate function output)
● 每个I/O有速率选择
●输入状态:浮空,上拉、下拉,模拟输入
● 输入数据到输入数据寄存器GPIOx_IDR或者输入到外设(alternate function input)

● Bit set and reset register (GPIOx_BSRR) for bitwise write access to GPIOx_ODR
● Locking mechanism (GPIOx_LCKR) provided to freeze the I/O configuration
● Analog function
● Alternate function input/output selection registers (at most 16 AFs per I/O)
● Fast toggle capable of changing every two clock cycles
● Highly flexible pin multiplexing allows the use of I/O pins as GPIOs or as one of several
peripheral functions

懒得翻译了,呵呵。

板上LED说明

 LD1 COM:LD1默认状态是红色。LD1变成绿色指示PC和ST-LINK/V2之间的通讯在进
行中
 LD2 PWR:红色LED指示板子已供电
 用户LD3:橙色LED是用户的LED,连接到STM32F407VGT6的PD13脚
 用户LD4:绿色LED是用户的LED,连接到STM32F407VGT6的PD12引脚
 用户LD5:红色LED是用户的LED,连接到STM32F407VGT6的PD14引脚
 用户LD6:蓝色LED是用户的LED,连接到STM32F407VGT6的PD15引脚
 USB LD7:当VBUS在CN5上时,绿色LED指示,连接到STM32F407VGT6的PA9引脚
 USB LD8:红色LED指示CN5的VBUS的过流,连接到STM32F407VGT6的PD5引脚

三 程序

直接上程序,使用库函数

 

[cpp]  view plain copy
  1. #include "stm32f4xx.h"  
  2. GPIO_InitTypeDef GPIO_InitStructure;  
  3. //initialize the GPIO ports for leds;  
  4. void LED_Init(void)  
  5. {  
  6.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);  
  7.     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  
  8.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  
  9.     GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;  
  10.     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  
  11.     GPIO_Init(GPIOD,&GPIO_InitStructure);  
  12. }  
  13. //delay function  
  14. void Delay(vu32 nCount)  
  15. {  
  16.     for(;nCount!=0;nCount--);  
  17. }  
  18.   
  19. int main(void)  
  20. {   
  21.     LED_Init();  
  22.     while (1)  
  23.     {  
  24.         GPIO_SetBits(GPIOD,GPIO_Pin_12);  
  25.         Delay(0xfffff);  
  26.         GPIO_ResetBits(GPIOD,GPIO_Pin_12);  
  27.         Delay(0xfffff);  
  28.         GPIO_SetBits(GPIOD,GPIO_Pin_13);  
  29.         Delay(0xfffff);  
  30.         GPIO_ResetBits(GPIOD,GPIO_Pin_13);  
  31.         Delay(0xfffff);  
  32.         GPIO_SetBits(GPIOD,GPIO_Pin_14);  
  33.         Delay(0xfffff);  
  34.         GPIO_ResetBits(GPIOD,GPIO_Pin_14);  
  35.         Delay(0xfffff);  
  36.         GPIO_SetBits(GPIOD,GPIO_Pin_15);  
  37.         Delay(0xfffff);  
  38.         GPIO_ResetBits(GPIOD,GPIO_Pin_15);  
  39.         Delay(0xfffff);  
  40.     }  
  41. //  return 0;     will be never reachable.  
  42. }  

你可能感兴趣的:(stm32f407)