查看: 3369|回复: 4

【STM32F4探索套件】序列之4:按键FIFO机制

[复制链接]
  • TA的每日心情
    开心
    2019-6-24 16:41
  • 签到天数: 709 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-8-20 11:08:59 | 显示全部楼层 |阅读模式
    分享到:
    本节我们将原理图、代码和验证三部分来分析,主要是从下面3个方面进行讲解:
    1.STM32F4探索套件的原理图部分
    2.程序编写
    3.下载验证
    一、STM32F4探索套件的原理图部分:
    下面主要看的是STM32F4探索套件的LED灯部分和用户按键部分的原理图。
    1.用户LED灯原理图
    file:///f:/INSTAL~1/360/360se6/USERDA~1/Temp/224924~1.PNG
    2.用户按键原理图

    系列3已经讲解了LED灯。下面主要是按键部分。
    FIFO是先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。按照这个思想,按键本身支持FIFO,按下,弹起,长按和组合功能的。
    二、程序编写
    在写程序的时候,首先按一下步骤检查是否已经完备。
    1.确保JP3CN4跳线是连接的【Discovery模式】。
    2.通过Min USB把开发板和电脑连接,USB供电。
    3.通过ST-Link/V2来下载程序。
    4.检查USB通讯的LED1灯是否亮,电源灯LED2是否亮(3.3v)
    5.以上正常就可以进行下面的工作了。
    通过上面的原理图我们可以实现按键的FIFO
    例程整体功能描述:
    1.创建一个1ms的滴答定时器中断以实现软件定时器
    2.主程序创建一个100ms的自动重装软件定时器,LED1100ms翻转一次。
    3.创建一个按键的FIFO
    4.K1按键按下点亮LED2,弹起熄灭LED2
    /*
    * Copyright (c) 2014, 鑫亮电子
    * All rights reserved.
    *
    * 文件名称:主函数
    * 摘    要:本期教程是为官方F429探索套件做的按键FIFO实验
    *              整体功能如下:
    *              1. 创建一个1ms的滴答定时器中断以实现软件定时器
    *              2. 主程序创建一个100ms的自动重装软件定时器,LED1
    *                 100ms翻转一次。
    *              3. 创建一个按键的FIFO
    *              4. K1按键按下点亮LED2,弹起熄灭LED2
    * 硬件平台:STM32F4探索套件
    * 当前版本:V0.0
    * 作    者:@鑫亮电子(QQ:2550634286)
    * 完成日期:2014-02-26
    * 修改记录:
    */
    #include "bsp.h"                        /* 底层硬件驱动 */
    /* 定义例程名和例程发布日期 */
    #define EXAMPLE_NAME        "F429-002_按键FIFO"
    #define EXAMPLE_DATE        "2013-12-05"
    #define DEMO_VER                "1.0"
    /***************************************
    * 函数描述:主函数
    * 输入参数:No
    * 返 回 值:No
    * 说    明:跑马灯
    * 修改记录:
    ****************************************/        
    int main(void)
    {
            uint8_t ucKeyCode;                /* 按键代码 */
            
            /*ST固件库中的启动文件已经执行了 SystemInit() 函数,该函数在system_stm32f4xx.c 文件,主要功能是配置CPU系统的时钟,内部Flash访问时序,配置FSMC用于外部SRAM*/
            bsp_Init();                /* 硬件初始化 */
            
            bsp_StartAutoTimer(0, 100);        /* 启动1500ms的自动重装的定时器 */
            /* 进入主程序循环体 */
            while (1)
            {
                    bsp_Idle();                /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
                   
                    if (bsp_CheckTimer(0))        /* 判断定时器超时时间 */
                    {
                            bsp_LedToggle(1);        /* 翻转LED4的状态 */
                    }
                    ucKeyCode = bsp_GetKey();        /* 读取键值, 无键按下时返回 KEY_NONE = 0 */
                    if (ucKeyCode != KEY_NONE)
                    {
                   
                            switch (ucKeyCode)
                            {
                                    case KEY_DOWN_K1:                        /* K1键按下 */
                                            bsp_LedOn(2);
                                            break;
                                    
                                    case KEY_UP_K1:                                /* K1键弹起 */
                                            bsp_LedOff(2);
                                            break;
                                    
                                    /* 长按有点问题,怀疑和按键的外部滤波有关 */
                                    case KEY_LONG_K1:                        /* K1键长按 */
                                            bsp_LedToggle(2);
                                            break;
                                    
                                    default:
                                            /* 其他的键值不处理 */
                                            break;
                            }
                    }
            }
    }
    /***************************** 鑫亮电子 (END OF FILE) *********************************/
    三、下载验证
    通过Min-USB进行烧录下载,效果图,如下图所示。绿灯闪烁,只用用户按键按下红灯才亮,松手就熄灭。

    2.jpg (284 KB, 下载次数: 0)




    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-8-20 21:07:02 | 显示全部楼层
    太好的教程了!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-6-24 16:41
  • 签到天数: 709 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-8-21 15:14:47 | 显示全部楼层
    奋斗哥 发表于 2014-8-20 21:07
    太好的教程了!

    谢谢 欢迎光临 多多指点
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-3-24 10:15
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-12-8 12:12:22 | 显示全部楼层
    支持强悍  楼主威武
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-6-24 16:41
  • 签到天数: 709 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-12-8 20:10:10 | 显示全部楼层
    飞翔-396652 发表于 2014-12-8 12:12
    支持强悍  楼主威武

       欢迎啊
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 13:24 , Processed in 0.157082 second(s), 23 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.