STM32_GPIO_HAL库操作 📅 发布时间:2026/7/16 6:32:01 👁️ 浏览次数: 文章目录一、使用HAL库配置GPIO思路1、初始化配置2、输入输出操作3、复用 / 中断二、HAL库GPIO相关函数0、时钟使能1、初始化2、IO操作3、宏定义4、模式定义三、示例代码一、使用HAL库配置GPIO思路1、初始化配置通过GPIO_InitTypeDef结构体定义引脚模式、速度、上下拉等参数再调用HAL_GPIO_Init()完成初始化。2、输入输出操作输出用HAL_GPIO_WritePin()/HAL_GPIO_TogglePin()输入用HAL_GPIO_ReadPin()。3、复用 / 中断GPIO 作为外设复用如串口、SPI或外部中断时需额外配置复用映射 / 中断优先级。二、HAL库GPIO相关函数0、时钟使能// 使能GPIOA时钟__HAL_RCC_GPIOA_CLK_ENABLE();// 使能GPIOB时钟__HAL_RCC_GPIOB_CLK_ENABLE();// 关闭GPIOA时钟极少用__HAL_RCC_GPIOA_CLK_DISABLE();1、初始化//初始化一个 / 多个 GPIO 引脚配置模式、上下拉、速度HAL_GPIO_Init();//恢复 GPIO 引脚为默认状态模拟输入无时钟HAL_GPIO_DeInit()示例代码GPIO_InitTypeDef GPIO_InitStruct{0};// 配置PA0为推挽输出无上下拉低速GPIO_InitStruct.PinGPIO_PIN_0;// 指定引脚可组合GPIO_PIN_0|GPIO_PIN_1GPIO_InitStruct.ModeGPIO_MODE_OUTPUT_PP;// 模式推挽输出GPIO_InitStruct.PullGPIO_NOPULL;// 无上下拉GPIO_InitStruct.SpeedGPIO_SPEED_FREQ_LOW;// 速度低速HAL_GPIO_Init(GPIOA,GPIO_InitStruct);// 执行初始化HAL_GPIO_DeInit(GPIOA,GPIO_PIN_0);// 恢复为默认引脚2、IO操作//读取单个引脚电平返回GPIO_PinState类型HAL_GPIO_ReadPin();//设置单个引脚电平高 / 低HAL_GPIO_WritePin();//翻转引脚电平LED 闪烁常用HAL_GPIO_TogglePin();//锁定GPIO引脚配置寄存器。HAL_GPIO_LockPin();//中断服务函数中调用清除中断标志并触发回调HAL_GPIO_EXTI_IRQHandler();//中断回调函数需重写自定义中断逻辑HAL_GPIO_EXTI_Callback();//配置中断优先级HAL_NVIC_SetPriority();//使能中断通道HAL_NVIC_EnableIRQ();3、宏定义__HAL_GPIO_EXTI_GET_FLAG 检查指定的EXTI行标志是否设置。__HAL_GPIO_EXTI_CLEAR_FLAG 清除EXTI的行挂起标志。__HAL_GPIO_EXTI_GET_IT 检查指定的EXTI行是否被断言。__HAL_GPIO_EXTI_CLEAR_IT 清除EXTI的行挂起位。__HAL_GPIO_EXTI_GENERATE_SWIT 在选定的情况下生成软件中断。4、模式定义GPIO_MODE_INPUT 输入浮动模式GPIO_MODE_OUTPUT_PP 输出推拉模式GPIO_MODE_OUTPUT_OD 输出开漏模式GPIO_MODE_AF_PP 备用功能推拉模式GPIO_MODE_AF_OD 备用功能开漏模式GPIO_MODE_AF_INPUT 备用功能输入模式GPIO_MODE_ANALOG 模拟模式GPIO_MODE_IT_RISING 具有上升沿触发检测的外部中断模式GPIO_MODE_IT_FALLING 具有下降沿触发检测的外部中断模式GPIO_MODE_IT_RISING_FALLING 具有上升下降沿触发检测的外部中断模式GPIO_MODE_EVT_RISING 具有上升沿触发检测的外部事件模式GPIO_MODE_EVT_FALLING 具有下降沿触发检测的外部事件模式GPIO_MODE_EVT_RISING_FALLING 具有上升下降沿触发检测的外部事件模式三、示例代码//GPIO 输出控制 LEDGPIO 输入读取按键#includestm32f1xx_hal.h// 宏定义简化代码方便移植#defineLED_PINGPIO_PIN_0#defineLED_PORTGPIOA#defineKEY_PINGPIO_PIN_1#defineKEY_PORTGPIOA// GPIO初始化函数voidGPIO_Config(void){GPIO_InitTypeDef GPIO_InitStruct{0};// 1. 使能GPIO时钟必须否则引脚无响应__HAL_RCC_GPIOA_CLK_ENABLE();// 2. 配置LED引脚PA0推挽输出GPIO_InitStruct.PinLED_PIN;GPIO_InitStruct.ModeGPIO_MODE_OUTPUT_PP;// 推挽输出GPIO_InitStruct.PullGPIO_NOPULL;// 无上下拉GPIO_InitStruct.SpeedGPIO_SPEED_FREQ_LOW;// 低速HAL_GPIO_Init(LED_PORT,GPIO_InitStruct);// 3. 配置按键引脚PA1上拉输入GPIO_InitStruct.PinKEY_PIN;GPIO_InitStruct.ModeGPIO_MODE_INPUT;// 输入模式GPIO_InitStruct.PullGPIO_PULLUP;// 上拉按键默认高电平按下接地为低HAL_GPIO_Init(KEY_PORT,GPIO_InitStruct);}intmain(void){// 1. HAL库初始化必须初始化系统时钟、SysTick等HAL_Init();// 2. 配置系统时钟根据自己的板子配置如72MHzSystemClock_Config();// 3. 初始化GPIOGPIO_Config();while(1){// 4. 读取按键状态低电平表示按下if(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN)GPIO_PIN_RESET){HAL_Delay(20);// 消抖if(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN)GPIO_PIN_RESET){// 5. 翻转LED电平亮/灭切换HAL_GPIO_TogglePin(LED_PORT,LED_PIN);// 等待按键释放避免重复触发while(HAL_GPIO_ReadPin(KEY_PORT,KEY_PIN)GPIO_PIN_RESET);}}}}// 系统时钟配置函数STM32F103标准配置可直接用voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct{0};RCC_ClkInitTypeDef RCC_ClkInitStruct{0};// 配置外部晶振8MHz作为PLL源PLL倍频到72MHzRCC_OscInitStruct.OscillatorTypeRCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEStateRCC_HSE_ON;RCC_OscInitStruct.HSEPredivValueRCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.PLL.PLLStateRCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSourceRCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMULRCC_PLL_MUL9;if(HAL_RCC_OscConfig(RCC_OscInitStruct)!HAL_OK){Error_Handler();}// 配置系统时钟、AHB、APB总线时钟RCC_ClkInitStruct.ClockTypeRCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSourceRCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDividerRCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDividerRCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDividerRCC_HCLK_DIV1;if(HAL_RCC_ClockConfig(RCC_ClkInitStruct,FLASH_LATENCY_2)!HAL_OK){Error_Handler();}}// 错误处理函数可自定义如LED常亮voidError_Handler(void){__disable_irq();while(1){}}
基于 STM32F103 + ESP8266 实现 DHT11 温湿度数据上传华为云 IoT 平台 文章目录基于 STM32F103 ESP8266 实现 DHT11 温湿度数据上传华为云 IoT 平台项目架构概览准备工作硬件连接软件依赖华为云 IoT 设备配置工作流程STM32向ESP8266发送AT指令连接WIFISTM32向ESP8266发送AT指令连接华为云平台STM32控制ESP8266发送AT指令向云平台发送数据主函数效果… 2026/7/13 7:01:23
代码生成新范式:万象熔炉·丹青幻境辅助Python爬虫开发实战 代码生成新范式:万象熔炉丹青幻境辅助Python爬虫开发实战 写爬虫,这事儿听起来挺酷,但真干起来,不少朋友都头疼过。对着一个复杂的网页结构,你得琢磨怎么定位元素,怎么写正则或者XPath,还得提防… 2026/7/11 22:27:49
MusePublic艺术创作引擎效果展示:看看AI生成的艺术人像有多美 MusePublic艺术创作引擎效果展示:看看AI生成的艺术人像有多美 你是否曾惊叹于那些充满故事感的时尚人像摄影,光影交错,人物姿态优雅,每一帧都像在诉说一个未完的故事?现在,借助AI的力量,每个人… 2026/7/13 18:07:34
【2014-01-27】cocos2dx学习笔记:CCNode回调流程 [历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2014-01-27 | 标题:cocos2dx学习笔记:CCNode回调流程 | 分类: 编程 / C &&… 2026/7/16 5:44:33
C++ priority_queue 深度解构:从堆算法到容器适配器实现 1. 项目概述:从“会用”到“懂它”,一次对 priority_queue 的深度解构如果你用过 C STL 里的priority_queue,大概率会觉得它很方便:push一个元素,pop出来的总是当前“最大”或“最小”的那个。面试官问你它的底层是什么… 2026/7/16 5:42:32
集成过压保护模拟开关的设计与应用实践 1. 为什么我们需要重新思考保护电路设计在电子系统设计中,过压保护一直是个让人头疼的问题。传统方案通常采用TVS二极管、保险丝、继电器等分立器件搭建保护电路,这种方案我已经用了十几年。但最近在做一个工业传感器项目时,这套方案让我栽了… 2026/7/16 5:42:32
电子病历自动生成与结构化:AI模型赋能医疗信息管理新路径 电子病历自动生成与结构化:AI模型赋能医疗信息管理新路径 在医疗信息化不断推进的当下,电子病历作为医疗数据的重要载体,其质量与利用效率直接影响着医疗服务的质量和医疗研究的进展。电子病历自动生成与结构化技术,借助AI模型的力… 2026/7/16 5:40:31
二维数组对角线操作实战:从坐标规律到焦点遍历的双解剖析 1. 二维数组对角线操作入门:从概念到实战第一次接触二维数组对角线操作时,我也曾被那些坐标规律绕得头晕。直到在算法比赛中因为对角线问题丢分后,才真正静下心来研究这个看似简单却暗藏玄机的话题。二维数组对角线操作是信息学竞赛和算法面试… 2026/7/16 5:40:31
题解:AcWing 237 程序自动分析 【题目来源】 AcWing:237. 程序自动分析 - AcWing题库 【题目描述】 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。 考虑一个约束满足问题的简化版本:假设 x1,x2,x3,…x_1,x_2,x_3,…x1,x2,x3,… 代表程… 2026/7/16 5:36:29
A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并 摘要:本文系统讲解如何利用Codex App的Review功能与GitHub PR工作流,实现从代码修改到安全合并的完整流程。涵盖Review面板深度使用、/review命令实战、GitHub Connector配置、PR描述撰写技巧,以及常见问题排查方法。通过多个实战案例和流程图,帮助开发者建立高效的AI辅助代… 2026/7/16 0:00:26
HAM未来路线图:下一代高可用迁移技术的发展方向与展望 HAM未来路线图:下一代高可用迁移技术的发展方向与展望 【免费下载链接】ham Based on the remote memory access capability and high bandwidth of the UB, deterministic duration virtual machine live migration is achieved, addressing planned downtime issu… 2026/7/16 0:04:27
月球是否是从地球分离出去的?——容度原理解释 月球是否是从地球分离出去的?——容度原理解释一、月球起源的“三大假说”与容度原理的重新审视月球起源的三大假说——捕获说(月球是太阳系中独立的星体,被地球引力捕获)、共生说(月球与地球同时从原始星云中形成&… 2026/7/16 0:06:27
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/16 3:47:53
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/14 5:09:41