当前位置: 首页 > news >正文

蓝桥杯嵌入式赛道—-软件篇(GPIO输出模式配置)

前言

  • 从现在正式开始讲解使用CubeMX来进行一些外设的初始化配置
  • 这一项是对标传统的标准库,这不仅仅给我们提供了很大的便利也大大降低了实际配置初始化代码时的小错误
  • 文中案例代码(基于江协的标准库移植)资料获取:GitHub : STM32-Lib

CubeMX配置GPIO输出模式

  • 这里只讲GPIO的配置,其他新建工程时候的配置请参看之前的博客内容,蓝桥杯嵌入式赛道—软件篇(CubeMX基础使用教程)

1、新建一个STM32F103C8T6工程

按照之前教的新建工程方式,创建好工程后来到这样的一个界面

在这里插入图片描述

  • 界面的左边部分是进行详细配置的操作界面
  • 界面右边的芯片引脚视图是对芯片引脚进行功能选择操作的。(注意:仅仅只是功能的选择,一般有些会有基础的默认配置,但我们会在左边的详细配置界面进行进一步的配置)

2、选择引脚设置为输出模式

这里以”江协课程“中的LED点灯案例为例

在这里插入图片描述

  • 点击PA0引脚后会出现一个引脚配置窗口,这里展示了这个引脚所有可以配置的功能,我们这里演示IO口的输出模式,这里就选择”GPIO_Output“
  • 同时给PC13引脚也做相同的配置(PC13引脚连接的是STM32最小系统板上面的一个自带的LED灯)

扩展介绍

右键芯片的引脚会出现这么一个窗口,我们关注这里的”Enter User Label”选项

在这里插入图片描述

  • 这个选项的意思是给个引脚打一个标注,比如他是用来控制LED的引脚,我给它一个LED的名称。这个后续在代码里面也会体现,他会给这个名称做一个宏定义

    在这里插入图片描述

3、进行具体设置

点击左侧的”GPIO“选择,进入到红框这样的界面中,这里展示的就是一些被使用的引脚,同时也是用来配置GPIO的具体设置的地方,继续点击就会弹出配置选项

在这里插入图片描述

配置介绍

在这里进行引脚的配置,按照需求选择后就会直接生成对应的初始化代码

在这里插入图片描述

  • GPIO output level:配置初始化后的输出电平
    • Low:低电平
    • High:高电平
  • GPIO mode:配置输出模式
    • Output Push Pull:推挽输出模式
    • Output Open Drain:开漏输出模式
  • GPIO Pull-up/Pull-down:配置引脚上下拉(这个选项我感觉没有必要,它实际只对输入模式有效,但为了不出现奇奇怪怪的意外,我一般都给他配置为下拉模式或者悬空)
    • No pull-up and no pull-down:引脚悬空
    • Pull-up:引脚上拉
    • Pull-down:引脚下拉
  • Maximum output speed:引脚的输出速度
    • Low:低速
    • Medium:中速
    • High:高速(有特殊需求一定要选High)
  • User Label:用户标签(上面有提到过)

上手操作

  • 我们要用推挽输出来控制LED的亮灭,按如图所示选择后即可,PC13引脚也要进行一样配置

    在这里插入图片描述

  • 配置完成后,点击生代码打开Keil5

    在这里插入图片描述

4、代码编写

  • 进入到Keil5后首先编译一下,确保工程代码以及Keil5可用

  • 然后在工程代码的while循环下插入这段代码(注意:代码一定要写在注释块以内,不熟悉的看这篇博客,蓝桥杯嵌入式赛道—-软件篇(CubeMX生成代码结构解读)-CSDN博客),即可实现控制PA0引脚上的LED灯亮灭

    在这里插入图片描述

    while (1){/* 设置PA0引脚的高低电平,实现LED闪烁,下面展示3种方法 *//* 方法一:使用HAL_GPIO_WritePin函数设置高/低电平,通过GPIO_PIN_RESET/SET参数指定 */HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);   // 将PA0引脚设置为低电平HAL_Delay(500);                                         // 延时500msHAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);     // 将PA0引脚设置为高电平HAL_Delay(500);                                         // 延时500ms/* 方法二:使用HAL_GPIO_WritePin函数设置高/低电平,通过0/1数值指定,需要强制转换为GPIO_PinState类型 */HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, (GPIO_PinState)0); // 将PA0引脚设置为低电平HAL_Delay(500);                                         // 延时500msHAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, (GPIO_PinState)1); // 将PA0引脚设置为高电平HAL_Delay(500);                                         // 延时500ms/* 方法三:使用HAL_GPIO_TogglePin函数翻转引脚电平状态 */HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);                  // 翻转PA0引脚的电平状态,可由高电平变为低电平,也可由低电平变为高电平HAL_Delay(500);                                         // 延时500msHAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);                  // 再次翻转PA0引脚的电平状态,可由高电平变为低电平,也可由低电平变为高电平HAL_Delay(500);                                         // 延时500ms}
    
  • 在Keil5中,跳转MX_GPIO_Init()这个函数的定义可以看到引脚的初始化配置,可以看到它的配置跟标准库的初始化GPIO的流程是一样的在这里插入图片描述

