查看: 3311|回复: 2

【Gokit2】LED与按键操作

[复制链接]
  • TA的每日心情
    奋斗
    2022-4-7 16:37
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-6-2 21:14:32 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 mikeliujia 于 2015-6-2 21:14 编辑

    Gokit2板载4颗可编程控制LED供用户做指示灯使用,1颗可编程控制用户按键。下面基于Gokit2的LED和用户按键熟悉下STM32F103C8的GPIO口操作。
    一、新建工程模版
    1、打开keil,新建工程,工程名为gokit_io
    gokit01.JPG
    2、选择目标芯片——STM32F103C8
    gokit02.JPG
    3、勾选coreStartupFrameworkGPIORCC
    gokit03.JPG
    4、创建main.c文件
    gokit04.JPG
    5、为了将系统文件和工程文件区分开,创建一个User文件夹,然后将main.c保存在这个文件夹下 gokit05.JPG
    6、main.c文件放到工程项目下,点击configure file按钮
    gokit06.JPG
    7、在弹出的对话框中点击Add files按钮,选择刚才创建的main.c文件,选中后点击add,关闭,可见main.c已被添加
    gokit07.JPG
    8、将组名改成User,工程名改为gokit_io
    gokit08.JPG

    gokit09.JPG
    9、下面配置工程,点击options for target按钮,在output子项勾选create HEX File
    gokit10.JPG
    C/C++子项下Define框中定义一个宏定义,USE_STDPERIRH_DEIVERinclude path选择User文件夹路径,为以后自定义头文件选择包含路径

    10、工程创建完毕,可以进行测试,编译完成没有报错(有警告)
    gokit11.JPG

    二、创建LED测试程序
    1、接下来编写测试LED闪烁的代码

    gokit12.JPG

    #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的操作
    gokit13.JPG
    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不亮
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-6-3 08:30:45 | 显示全部楼层
    多谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-6-3 08:43:17 | 显示全部楼层
    不错不错            
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 06:27 , Processed in 0.135577 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.