stm32F407的按键FIFO应用

2020-08-04来源: 51hei关键字:stm32F407  按键  FIFO应用

参考并理解安富莱的代码,能有按下,弹起和长按,并且长按可以连发,在程序里修改就可以


单片机源程序如下:

/* USER CODE END Header */


/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "usart.h"

#include "gpio.h"


/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include "KeyFIFO.h"

/* USER CODE END Includes */


/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */


/* USER CODE END PTD */


/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */


/* USER CODE END PD */


/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */


/* USER CODE END PM */


/* Private variables ---------------------------------------------------------*/


/* USER CODE BEGIN PV */


/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

/* USER CODE BEGIN PFP */

static void vTimeBaseTask(void);

/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */


/* USER CODE END 0 */


/**

  * @brief  The application entry point.

  * @retval int

  */

int main(void)

{

  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */

  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

        bsp_InitKeyVar();

        printf("startrn");

  while (1)

  {

                vTimeBaseTask();

                ProcessKey();

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

               

  }

  /* USER CODE END 3 */

}


/**

  * @brief System Clock Configuration

  * @retval None

  */

void SystemClock_Config(void)

{

  RCC_OscInitTypeDef RCC_OscInitStruct = {0};

  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


  /**Configure the main internal regulator output voltage

  */

  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  /**Initializes the CPU, AHB and APB busses clocks

  */

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

  RCC_OscInitStruct.HSEState = RCC_HSE_ON;

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  RCC_OscInitStruct.PLL.PLLM = 25;

  RCC_OscInitStruct.PLL.PLLN = 336;

  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;

  RCC_OscInitStruct.PLL.PLLQ = 4;

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

  {

    Error_Handler();

  }

  /**Initializes the CPU, AHB and APB busses clocks

  */

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;


  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)

  {

    Error_Handler();

  }

}


/* USER CODE BEGIN 4 */

/**********************************************************************************************************

*        函 数 名: HAL_IncTick

*        功能说明: 复写Systick中断执行函数

*        形    参: 无

*        返 回 值: 无

**********************************************************************************************************/

void HAL_IncTick(void)

{

        extern __IO uint32_t uwTick;

        extern HAL_TickFreqTypeDef uwTickFreq;

        static uint8_t KeyScanCycle = 0;

       

  uwTick += uwTickFreq;

       

        if(KeyScanCycle++ == KEY_TIMECYCLE)

        {

                KeyScanCycle = 0;

                xtFlag.KeyButton = 1;

        }

       

}


/**********************************************************************************************************

*        函 数 名: vTimeBaseTask

*        功能说明: 定时执行的函数,放到主循环里执行

*        形    参: 无

*        返 回 值: 无

**********************************************************************************************************/

static void vTimeBaseTask(void)

{

        if(xtFlag.KeyButton)

        {

                xtFlag.KeyButton = 0;

                bsp_KeyScan();

        }

}


/* USER CODE END 4 */


/**

  * @brief  This function is executed in case of error occurrence.

  * @retval None

  */

void Error_Handler(void)

{

  /* USER CODE BEGIN Error_Handler_Debug */

  /* User can add his own implementation to report the HAL error return state */


  /* USER CODE END Error_Handler_Debug */

}


#ifdef  USE_FULL_ASSERT

/**

  * @brief  Reports the name of the source file and the source line number

  *         where the assert_param error has occurred.

  * @param  file: pointer to the source file name

  * @param  line: assert_param error line source number

  * @retval None

  */

void assert_failed(uint8_t *file, uint32_t line)

{

  /* USER CODE BEGIN 6 */

  /* User can add his own implementation to report the file name and line number,

     tex: printf("Wrong parameters value: file %s on line %drn", file, line) */

  /* USER CODE END 6 */

}

#endif /* USE_FULL_ASSERT */


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


