STM32——05-按键、时钟控制、中断复位 点亮LED灯

编程实现点灯
常用的 GPIO HAL 库函数:
void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init );
void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState
PinState );
void HAL_GPIO_TogglePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin );
结构体 GPIO_InitTypeDef 定义:
typedef struct
{
uint32_t Pin ;
uint32_t Mode ;
uint32_t Pull ;
uint32_t Speed ;
} GPIO_InitTypeDef ;
按键点亮LED灯(轮询法)
输入(按键):
- KEY1:PA0
- KEY2:PA1
输出( LED 灯):
- LED1:PB8
- LED2:PB9
#define KEY_ON 0 #define KEY_OFF 1 //自己编写的检测按键返回值的函数 uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) {if( HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == GPIO_PIN_RESET) { /* 按键按下 */return KEY_ON; } else { /* 按键松开 */while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET);return KEY_OFF; } }while (1) {/* USER CODE END WHILE */if(Key_Scan(GPIOA,GPIO_PIN_0) == KEY_ON)HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);if(Key_Scan(GPIOA,GPIO_PIN_1) == KEY_ON)HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);/* USER CODE BEGIN 3 */ }
四、复位和时钟控制( RCC ) - 复位系统复位当发生以下任一事件时,产生一个系统复位:1. NRST 引脚上的低电平 ( 外部复位 )2. 窗口看门狗计数终止 (WWDG 复位 )3. 独立看门狗计数终止 (IWDG 复位 )4. 软件复位 (SW 复位)5. 低功耗管理复位电源复位当以下事件中之一发生时,产生电源复位:1. 上电 / 掉电复位 (POR/PDR 复位 )2. 从待机模式中返回备份区复位备份区域拥有两个专门的复位,它们只影响备份区域。当以下事件中之一发生时,产生备份区域复位。1. 软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)( 见 6.3.9 节 ) 中的BDRST 位产生。2. 在 VDD 和 VBAT 两者掉电的前提下, VDD 或 VBAT 上电将引发备份区域复位。时钟控制什么是时钟?时钟打开,对应的设备才会工作。时钟来源三种不同的时钟源可被用来驱动系统时钟 (SYSCLK)HSI 振荡器时钟(高速内部时钟)HSE 振荡器时钟(高速外部时钟)PLL 时钟(锁相环倍频时钟)二级时钟源 :40kHz 低速内部 RC ( LSIRC )振荡器32.768kHz 低速外部晶体( LSE 晶体)如何使用 CubeMX 配置时钟五、中断和事件中断概述什么是中断?中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。什么是 EXTI ?外部中断 / 事件控制器 (EXTI) 管理了控制器的 23 个中断 / 事件线。每个中断 / 事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。 EXTI 可以实现对每个中断 / 事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不同。产生中断线路目的是把输入信号输入到 NVIC ,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级的。 EXTI 初始化结构体:typedef struct{// 中断 / 事件线uint32_t EXTI_Line ; /*!< Specifies the EXTI lines to be enabled ordisabled.This parameter can be any combination valueof @ref EXTI_Lines *///EXTI 模式EXTIMode_TypeDef EXTI_Mode ; /*!< Specifies the mode for the EXTI lines.This parameter can be a value of @refEXTIMode_TypeDef */// 触发类型EXTITrigger_TypeDef EXTI_Trigger ; /*!< Specifies the trigger signal active edge forthe EXTI lines.This parameter can be a value of @refEXTITrigger_TypeDef *///EXTI 控制FunctionalState EXTI_LineCmd ; /*!< Specifies the new state of the selected EXTIlines.This parameter can be set either to ENABLE orDISABLE */} EXTI_InitTypeDef ;中断 / 事件线:# define EXTI_Line0 (( uint32_t ) 0x00001 ) /*!< External interrupt line 0 */# define EXTI_Line1 (( uint32_t ) 0x00002 ) /*!< External interrupt line 1 */# define EXTI_Line2 (( uint32_t ) 0x00004 ) /*!< External interrupt line 2 */# define EXTI_Line3 (( uint32_t ) 0x00008 ) /*!< External interrupt line 3 */# define EXTI_Line4 (( uint32_t ) 0x00010 ) /*!< External interrupt line 4 */# define EXTI_Line5 (( uint32_t ) 0x00020 ) /*!< External interrupt line 5 */# define EXTI_Line6 (( uint32_t ) 0x00040 ) /*!< External interrupt line 6 */# define EXTI_Line7 (( uint32_t ) 0x00080 ) /*!< External interrupt line 7 */# define EXTI_Line8 (( uint32_t ) 0x00100 ) /*!< External interrupt line 8 */# define EXTI_Line9 (( uint32_t ) 0x00200 ) /*!< External interrupt line 9 */# define EXTI_Line10 (( uint32_t ) 0x00400 ) /*!< External interrupt line 10 */# define EXTI_Line11 (( uint32_t ) 0x00800 ) /*!< External interrupt line 11 */# define EXTI_Line12 (( uint32_t ) 0x01000 ) /*!< External interrupt line 12 */# define EXTI_Line13 (( uint32_t ) 0x02000 ) /*!< External interrupt line 13 */# define EXTI_Line14 (( uint32_t ) 0x04000 ) /*!< External interrupt line 14 */# define EXTI_Line15 (( uint32_t ) 0x08000 ) /*!< External interrupt line 15 */# define EXTI_Line16 (( uint32_t ) 0x10000 ) /*!< External interrupt line 16Connected to the PVD Output */# define EXTI_Line17 (( uint32_t ) 0x20000 ) /*!< External interrupt line 17Connected to the RTC Alarm event */# define EXTI_Line18 (( uint32_t ) 0x40000 ) /*!< External interrupt line 18Connected to the USB OTG FS Wakeup from suspend event */# define EXTI_Line19 (( uint32_t ) 0x80000 ) /*!< External interrupt line 19Connected to the Ethernet Wakeup event */# define EXTI_Line20 (( uint32_t ) 0x00100000 ) /*!< External interrupt line 20Connected to the USB OTG HS (configured in FS) Wakeup event */# define EXTI_Line21 (( uint32_t ) 0x00200000 ) /*!< External interrupt line 21Connected to the RTC Tamper and Time Stamp events */# define EXTI_Line22 (( uint32_t ) 0x00400000 ) /*!< External interrupt line 22Connected to the RTC Wakeup event */
EXTI模式:
typedef enum{EXTI_Mode_Interrupt = 0x00 , // 产生中断EXTI_Mode_Event = 0x04 // 产生事件} EXTIMode_TypeDef ;
触发类型:
typedef enum{EXTI_Trigger_Rising = 0x08 , // 上升沿EXTI_Trigger_Falling = 0x0C , // 下降沿EXTI_Trigger_Rising_Falling = 0x10 // 上升沿和下降沿都触发} EXTITrigger_TypeDef ;
typedef struct{uint8_t NVIC_IRQChannel ;uint8_t NVIC_IRQChannelPreemptionPriority ; // 抢断优先级uint8_t NVIC_IRQChannelSubPriority ; // 响应优先级FunctionalState NVIC_IRQChannelCmd ;} NVIC_InitTypeDef ;

1.2打开外部时钟晶振
1.3 设置总线


2.2按键(配置按键为外部中断模式)

相关文章:

STM32——05-按键、时钟控制、中断复位 点亮LED灯
如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数: void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_Togg…...
VBA下载二进制文件,文本读写
这里使用了vba如下两个对象: Microsoft.XMLHTTP:文件读写,可读写二进制,可指定编码,对于utf-8编码文本文件使用FSO的TextStream对象打开,读取到的内容可能会出现乱码,可以使用该对象打开;前期绑定添加引用…...
MongoDB结合Robo 3T 1.4.3的简单操作
MongoDB的简单操作结合Robo 3T 1.4.3工具进行查询。 常用的正则表达式 /* 29 */ 正则表达式 /\* [0-9]* \*/ "_id" : ObjectId("5f3d05cdfd2aa9a8a7"), 正则表达式 \"([^\"]*_id)\".*, 使用方法:查询结果去掉注释和不需要…...
【学习笔记】[AGC048D] Pocky Game
这是一个非平等博弈。但是只要求你判断胜负,本身也不是一道结论题,所以可以用 D P DP DP来解决。 结论:第一堆石子剩的越多,先手玩家获胜的概率越大。这直接引出了一个非常感性的结论:每次取石子时要么取一堆…...

Qgis中进行Shp和Excel属性连接实现百强县公共预算空间分析
前言 在之前的博文中,将2022的全国百强县一般公共预算收入的数据下载到了本地,博客原文地址:一种使用Java的快速将Web中表格转换成Excel的方法。对于不关注时空位置关系的一般分析,到此也就基本够用了。但是,如果站在全…...
ES6 新增的循环方法
在 ES6(ECMAScript 2015)中,新增了一些循环方法,这些方法可以帮助我们更方便地遍历数组、字符串、Set、Map 等数据结构。本文将介绍一些常用的 ES6 循环方法。 for…of 循环 for…of 循环是一种遍历可迭代对象的方法,…...

移动端事件300ms延迟解决
有移动端与PC端的项目开发,那么移动端和PC端开发上是存在差异的,比如 click 事件的300ms 延迟,即移动Web页面上的click事件响应都要慢上300ms,移动设备访问Web页面时往往需要 “双击” 或者 “捏开” 来放大页面看清页面的具体内容…...

NRF52832的DFU
开发环境: Winsodw:10 nRF5_SDK:17.1.0 1 工具安装 1.1 gcc-arm-none-eabi Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 下载“gcc-arm-none-eabi-10.3-2021.10-win32.exe”,接提示安装。注意安装完…...

开源WebRTC库放大器模式在采集桌面图像时遇到的DPI缩放与内存泄漏问题排查
目录 1、在非100%的显示比例下放大器采集到的桌面图像不全问题 1.1、通过manifest文件禁止系统对软件进行缩放 1.2、调用SetThreadDpiAwarenessContext函数,禁止系统对目标线程中的窗口进行缩放 1.3、使用winver命令查看Windows的年月版本 2、使用放大器模式遇…...
敲黑板!java反射机制和原理
获取Class对象:首先,你需要获取表示要操作的类的Class对象。可以使用以下三种方式之一来获取Class对象: Class.forName()方法:使用类的全限定名获取Class对象,例如:Class<? Class<?> clazz MyC…...

【大数据工具】HBase 集群搭建与基本使用
HBase 集群搭建 HBase 安装包下载地址:https://archive.apache.org/dist/hbase/ 安装 HBase 的前提: ZooKeeper 集群 OKHadoop 集群 OK 1. HBase 集群安装 1. 将 HBase 软件包上传至 Hadoop0 解压并重命名 使用 FileZilla 将 hbase-1.3.1-bin.tar.g…...

【Java】数组详解
文章目录 一、数组的基本认识1.1 数组的概念1.2数组的创建与初始化1.3 数组的使用 二、数组的类型 — 引用类型2.1 JVM 内存分布2.2 什么是引用类型2.3 基本类型变量与引用类型变量的区别2.4 Java 中的 null 三、数组的应用3.1 保存数据3.2 函数参数3.3 函数返回值 一、数组的基…...

NumPy库的学习
本文主要记录的是笔者在B站自学Numpy库的学习笔记。 引入numpy库 import numpy as np矩阵的创建 创建一个二行三列的矩阵。 array np.array([[1,2,3],[2,3,4]])查看array的行数、形状、元素数量 print("number of dim:",array.ndim) print("shape:"…...
CentOS安装IRIS
最近电脑提搞了,可以无顾虑创建虚拟机了,试一下在Linux安装IRIS,适用CentOS7.6上安装Intersystem公司的IRIS数据库,资料基本是空白,分享一下。 首先安装解压软件unzip和libicu,最小化安装的缺,…...

华为OD机试真题 JavaScript 实现【最多几个直角三角形】【2023Q1 100分】
一、题目描述 有 N 条线段,长度分别为 a[1]-a[n]。 现要求你计算这 N 条线段最多可以组合成几个直角三角形,每条线段只能使用一次,每个三角形包含三条线段。 二、输入描述 第一行输入一个正整数 T (1< T< 100) ,表示有…...
vue3中的reactive、ref、toRef和toRefs
目录 reactivereactive的实现原理使用reactive的注意事项 refref的实现原理使用ref的注意事项 toRef和toRefsref和reactive的使用比较 reactive reactive用于创建响应式对象,它返回一个对象的响应式代理。即:它返回的对象以及其中嵌套的对象都会通过 Pr…...
数字图像处理与Python实现-图像增强经典算法汇总
图像增强经典算法汇总 文章目录 图像增强经典算法汇总1、像素变换2、图像逆变换3、幂律变换4、对数变换5、图像均衡化6、对比度受限自适应直方图均衡(CLAHE)7、对比度拉伸8、Sigmoid校正9、局部对比度归一化10、总结本文将对图像增强经典算法做一个简单的汇总。图像增强的经典…...
tag提示词总结
顺序的权重 越靠前的tag权重越大,越靠后的tag权重越小经验来讲,将图像质量相关的tag放在前面,例如masterpiece,best quality等;接着添加主体画风等;最后添加一些不太重要的细节 权重增减 (tag):…...

微信小程序原生开发功能合集二十:导航栏、tabbar自定义及分包功能介绍
本章实现导航栏及tabbar的自定义处理的相关方法介绍及效果展示。 另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下: 1. CSDN课程: https://edu.csdn.net/course/detail/37977 2. 5…...

高通 Camera HAL3:项目开发技术点总结
做高通 Camera HAL3开发的一些技术点的总结、整理。 做个记录,方便后续查阅。 1.目录、so、配置文件 productName是项目名 out Target路径:\out\target\product\productName\chi-cdk:\vendor\qcom\proprietary\chi-cdk\ldc node࿱…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...