今天学习了STM32F1x系列的按键输入实验,具体上分为三个步骤:
(1)使能按键对应IO口时钟,调用函数:RCC_APB2PeriphClockCmd()
(2)初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init()
(3)扫描IO口电平(库函数/寄存器/位操作)
主要说一下其中的按键扫描,思路图如下:
(1)按键扫描(支持连续按)的一般思路代码:
u8 KEY_Scan(void)
{
if(KEY按下)
{
delay_ms(10) ; //延时10-20ms 用来去抖
if(KEY确实按下)
{
return KEY_Value ;
}
return 无效值 ;
}
}
(2)按键扫描(不支持连续按)的一般思路代码:(就是说按键按下了,没有松开只能算按了一次)
在这里会用到c语言里的关键字:static
a. static声明的局部变量,存储在静态存储区
b. 它在函数调用结束之后,不会被释放,它的值会一直保留下来
c. 所以可以说static声明的局部变量,具有记忆功能
u8 KEY_Scan(void)
{
static u8 key_up = 1 ;
if(key_up&&KEY按下)
{
dealy_ms(10) ; //延时,防抖
key_up = 0 ; //标记这次key已经按下
if(KEY确实按下)
{
return KEY_Value ;
}
}
else if(KEY没有按下)
{
return 没有按下 ;
}
}
(3)按键扫描(两种模式合二为一)的一般思路:
u8 KEY_Scan(u8 mode)
{
static u8 key_up = 1 ;
if(mode == 1)
{
key_up = 1 ; //支持连续按
}
if(key_up&&KEY按下)
{
dealy_ms(10) ; //延时,防抖
key_up = 0 ; //标记这次key已经按下
if(KEY确实按下)
{
return KEY_Value ;
}
}
else if(KEY没有按下)
{
return 没有按下 ;
}
}
对函数传入的参数进行判断,就可以将两种模式合二为一,放入一个函数中去处理。
关键字:STM32F1x系列 按键输入 时钟
引用地址:
STM32F1x系列——按键输入实验
推荐阅读最新更新时间:2024-11-09 16:00
STM32F4_ RCC系统时钟配置及描述
Ⅰ、概述 对于系统时钟应该都知道它的作用,就是驱动整个芯片工作的心脏,如果没有了它,就等于人没有了心跳。 对于使用开发板学习的朋友来说,RCC系统时钟这一块知识估计没怎么去配置过,原因在于开发板提供的晶振基本都是官方标准的时钟频率,使用官方的标准库,这样系统时钟就是默认的配置,也就是默认的频率。但对于自己设计开发板,或者想要改变系统时钟频率(如:降低功耗就需要降频)的朋友来说,配置系统时钟就有必要了。 关于时钟这一块对定时器(TIM、RTC、WDG等)相关的外设也比较重要,因为要求精准,就需要时钟频率精准。 Ⅱ、关于时钟 1.时钟分类 STM32芯片(所有型号)的时钟包含4类: HSE(High Speed Exter
[单片机]
STM32 RTC时钟晶振 调电RTC计数器不走的问题
在初始化配置的情况下,RTC 日历时间我们默认设置一个时间点,此时备份区设置一个默认参数,表示已经设置过,后期只需要更新读取RTC- CNT 即可,如果出现断电计数器不走的情况,在生产上遇到,晶振贴片没有贴好,导致出厂默认读取的外部高速晶振HSE,这样后期不去掉纽扣电池点的话,默认都是外部高速晶振,这样外币32.768kHZ的晶振实际是没有用的,借此希望给大家一点提示。
[单片机]
时钟控制命令
LKCONCMD (0xC6) – 时钟控制命令 位 名称 复位 R/W 描述 7 OSC32K 1 R/W 32 kHz 时钟振荡器选择。 设置该位只能发起一个时钟源改变。 CLKCONSTA.OSC32K 反映当前的设置。当要改变该位必须选择 16 MHz RCOSC 作为系统时钟。 0 : 32 kHz XOSC 1 : 32 kHz RCOSC 6 OSC 1 R/W 系统 时钟 源 选择 。设置该位只能发起一个时钟源改变。 CLKCONSTA.OSC 反映当前的设置。 0 : 32 MHz XOSC 1 : 16 MHz RCOSC 5:3 TICKSPD 001 R/W 定时器标记输出设置。 不能高于通过
[单片机]
单片机stm32时钟频率和配置方法详解
单片机stm32时钟频率 STM32F103内部8M的内部震荡,经过倍频后最高可以达到72M。目前TI的M3系列芯片最高频率可以达到80M。 在stm32固件库3.0中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit()。但在调用前还需要进行一些宏定义的设置,具体的设置在system_stm32f10x.c文件中。 文件开头就有一个这样的定义: //#define SYSCLK_FREQ_HSE HSE_Value //#define SYSCLK_FREQ_20MHz 20000000 //#define SYSCLK_FREQ_36MHz
[单片机]
Microchip发布2.3版TimeProvider® 4100主时钟授时和同步系统
Microchip发布2.3版TimeProvider® 4100主时钟授时和同步系统,保护关键基础设施网络 Microchip全新主时钟产品功能进一步增强,提高了部署的灵活性、安全性和可扩展性 包括5G移动、公用事业、有线电视、交通、国防和数据中心等在内的基础设施通信网络需要从全球定位系统(GPS)或其他全球卫星系统获取并维持精确授时信号。当全球导航卫星系统(GNSS)信号不可用时,这些网络需要提供冗余的备份系统。为满足这一要求,Microchip (美国微芯科技公司)今日推出采用业界最新 IEEE® 1588 v2.1安全标准的2.3版TimeProvider® 4100精确授时主时钟产品,在保护授时系统的同时还
[网络通信]
单片机_LCD12864显示自己制作的图片(时钟为例)
显示屏上显示自己想要的背景图,然后再在背景图上增加相应的功能,应用ps可以很方便的修改图片为自己想要的。 准备软件: phtotshop cs3 自用的一款,小巧非专业实用的ps软件,下载地址如下, 链接:https://pan.baidu.com/s/1R2ydl_TXEP7pWUv8VFlMbA 提取码:a1rz 字模提取软件 链接:https://pan.baidu.com/s/1aHq8Noin0VTgdnHIhhSGfQ 提取码:uiqg 1.用ps(Photoshop)新建一个 注意宽度和高度要和12864的一样,选择位图,为一位。 2,为了方便调整图片,我们选择图像模式为灰度,(
[单片机]
MSP432E401Y-时钟输出PWM
关于时钟的PWM配置以及相关寄存器翻译在上篇文章中已经写过了,不做更多的描述。有问题移步MSP432E401Y-用定时器中断控制LED闪烁_丢萌的博客-CSDN博客。 MSP432E401Y自带的PWM口的输出会在下一篇详细翻译以及介绍。 关于定时器输出PWM的定义方式其实和中断差不多,具体的寄存器操作大同小异。这次参考了官方库修改系统频率(120兆HZ)然后用于生成2KHZ的PWM波,占空比为66% 具体代码如下 /* DriverLib Includes */ #include ti/devices/msp432e4/driverlib/driverlib.h /* Standard Includes */
[单片机]
STM32 定时器时钟配置技巧
众所周知 STM32 的时钟配置比较复杂,而定时器的时钟配置更是 ‘奇葩‘。 如下图(截图自STM32F4编程手册)APB的预分频器分频系数如果不为1,则定时器的时钟就倍频了反而。 配置技巧 下面以STM32F4为例, 这里配置定时器8的计数频率为 10Khz,从时钟树中可知TIM8挂在APB2总线 获取当前 APB2(PLCK2) 的时钟频率 获取 APB2 预分频器的分频值 根据上述参数判断,如果分频值不为1,则定时器时钟 x2 .Prescaler = xxx 这是一个推荐的写法 int hw_timer_init(TIM_HandleTypeDef *htim) { uint32_t FLatency, t8
[单片机]