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

正点原子HAL库入门1~GPIO

探索者F407ZGT6(V3)
在这里插入图片描述

理论基础

IO端口基本结构

F4/F7/H7系列的IO端口

在这里插入图片描述

  • F1在输出模式,禁止使用内部上下拉
    F4/F7/H7在输出模式,可以使用内部上下拉
  • 不同系列IO翻转速度不同

F1系列的IO端口

在这里插入图片描述

施密特触发器:将非标准方波,整形为方波

  • 当输入电压高于正向值电压,输出为高;
  • 当输入电压低于负向值电压,输出为低;
  • 当输入在正负向值电压之间,输出不改变
    在这里插入图片描述

MOS管:压控型元件,控制栅源电压(Vgs = Vg - Vs)实现导通/关闭

  • P导通:Vgs<0
  • N导通:Vgs>0

GPIO八种模式

GPIO八种模式特点及应用
输入浮空输入用,完全浮空,空闲时(高阻态)状态由外部环境决定
输入上拉输入用,空闲时呈现高电平
输入下拉输入用,空闲时呈现低电平
模拟功能输入用, ADC、 DAC
开漏输出输出用,不能输出高电平(除非有上拉),软件IIC的SDL、SCL等
开漏式复用功能输出用,同上,由其他外设控制输出
推挽输出通用输出,可输出高低电平,驱动能力强,25mA (max)
推挽式复用功能输出用,同上,由其他外设控制输出

输入浮空

上拉电阻关闭;下拉电阻关闭;施密特触发器打开;双MOS管不导通
在这里插入图片描述

输入上拉

上拉电阻打开;下拉电阻关闭;施密特触发器打开;双MOS管不导通
在这里插入图片描述

输入下拉

上拉电阻关闭;下拉电阻打开;施密特触发器打开;双MOS管不导通
在这里插入图片描述

模拟功能

上拉电阻关闭;下拉电阻关闭;施密特触发器关闭;双MOS管不导通
在这里插入图片描述

开漏输出

上拉电阻关闭;下拉电阻关闭;施密特触发器打开;P-MOS管始终不导通
向ODR对应位,写0则N-MOS管导通,写1则N-MOS管不导通
在这里插入图片描述

开漏式复用功能

上拉电阻关闭;下拉电阻关闭;施密特触发器打开;P-MOS管始终不导通
在这里插入图片描述

推挽输出

上拉电阻关闭;下拉电阻关闭;施密特触发器打开
向ODR对应位,写0则N-MOS管导通,写1则P-MOS管导通
在这里插入图片描述

推挽式复用功能

上拉电阻关闭;下拉电阻关闭;施密特触发器打开
在这里插入图片描述

实验

实验工程资源

实验工程资源

LED0闪烁

led.h

#ifndef __LED_H
#define __LED_H#include "./SYSTEM/sys/sys.h"/* Íⲿ½Ó¿Úº¯Êý*/
void led_init(void);                                                                            /* ³õʼ»¯ */#endif

led.c

#include "./BSP/LED/led.h"void led_init(void)
{GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOF_CLK_ENABLE();		//PF9												gpio_init_struct.Pin = GPIO_PIN_9;			               gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;           gpio_init_struct.Pull = GPIO_PULLUP;                   gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;          	HAL_GPIO_Init(GPIOF,&gpio_init_struct);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);//Initialize dark
}

stm32f4xx_hal_gpio.h

