4回答

1收藏

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

STMCU STMCU 4010 人阅读 | 4 人回复 | 2014-08-20

本节我们将原理图、代码和验证三部分来分析,主要是从下面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)




[原创] 班门弄斧——个人原创基地
https://www.cirmall.com/bbs/thread-41384-1-1.html
分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

奋斗哥

发表于 2014-8-20 21:07:02 | 只看该作者

太好的教程了!
板凳

outstanding1573

发表于 2014-8-21 15:14:47 | 只看该作者

奋斗哥 发表于 2014-8-20 21:07
太好的教程了!

谢谢 欢迎光临 多多指点
[原创] 班门弄斧——个人原创基地
https://www.cirmall.com/bbs/thread-41384-1-1.html
地板

飞翔-396652

发表于 2014-12-8 12:12:22 | 只看该作者

支持强悍  楼主威武
5#

outstanding1573

发表于 2014-12-8 20:10:10 | 只看该作者

飞翔-396652 发表于 2014-12-8 12:12
支持强悍  楼主威武

   欢迎啊
[原创] 班门弄斧——个人原创基地
https://www.cirmall.com/bbs/thread-41384-1-1.html
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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