本帖最后由 mikeliujia 于 2015-6-2 21:14 编辑
Gokit2板载4颗可编程控制LED供用户做指示灯使用,1颗可编程控制用户按键。下面基于Gokit2的LED和用户按键熟悉下STM32F103C8的GPIO口操作。
一、新建工程模版 1、打开keil,新建工程,工程名为gokit_io
2、选择目标芯片——STM32F103C8
3、勾选core、Startup、Framework、GPIO、RCC
4、创建main.c文件
5、为了将系统文件和工程文件区分开,创建一个User文件夹,然后将main.c保存在这个文件夹下
6、将main.c文件放到工程项目下,点击configure file按钮
7、在弹出的对话框中点击Add files按钮,选择刚才创建的main.c文件,选中后点击add,关闭,可见main.c已被添加
8、将组名改成User,工程名改为gokit_io
9、下面配置工程,点击options for target按钮,在output子项勾选create HEX File;
在C/C++子项下Define框中定义一个宏定义,USE_STDPERIRH_DEIVER;include path选择User文件夹路径,为以后自定义头文件选择包含路径
10、工程创建完毕,可以进行测试,编译完成没有报错(有警告)
二、创建LED测试程序
1、接下来编写测试LED闪烁的代码
#include <stdio.h> #include "stm32f10x.h" #include <stm32f10x_gpio.h> GPIO_InitTypeDef GPIO_LED; void Delay(int times) { int i = 0; while(times--) { for (i=0; i<0xffff; i++) ; } } int main(int argc, char **atgv) { SystemInit(); //init LED pin to GPIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_LED.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_LED.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_LED.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_LED); while(1) { GPIO_SetBits(GPIOB, GPIO_Pin_1); GPIO_SetBits(GPIOB, GPIO_Pin_14); Delay(10); GPIO_ResetBits(GPIOB, GPIO_Pin_1); GPIO_ResetBits(GPIOB, GPIO_Pin_14); Delay(10); return 0; }
2、通过串口下载生成的HEX文件,观察实验现象,LED4和LED6会同时闪烁
三、创建按键测试程序
1、下面介绍按键和LED的操作
2、将上面代码修改为 #include <stdio.h> #include "stm32f10x.h" #include <stm32f10x_gpio.h>
GPIO_InitTypeDef GPIO_LED; GPIO_InitTypeDef GPIO_KEY;
void Delay(int times) { int i = 0; while(times--) { for (i=0; i<0xffff; i++) ; } }
int main(int argc, char **atgv) { SystemInit(); //init LED pin to GPIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_LED.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_LED.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_LED.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_LED); //init Key pin to GPIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_LED.GPIO_Pin = GPIO_Pin_13; GPIO_LED.GPIO_Mode = GPIO_Mode_IPU; // PC13上拉 GPIO_LED.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_LED); while(1) { /* GPIO_SetBits(GPIOB, GPIO_Pin_1); GPIO_SetBits(GPIOB, GPIO_Pin_14); Delay(10); GPIO_ResetBits(GPIOB, GPIO_Pin_1); GPIO_ResetBits(GPIOB, GPIO_Pin_14); Delay(10); */ Delay(5); if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)) { Delay(10); // 延时去抖 if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)) GPIO_SetBits(GPIOB, GPIO_Pin_15); } else { GPIO_ResetBits(GPIOB, GPIO_Pin_15); } } return 0; } 3、通过串口下载生成的HEX文件,观察实验现象,按下K1用户按键,对应的LED7亮,否则LED7不亮 |