2回答

0收藏

【Gokit2】LED与按键操作

机智云GoKit 机智云GoKit 3789 人阅读 | 2 人回复 | 2015-06-02

本帖最后由 mikeliujia 于 2015-6-2 21:14 编辑

Gokit2板载4颗可编程控制LED供用户做指示灯使用,1颗可编程控制用户按键。下面基于Gokit2的LED和用户按键熟悉下STM32F103C8的GPIO口操作。
一、新建工程模版
1、打开keil,新建工程,工程名为gokit_io

2、选择目标芯片——STM32F103C8

3、勾选coreStartupFrameworkGPIORCC

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_DEIVERinclude 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文件,观察实验现象,LED4LED6会同时闪烁

三、创建按键测试程序
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不亮
分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

奋斗哥

发表于 2015-6-3 08:30:45 | 只看该作者

多谢楼主分享
板凳

tjcfeng

发表于 2015-6-3 08:43:17 | 只看该作者

不错不错            
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条