stm32f407通用IO

  • 前言
  • 一、GPIO 模式
  • 二、IO 寄存器
  • 总结

前言

什么是IO?IO就是输入输出设备,就像一个可以判断电压是否输入,管理电压是否输出的引脚。
比如识别一个按键是否按下,随意点亮或熄灭一个LED灯,这就是IO

一、GPIO 模式

F407IO模式选择:

 保护二极管及上、下拉电阻引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入,当引脚电压高于VDD 时,上方的二极管导通,当引脚电压低于 VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。并且引脚不能直接驱动大功率器件,如驱动电机烧坏芯片

一.输入模式
1.上拉输入:信号从外部IO进入,信号状态保存在输入数据寄存器中,可以读取寄存器值判断IO状态,默认为上拉为高电平
2.下拉输入:默认为下拉为低电平,其它同上拉输入
3.浮空输入:不加外部信号是输入数据寄存器值未知,由外部信号决定
4.模拟输入:ADC用来读取外部IO电信号值,必须为浮空,在模拟配置中,I/O 引脚不能为 5 V 容忍
5.复用功能输入:复用功能分复用输入,复用输出,例如串口的接收脚就是复用输入(由复用功能寄存器决定)
二.输出模式
1.推挽输出:

输出控制为推挽,通过写置位/复位或输出数据寄存器来输出高低电平,当INT为0时反向为1,NMOS导通,PMOS截止,OUT脚电平为0;INT为1时反向为0,NMOS截止,PMOS导通,OUT脚电平为1。可设置浮空及上下拉。
2.开漏输出:

输出控制为开漏,通过写置位/复位或输出数据寄存器来输出高低电平,当INT为0时反向为1,NMOS导通,OUT脚电平为0;INT为1时反向为0,NMOS截止,OUT脚电平为1。可设置浮空及上下拉。但是要注意一点如果内部没有上拉就一定要在外面增加上拉电路,防止NMOS截止时D级为高阻态。
3.复用推挽:输出控制为推挽,但通过复用功能(复用的外设)来输出高低电平,根据外设需求可设置浮空及上下拉。
4.复用开漏:输出控制为开漏,但通过复用功能(复用的外设)来输出高低电平,根据外设需求可设置浮空及上下拉。

二、IO 寄存器

每个通用 I/O 端口包括 4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、
GPIOx_OSPEEDR 和 GPIOx_PUPDR)、2 个 32 位数据寄存器(GPIOx_IDR 和
GPIOx_ODR)、1 个 32 位置位/复位寄存器 (GPIOx_BSRR)、1 个 32 位锁定寄存器
(GPIOx_LCKR) 和 2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。

1.GPIO 端口模式寄存器 (GPIOx_MODER) (x = A…I)
偏移地址:0x00
复位值:
● 0xA800 0000(端口 A)
● 0x0000 0280(端口 B)
● 0x0000 0000(其它端口)

可以看出每两个位控制同一组的16个IO中的对应IO为输入/输出模式,
其中A组及B组中的几个IO口用途以固定,如(含调试引脚):
● PA15:JTDI 处于上拉状态
● PA14:JTCK/SWCLK 处于下拉状态
● PA13:JTMS/SWDAT 处于下拉状态
● PB4:NJTRST 处于上拉状态
● PB3:JTDO 处于浮空状态

2.GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A…I)
偏移地址:0x04
复位值:0x0000 0000

● 0:输出推挽(复位状态)
● 1:输出开漏

每位控制同一组的16个IO中的对应IO为输入输出模式,高16位保留

3.GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)
偏移地址:0x08
复位值:
● 0x0000 00C0(端口 B)
● 0x0000 0000(其它端口)

控制方法雷同

4.GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A…I/)
偏移地址:0x0C
复位值:
● 0x6400 0000(端口 A)
● 0x0000 0100(端口 B)
● 0x0000 0000(其它端口)

00:无上拉或下拉 ---- 01:上拉 — 10:下拉 — 11:保留
5.GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A…I)
偏移地址:0x10
复位值:0x0000 XXXX(其中 X 表示未定义)

以16位数据访问,读取对应引脚电平状态

6.GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A…I)
偏移地址:0x14
复位值:0x0000 0000

用于输出模式,可读可写,操作置位/复位寄存器会对输出数据寄存器进行置位/复位

7.GPIO 端口置位/复位寄存器 (GPIOx_BSRR) (x = A…I)
偏移地址:0x18
复位值:0x0000 0000

高16位用来将输出数据寄存器复位为0,低16位将其置位为1

8.GPIO 端口配置锁定寄存器 (GPIOx_LCKR) (x = A…I)
每个锁定位冻结一个特定的配置寄存器(控制寄存器和复用功能寄存器)。
偏移地址:0x1C
复位值:0x0000 0000
访问:仅 32 位字,读/写寄存器

位 16 LCKK[16]:锁定键 (Lock key)
可随时读取此位。可使用锁定键写序列对其进行修改。
0:端口配置锁定键未激活。
1:端口配置锁定键已激活。直到 MCU 复位时,才锁定 GPIOx_LCKR 寄存器。
位 15:0 LCKy:端口 x 锁定位 y (Port x lock bit y) (y= 0…15)
这些位都是读/写位,但只能在 LCKK 位等于“0”时执行写操作。
0:端口配置未锁定
1:端口配置已锁定