#define  GPIO_MODE_INPUT                        MODE_INPUT                                               /*!< Input Floating Mode                   */
#define  GPIO_MODE_OUTPUT_PP                    (MODE_PP | MODE_OUTPUT)                                  /*!< Output Push Pull Mode                 */
#define  GPIO_MODE_OUTPUT_OD                    (MODE_OD | MODE_OUTPUT)                                  /*!< Output Open Drain Mode                */
#define  GPIO_MODE_AF_PP                        (MODE_PP | MODE_AF)                                      /*!< Alternate Function Push Pull Mode     */
#define  GPIO_MODE_AF_OD                        (MODE_OD | MODE_AF)                                      /*!< Alternate Function Open Drain Mode    */#define  GPIO_MODE_ANALOG                       MODE_ANALOG                                              /*!< Analog Mode  */#define  GPIO_MODE_IT_RISING                    (EXTI_MODE | GPIO_MODE_IT | RISING_EDGE)                 /*!< External Interrupt Mode with Rising edge trigger detection          */
#define  GPIO_MODE_IT_FALLING                   (EXTI_MODE | GPIO_MODE_IT               | FALLING_EDGE)  /*!< External Interrupt Mode with Falling edge trigger detection         */
#define  GPIO_MODE_IT_RISING_FALLING            (EXTI_MODE | GPIO_MODE_IT | RISING_EDGE | FALLING_EDGE)  /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */#define  GPIO_MODE_EVT_RISING                   (EXTI_MODE | GPIO_MODE_EVT | RISING_EDGE)                /*!< External Event Mode with Rising edge trigger detection               */
#define  GPIO_MODE_EVT_FALLING                  (EXTI_MODE | GPIO_MODE_EVT               | FALLING_EDGE) /*!< External Event Mode with Falling edge trigger detection              */
#define  GPIO_MODE_EVT_RISING_FALLING           (EXTI_MODE | GPIO_MODE_EVT | RISING_EDGE | FALLING_EDGE) /*!< External Event Mode with Rising/Falling edge trigger detection       */
  • GPIO_MODE_INPUT: 输入浮空模式,该引脚可以作为输入使用,但其输出值是不确定的。
  • GPIO_MODE_OUTPUT_PP 和 GPIO_MODE_AF_PP: 推挽输出模式,这种模式下,引脚始终是输出高电平或低电平,除非明确要求改变。
  • GPIO_MODE_OUTPUT_OD 和 GPIO_MODE_AF_OD: 开漏输出模式,这种模式下,引脚可以输出高电平或低电平,但当输出高电平时,它实际上是在请求一个低电平。
  • 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: 外部事件模式,在这种模式下,当引脚的电平发生改变时(上升沿、下降沿或者两者都发生),会触发一个事件,但不会中断程序流程。

