你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 5486|回复: 1

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

[复制链接]

30

主题

318

回帖

0

蝴蝶豆

中级会员

最后登录
2017-12-6
发表于 2014-3-18 09:04:02 | 显示全部楼层 |阅读模式
本节我们将原理图、代码和验证三部分来分析,主要是从下面3个方面进行讲解:
1.STM32F4探索套件的原理图部分
2.程序编写
3.下载验证

一、STM32F4探索套件的原理图部分:
下面主要看的是STM32F4探索套件的LED灯部分和用户按键部分的原理图。
1.用户LED灯原理图
  1.jpg
2.用户按键原理图
  2.png
系列3已经讲解了LED灯。下面主要是按键部分。
FIFO是先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。按照这个思想,按键本身支持FIFO,按下,弹起,长按和组合功能的。

二、程序编写
在写程序的时候,首先按一下步骤检查是否已经完备。
1.确保JP3和CN4跳线是连接的【Discovery模式】。
2.通过Min USB把开发板和电脑连接,USB供电。
3.通过ST-Link/V2来下载程序。
4.检查USB通讯的LED1灯是否亮,电源灯LED2是否亮(3.3v)
5.以上正常就可以进行下面的工作了。
通过上面的原理图我们可以实现按键的FIFO。
例程整体功能描述:
1.创建一个1ms的滴答定时器中断以实现软件定时器
2.主程序创建一个100ms的自动重装软件定时器,LED1每100ms翻转一次。
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);    /* 启动1个500ms的自动重装的定时器 */

    /* 进入主程序循环体 */
    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进行烧录下载,效果图,如下图所示。绿灯闪烁,只用用户按键按下红灯才亮,松手就熄灭。
  4.jpg
 
 
3.jpg
<
回复

使用道具 举报

25

主题

455

回帖

63

蝴蝶豆

金牌会员

最后登录
2020-9-21
发表于 2015-9-18 13:59:17 | 显示全部楼层
这是神马展览?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版