这个寄存器用来将需要配置好IO的配置保存,先选择需要确定配置的位(位15:0),
再将位16置1表示锁定这些需要配置的端口(控制寄存器和复用功能寄存器)

9.GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)
偏移地址:0x20
复位值:0x0000 0000

可以看出4位控制一个IO,低位复用只能操作IO口0-7,但每个IO都对应16种复用状态

10.GPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
偏移地址:0x24
复位值:0x0000 0000

控制IO口8-15,功能同上

复用功能选择图:

通过配置以上寄存器就可以得到我们想要的IO功能
● 外部中断线/唤醒线:
所有端口都具有外部中断功能。要使用外部中断线,必须将端口配置为输入模式

总结

以上就是GPIO基础内容,下期我们具体来讲解库函数是怎么来实现GPIO的初始化

【单片机学习之旅】(3-1)stm32f407 GPIO解析相关推荐

  1. 【单片机学习之旅】(1-2)stm32F407存储器及总线架构

    stm32F407存储器及总线架构 一.总线架构 二.存储器 以下内容均基于stm32F4xx讲解 一.总线架构 相信学过51单片机的朋友应该都看过下面这张图: 基本上学校用的都是这张图,看起来结构还 ...

  2. keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)

    [朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...

  3. 乐鑫Esp32学习之旅⑦ esp32上利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  4. 【单片机学习之旅】(1-1)单片机概述

    文章目录 前言 一.单片机是什么? 1.单片机的发展史 2.单片机的应用 二.单片机的种类 1.分类 2.目前流行的单片机 总结 前言 为什么要写博客?目的是什么? 为了更好更深入的学习单片机,巩固学 ...

  5. 【STC单片机学习】第一课:学习介绍

    第一部分.章节目录 1.1.1.单片机适合谁来学? 1.1.2.咱们学什么? 1.1.3.我为什么要学单片机 1.1.4.为什么要从51单片机学起 1.1.5.咱们的开发板 1.1.6.学习本课程需要 ...

  6. zynq的emio和axi_【ZYNQ7000学习之旅 - 01】EMIO练习

    [ZYNQ7000学习之旅 - 01]EMIO练习 [ZYNQ7000学习之旅 - 01]EMIO练习 ZYNQ7000 EMIO练习参考 背景 准备 功能 生成XSA文件 编写APP 总结 xili ...

  7. 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  8. 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础

    上篇文章 单片机入门学习四 STM32单片机学习一 跑马灯程序和创建工程 仅介绍了入门程序及其编译运行过程,下面开始对stm32的一些基础知识做一个记录. 1.stm32f103zet6(上篇问题3 ...

  9. 从零开始的MSP430单片机学习(一)

    从零开始的MSP430单片机学习(一) 图片有些缺失,原链接:从零开始的MSP430单片机学习(一) 写在前面 单片机学习本身是一个了解学习一个技术的过程,学习的过程中不应该拘泥于某一款,而是要了解学 ...

最新文章

  1. 第二章 在HTML中使用JavaScript
  2. 渗透测试-基于白名单执行payload--Compiler
  3. Hurst指数以及MF-DFA
  4. 【Linux】26_文件服务FTP Server
  5. 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数
  6. Return to the basic - 继承(Inheritation)
  7. python 提升效率_@Python 程序员,如何最大化提升编码效率?
  8. 特斯拉2019年第二季度财报出炉:今年有望降低汽车售价
  9. 笔记本电脑投屏到电视_电脑怎么投屏到电视?掌握这3个方法就够了
  10. html获取页面input值,javascript怎么获取input中用户输入的内容?
  11. maven pom.xml文件配置ojdbc7报错解决
  12. win10无法执行vbs脚本
  13. Visual Studio Code的九九乘法表
  14. 10^5以下素数筛法——素数表法
  15. YV12和I420的区别 yuv420和yuv420p的区别
  16. SSM + Activiti5 简单OA系统
  17. 政务云建设与应用解决方案
  18. 基于JAVA融呗智慧金融微资讯移动平台服务端计算机毕业设计源码+数据库+lw文档+系统+部署
  19. OA系统以卓越管理助力数字校园建设
  20. java毕设:基于springboot的服装搭配推荐系统(springboot+layui+jq+html)1011

热门文章

  1. 头歌实验 HDFS的基本操作和Java API 操作
  2. android raw rgb 转换器,raw图像格式转换工具——Iridient Developer Mac
  3. 抖音可以搬运视频吗 | 短视频批量伪原创
  4. 基于Tensorflow的环境声音分类
  5. 布局大数据 编织“智慧云”
  6. 语音识别之HTK入门(六)——HERest训练模型
  7. 江西省职业院校技能大赛中职组网络安全竞赛之Linux操作系统渗透测试
  8. WireShark利用telnet分析指定数据包信息
  9. 无限期弃用beetl模板
  10. 2016年我的读书计划