1、( 一)在学习 STM32 芯片时,首先要接触的第(一)个内容就是对 STM32_GPIO 接口的配置和使用。下面以一个 LED 流水灯的实验来进行说明。首先看一下 LED 的原理图:从图中可以看出 4 个 LED 一端分别连接 STM32 芯片的 PF6PF7PF8PF9 四个引脚,另一端共连一高电平,因此,当 PF6PF7PF8PF9 分别输出低电平时,4 个 LED 点亮,输出高电平时 LED 熄灭,图中电阻主要起限流作用,防止 LED或 GPIO 引脚因电流过大而损坏。LED 流水灯就是通过对 STM32 引脚的配置,将引脚配置成输出 (高、低)电平来实现 LED 灯的亮灭。程序实现步
2、骤1、 LED.h 头文件:主要用来定义各引脚的规则(1) #ifndef _LED_H /*测试 LED.h 是否被定义过*/(2) #define _LED_H /*如果没有定义则定义*/(3) #endif /*如果定义了,则跳过(2)、(3)直接执/*行语句(4)、(5)*/(4)语句(5) 语句备注:#ifndef 与#endif 要一起使用,否则可能报错例: #ifndef _LED_H#define _LED_H#include “main.h”(其包含 stm32f10x.h)注意位置要在ifndef,与 define 后#define RCC_APB2Periph_LED R
3、CC_APB2Periph_GPIOF /*定义了 LED 的使/失能时钟接口,即PF 口*/#define GPIO_LED GPIOF/*定义 LED 对应的 GPIO 组即 PF*/*定义了每个 LED 灯对应的引脚名称*/#define GPIO_DS1_PIN GPIO_Pin_6#define GPIO_DS2_PIN GPIO_Pin_7#define GPIO_DS3_PIN GPIO_Pin_8#define GPIO_DS4_PIN GPIO_Pin_9#define LED_NUM 4 /定义了 LED 灯的个数 4 个Void Turnon_LED(u8 LED_num
4、ber);/函数声明Void Delay(u32 nCount);/函数声明#endif 自此 LED.h 文件定义完毕2、 LED.c 程序文件:主要实现 LED 灯的流水闪烁例:void LED(void) u8 count=0;/*定义一个计数变量GPIO_InitTypeDef GPIO_InitStructure;/*定义一结构体用来初始化 LED_GPIO接口RCC_APB2PeriphClockCmd(RCC_APB2Periph_LED,ENABLE);/*开启 LED 的 GPIO 接口时钟/*对各 LED 所连接的引脚进行配置*/GPIO_InitStructure.GPI
5、O_Pin = GPIO_DS1_PIN|GPIO_DS2_PIN|GPIO_DS3_PIN| GPIO_DS4_PIN; /*选择引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/设置为推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHZ;/输出速率 50MHZ,引脚作为输出时,则配置 Speed,作为输入用时,可不必配置GPIO_Init(GPIOF,/*0.1.2.3.4.分别%4=0,1,2,3,0 循环*/count+;Delay(0x2FFFFF);/*转换成十进制为 31457
6、27Void Turnon_LED(u8 LED_number)switch(LED_number)case 0: GPIO_ResetBits(GPIO_LED,GPIO_DS1_PIN);/点亮 DS1Break;很关键case 1: GPIO_ResetBits(GPIO_LED,GPIO_DS2_PIN);/点亮 DS2Break;不要忽略case 2: GPIO_ResetBits(GPIO_LED,GPIO_DS3_PIN);/点亮 DS3Break;重点case 3: GPIO_ResetBits(GPIO_LED,GPIO_DS4_PIN);/点亮 DS4Break;易错def
7、ault: GPIO_ResetBits(GPIO_LED,GPIO_DS1_PIN|GPIO_DS2_PIN| GPIO_DS3_PIN| GPIO_D4_PIN )/*打开4 个 LED 灯/*延时函数*/Void Delay(u32 nCount)for(;nCount!=0;nCount-);关于.h 文件,和函数声明的说明头文件 main.h 包含 stm32f10x.h;a.h, b.h, c.h, d.h,程序文件 main.c;a.c,b.c,c.c,d.c在写 a,b,c,d 的.h 头文件时,要包含 main.h 因为其可能用到 stm32f10x.h 头文件。在写 a,b,c,d 的.c 程序文件时,包含自己的.h 文件就好了.函数声明时,若一个函数 a.c 要用到到 b.c 函数,则要在 a.h 文件里声明一下 b.c 函数,注意函数名、有无返回值等要一致。同时要注意在写某函数时,无返回值要在前面加 void(如:void LED(void))Keil 软件在用 C/C+时要注意最后多出一行,以免有警告出现。main.h 包含a. hb. hc. hd. hstm32f10x.h等等main.c 包含a. cb. cc. cd. c等等