代码解读

  • 这里我会讲解HAL库的GPIO库函数如何去使用,关于其他外设的库函数也可以按照我这样的方式去自己解读

找到GPIO库函数的源文件

  • 首先在Keil5中点击这个选项

    在这里插入图片描述

  • 接着点击这个

    在这里插入图片描述

  • 进入到“stm32f1xx_hal_gpio.h”的文件中后一直往下滑找到函数定义,这里就是我们能调用的HAL库的库函数

    在这里插入图片描述

函数功能介绍

初始化函数

  • 如果不用CubeMX去配置然后生成初始代码,就可以用这个函数去自己自定义引脚的初始化,跟标准库的使用方法是一样的,但是不建议这么坐
// 初始化GPIO
void  HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
// 默认初始化
void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);

功能函数

  • 这些是可以直接使用的功能函数
// 读取IO口电平,与标准库相比没有专门的Output/Input电平的区分
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
// 写IO口电平
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
// 翻转IO口电平
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
// 锁定IO口配置
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
// GPIO外部中断函数
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
// GPIO外部中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
  • 关于这些函数的使用,参考Github资料中的案例即可
http://www.dtcms.com/a/609441.html

相关文章:

  • 仿第四城地方门户网站模板python可以做网站吗
  • ToDesk如何充当分屏显示器?扩展屏、多屏结合虚拟屏都可行!
  • qKnow 知识平台开源版 v1.0.3 发布:Docker Compose 部署 多项稳定性优化和关键问题修复
  • 【Prompt学习技能树地图】检索增强生成(RAG)核心技术剖析与实践指南
  • Zookeeper在Kafka中的作用
  • MySQL数据表操作
  • 访问外国网站速度慢怎样优化标题关键词
  • 《VScode搭建教程(附安装包)--- 开启你的编程之旅》
  • MFC Edit Control控件完全指南:从基础使用到高级定制
  • C语言编译器安装教程 | 快速上手C语言编译环境的配置与调试
  • C库OpenSSL安装与VisualStudio配置
  • ppt模板免费下载网站不需要登录网页设计的三大基本技术
  • 什么是营销型网站?h5可以连接别的网站吗
  • Android13修改系统支持gps同步时间
  • Webpack到Vite:构建工具迁移实战经验总结
  • QT音乐播放器18----新歌速递播放、隐藏顶部和底部工具栏、自定义ToolTips
  • 工控一体机在超声波清洗机中的应用
  • Qt5配置MSVC2017
  • 【AI】基于YOLO11-SEG的PCB缺陷检测与分类系统实现_3
  • 2. Qt深入 线程
  • [Godot] C#基于噪声的简单TileMap地图生成
  • Linux(4)—— 基础开发工具
  • 广州好的网站设计公司如何建单位网站
  • 无损改造+智能防控,安科瑞ASCB3为古建筑与历史街区量身打造安全用电解决方案
  • 解决“Move to iOS 卡在准备中”的 9 种有效方法
  • iOS IPA 上传工具全面解析,从 Transporter 到开心上架(Appuploader)命令行的高效上架实践
  • iOS性能调优的系统化实践,从架构分层到多工具协同的全流程优化指南(开发者深度版)
  • GitHub爆火开源项目——RustScan深度拆解
  • iOS和安卓应用上架全指南:从备案到审核发布
  • 海外购物网站排名云商网站建设