main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"int main(void)
{HAL_Init();                         /* Initialize HAL lib*/sys_stm32_clock_init(336, 8, 2, 7); /* set clock 168Mhz */delay_init(168);                    /* delay initialize */led_init();                         /* LED initialize */while(1){
// way1
//        HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);     /* LED0 on */
//        delay_ms(200);
//        HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);       /* LED0 off */
//        delay_ms(200);//way2HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);		//reversedelay_ms(200);}
}

跑马灯

按键控制LED0

led.h

#ifndef __LED_H
#define __LED_H#include "./SYSTEM/sys/sys.h"void led_init(void);                                                                          #endif

led.c

#include "./BSP/LED/led.h"void led_init(void)
{GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOF_CLK_ENABLE();					//PF9gpio_init_struct.Pin = GPIO_PIN_9;			               gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;            gpio_init_struct.Pull = GPIO_PULLUP;                    gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;          HAL_GPIO_Init(GPIOF, &gpio_init_struct);       					HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);//Initialize dark
}

key.h

#ifndef __KEY_H
#define __KEY_H#include "./SYSTEM/sys/sys.h"void key_init(void);                                                                           
uint8_t key_scan(void);#endif

key.c

#include "./BSP/KEY/key.h"
#include "./SYSTEM/delay/delay.h"void key_init(void)
{GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOE_CLK_ENABLE();		//PE2gpio_init_struct.Pin = GPIO_PIN_2;			               gpio_init_struct.Mode = GPIO_MODE_INPUT;           gpio_init_struct.Pull = GPIO_PULLUP;                    HAL_GPIO_Init(GPIOE, &gpio_init_struct);       					
}uint8_t key_scan(void)
{if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0){delay_ms(10);					//去除抖动if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0){while(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0);return 1;					//yes}}return 0;							//no
}

main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/KEY/key.h"int main(void)
{HAL_Init();                         /* Initialize HAL lib*/sys_stm32_clock_init(336, 8, 2, 7); /* set clock 168Mhz */delay_init(168);                    /* delay initialize */led_init();                         /* LED initialize */key_init();while(1){if(key_scan()){HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);		//reverse}else{delay_ms(10);}}
}

按键综合

相关文章:

正点原子HAL库入门1~GPIO

探索者F407ZGT6(V3) 理论基础 IO端口基本结构 F4/F7/H7系列的IO端口 F1在输出模式&#xff0c;禁止使用内部上下拉 F4/F7/H7在输出模式&#xff0c;可以使用内部上下拉不同系列IO翻转速度不同 F1系列的IO端口 施密特触发器&#xff1a;将非标准方波&#xff0c;整形为方波 当…...

华为VRP 系统基础配置

1.flash 相当于电脑的 硬盘 2.NVRAM 拿来专门存放系统配置文件 3.RAM 运行内存 4.ROM 系统引导 1.修改系统名[Huawei]sysname SWL1 2.配置登入信息 [SWL1]header shell information "Welocom to the learning" [SWL1]q <SWL1>q User interface con0 …...

面试热题(打家窃舍)

一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存放金额的非负…...

【Deepsort】C++版本Deepsort编译(依赖opencv,eigen3)

目录 下载源码安装onnxruntime安装Eigen3编译opencv 下载源码 https://github.com/shaoshengsong/DeepSORT安装onnxruntime 安装方法参考博客 安装Eigen3 当谈及线性代数计算库时&#xff0c;Eigen3是一个强大而受欢迎的选择。Eigen3是一个C模板库&#xff0c;提供了许多用…...

Synchronized锁升级过程

无锁状态&#xff08;无锁&#xff09;&#xff1a;当一个线程访问一个没有被锁定的Synchronized代码块时&#xff0c;处于无锁状态。此时&#xff0c;线程可以直接进入临界区执行代码&#xff0c;不需要进行任何锁协调。 偏向锁状态&#xff08;偏向锁&#xff09;&#xff1…...

汽车电子功能安全

功能安全考虑 分析方法&#xff1a;FMEA&#xff0c;DFMEA&#xff08;设计潜在失效模式和影响分析&#xff09; 严重度&#xff08;Severity&#xff09;&#xff0c;暴露率&#xff08;Exposure&#xff09;&#xff0c;可控性&#xff08;Controllability&#xff09;评估…...

ARM进阶:内存屏障(DMB/DSB/ISB)的20个使用例子详解

在上一节内存屏障指令之DMB、DSB和ISB详解中&#xff0c;介绍了一下内存屏障的三个指令的作用并举了一些例子&#xff0c;对于内存屏障指令的使用时机&#xff0c;与处理器架构(比如Cortex-M和Cortex-A)和处理器的系统实现(同样的架构&#xff0c;有不同的实现&#xff0c;如ST…...

Cpp学习——模板

模板&#xff1f; 目录 模板&#xff1f; 1.介绍 2.函数模板的使用 3.函数模板的强制转换or显式调用 四,模板的分类 1.介绍 在Cpp3.0中&#xff0c;祖师爷便引入了模板的概念。这是一个重大的变革&#xff0c;为后来的Cpp标准化打下了铺垫。也正是因为有了模板&#xff0…...

HTTP 协议 版本详解

HTTP 协议 介绍<一> 简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在客户端和服务器之间进行通信的协议。它是现代互联网中最常用的应用层协议之一。HTTP 的主要目的是实现超文本资源的传输&#xff0c;例如 HTML 文档、图像和音频文件等。…...

PHP语言基础知识(超详细)

文章目录 前言第一章 PHP语言学习介绍 1.1 PHP部署安装环境1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍2.2 PHP常量变量介绍 2.2.1 PHP变量知识&#xff1a;2.2.2 PHP常量知识&#xff1a; 2.3 PHP注释信息介绍2.4 PHP数据类型介绍 2.4.1 整形数据类型2.4…...

Flex弹性盒子的项目属性

最近在写项目时用到了弹性盒子的项目属性&#xff0c;记录一下&#xff0c;以后用到继续扩充 <div class"concern-data"><div><img src"https://meituan.thexxdd.cn/lvyou/assets/pinglun-fc62482a.svg" alt""><span>1&…...

广州银行信用卡中心:强化数字引擎安全,实现业务稳步增长

广州银行信用卡中心是全国城商行中仅有的两家信用卡专营机构之一&#xff0c;拥有从金融产品研发至销售及后期风险控制、客户服务完整业务链条&#xff0c;曾获“2016年度最佳创新信用卡银行”。 数字引擎驱动业务增长 安全左移降低开发风险 近年来&#xff0c;广州银行信用卡…...

【Rust日报】2023-08-03 - Polars 获约 400 万美元种子轮融资

文章&#xff1a;2023 年对 Rust 编译器 CI 的改进 kobzol 的新文章&#xff0c;介绍了关于优化 Rust 编译器构建、测试和性能监视基础设施的方案和实施情况。 根据作者的工作&#xff0c;文章内容分为三类&#xff1a; Rust 编译器&#xff08;rustc&#xff09;构建配置、 Ru…...

装修小程序,开启装修公司智能化服务的新时代

随着数字化时代的来临&#xff0c;装修小程序成为提升服务质量和效率的关键工具。装修小程序旨在为装修公司提供数字化赋能、提高客户满意度的智慧装修平台。通过装修小程序&#xff0c;装修公司能够与客户进行在线沟通、展示设计方案、提高服务满意度等操作。 装修小程序的好处…...

使用PHP和Redis实现简单秒杀功能

安装Redis 首先&#xff0c;需要在服务器上安装Redis。如果使用Linux系统&#xff0c;可以使用命令行安装。如果使用Windows系统&#xff0c;可以下载并安装Redis二进制文件。 创建Redis连接 在PHP中&#xff0c;可以使用Redis扩展来连接Redis服务器。需要在PHP文件中包含Re…...

C#开发FFMPEG例子(API方式) FFmpeg拉取udp组播流并播放

代码及工程见https://download.csdn.net/download/daqinzl/88168680 开发工具&#xff1a;visual studio 2019 网上用C/C调用FFmpeg的API例子很多&#xff0c; c#使用ffmpeg.autogen的方式很简单&#xff0c;直接复制C/C调用FFmpeg的API的代码到C#中&#xff0c;然后在FFmpeg…...

Android性能优化—图片优化

图片优化是内存优化中很重要的一部分&#xff0c;加载Bitmap时往往需要消耗大量的内存&#xff0c;稍不注意就容易导致内存溢出&#xff08;OOM&#xff09;。 一、图片OOM问题产生 1、 一个页面一次加载过多图片&#xff1b; 2、加载大图片没有进行压缩(尺寸&#xff0c;质…...

如何搭建自动化测试框架?资深测试整理的PO模式,一套打通自动化...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Po模型介绍 1、简…...

软件外包开发的GO语言特点

Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它具有许多特点&#xff0c;使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目&#xff0c;特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…...

【深度学习Week4】MobileNet_ShuffleNet

报错&#xff1a;unsafe legacy renegotiation disabled 解决方案&#xff1a; 尝试了更换cryptography36.0.2版本&#xff0c;以及更换下载链接的方法&#xff0c;都不行&#xff0c;最后采用了手动下载mat文件并上传到colab的方法 高光谱图像分类数据集简介Indian Pines&…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

GraphRAG优化新思路-开源的ROGRAG框架

目前的如微软开源的GraphRAG的工作流程都较为复杂&#xff0c;难以孤立地评估各个组件的贡献&#xff0c;传统的检索方法在处理复杂推理任务时可能不够有效&#xff0c;特别是在需要理解实体间关系或多跳知识的情况下。先说结论&#xff0c;看完后感觉这个框架性能上不会比Grap…...