关键字:stm32F407  按键  FIFO应用 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic505244.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32f103ADC测试程序,16路ADC采样+DMA传送数据
下一篇:基于stm32做的遥控器源程序(按键和摇杆均有)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F407上移植emwin
环境:主机:WIN8开发环境:MDK5.13emwin版本:STemWinLibrary522mcu: stm32f407VGT6开发板:安富莱STM32-X3TFT型号:艾蓝2.8寸TFT,主控芯片:ILI9325说明:在STM32F407上移植emwin,驱动屏幕接口为FSMC移植步骤:1.MDK新建文件结构:2.GUIConf.c文件修改    a)增加宏定义:#define GUI_NUMBYTES  (1024 * 80)#define GUI_BLOCKSIZE 0x80  b)GUI_X_Config(void)函数中增加语句:GUI_ALLOC_SetAvBlockSize
发表于 2020-09-24
<font color='red'>STM32F407</font>上移植emwin
STM32F407的串口采用DMA收发数据
环境:主机:WIN8开发环境:MDK5.13mcu: stm32f407VGT6说明:之前用STM32F103实现DMA收发串口数据,现在项目中采用STM32F407,所以将此机制移植到F4上。STM32F103上用DMA收发串口数据文章:STM32的串口采用DMA方式发送数据测试STM32的串口采用DMA方式接收数据测试源代码:串口初始化代码:/********************************************************************** 初始化串口
发表于 2020-09-24
STM32F407学习笔记----GPIO
1、GPIO InitTypeDef    初始化所需要的IO口typedef struct{  uint32_t GPIO_Pin;              /*!< Specifies the GPIO pins to be configured.指定需要配置的引脚                                   
发表于 2020-09-02
死磕到底2—STM32F407驱动无FIFO无时钟ov7670
上次的F103驱动OV7670究竟没有实用价值,我又买了一块STM32F407开发小板,驱动了无FIFO无时钟ov7670,320*240每秒28帧(应该还可以快点)。感觉到这个方案比用有FIFO的划算,STM32F407开发小板+ov7670=60元左右。一、407带摄像头接口,取摄像头数据由片内硬件操作,超爽。二、我用示波器看PA8输出时钟,幅度很小,这不是程序问题,是示波器频率不够,      调试时候不要怀疑这个信号。我在这里白白纠结了几天。三、摄像头相关的口线比较多,一根口线多处设置,还有硬件连接的问题,容易出错。       调式
发表于 2020-08-12
stm32f407驱动步进电机(用限位传感器限制位置)
和步进电机的转速成正比。对于最佳输入要求,此信号占空比最好 1:1,脉冲信号的频率不大于100KHz。连接方式有两种方法:(1)共阳极连接将驱动器的ENA+,DIR+,PUL+接地, 阴极接电,也就是开发板的相对应的控制管脚。(2)共阴极连接如STM32F407接线如下:ENA+(驱动器)  PE6(开发板)DIR+(驱动器)  PE5(开发板)PUL+(驱动器)  PC7(开发板)ENA- DIR- PUL-(驱动器) GND(开发板)3. High Voltage区域该区域用于驱动器与步进电机连接。和下图类似:电机接法:这里我采用的是驱动器接法是共阴极接法对于电源,开发板使用
发表于 2020-08-04
<font color='red'>stm32f407</font>驱动步进电机(用限位传感器限制位置)
助力抗“疫” 电梯按键“变形记”
世健可以提供参考设计并协助客户开发。Terence介绍称,通过采用该技术,电梯制造商或消费者可以用一体化塑料保护盖板替换此前的机械按键,让电梯控制板完全成为无缝状态。得益于Microchip在触摸技术方面的精深知识和经验,其提供的电容触摸技术具有抗噪声、抗潮湿干扰和低功耗等特性。 抗噪声 对于电容式传感而言,主要的噪声来源于智能手机、无线电收发器、电机和插座等,分为差模噪声和共模噪声。相对而言,触摸式电容最大的敌人是共模噪声,由于其在设计后期进行测试,并且表现不明显,因此共模噪声让设计人员着实头疼。 为解决这个难题,Microchip电容触屏技术采用先进的Driven-shield +技术。和传统
发表于 2020-09-24
助力抗“疫” 电梯<font color='red'>按键</font>“变形记”
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved