单片机02_寄存器_GPIO设置__点灯

芯片概述

        C51:0口、1口、2口、3口,P00~p07、P10~P17、P20~P27、P30~P37

        STM32:A口、B口、C口、D口,PA0~PA15/PA5 == GPIOA.5

        STM32F407ZGT6有7组GPIO端口,分别是:A B C D E F G,每组均有16个GPIO端口,端口编号:0-15。

GPIO模块功能

以STM32F40x芯片为例。

输入浮空

在浮空状态下,外界给GPIO端口的电平状态是不确定的,完全由外部输入决定。(一般选择使用时硬件工程师会加上拉或者下拉电阻)

输入上拉

在没有外界输入的情况下,能够让GPIO端口有一个确定的高电平状态。

输入下拉

在没有外界输入的情况下,能够让GPIO端口有一个确定的低电平状态。

模拟功能

芯片内部ADC或者DAC专用功能

通用开漏输出

也叫断开输出(断开MOS管),可以正常输出低电平“0”,没有输出高电平“1”的能力。

如果想输出高电平,则需要配置为具有上拉功能的开漏输出(芯片内部的上拉电阻属于弱上拉,如果需要或者较强的驱动能力,则需要外接一个上拉电阻(硬件工程师设置))。开漏输出慎用,用的时候尽量是在硬件工程师给配置了上拉电阻的时候使用。

通用推挽输出

单片机给外界输出数据,推挽输出既可以输出高电平也可以输出低电平

复用功能开漏输出

复用功能指的是GPIO端口的第二功能(除了默认的输入输出功能以外),也就是片内外设(芯片以内内核以外)模块功能管脚的专用功能。

复用功能推挽指的是当GPIO端口作为第二功能时配置为开漏模式输出。

复用功能推挽输出

复用功能推挽指的是当GPIO端口作为第二功能时配置为推挽模式输出。

注:通用/默认:GPIO的输入和输出功能   单片机给外界高低电平或者外界给单片机高低电平。

       复用:通过GPIO端口做其他的功能,比如给外界串口数据或者外界将数据/波形发给单片机。

GPIO端口内部框图STM32F40x芯片

开漏:P-MOS管断开

置位/复位寄存器与输出数据寄存器的区别:

输出数据寄存器:清0

GPIOB->ODR &= ~(1<<3);  //设置PB3为低电平

GPIOB->ODR = GPIOB->ODR &(~(1<<3));

  1. 先计算1<<3的结果: 000001000b
  2. 将第一步计算出来的结果~:111111110111b
  3. 将GPIOB->ODR的默认值取出来:000000000
  4. 将第三步取出来的值与第二步计算的结果进行相与:0000000000
  5. 将第四步计算出来的值赋值给ODR寄存器

置位/复位寄存器:清0

GPIOB->BSRRH = 1<<3;

  1. 计算1<<3的值:00001000b
  2. 将第一步计算的值赋值给BSRRH即可。

输出数据寄存器:置1

GPIOB->ODR |= 1<<3;  //将PB3置一

GPIOB->ODR = GPIOB->ODR | (1<<3);

  1. 先计算1<<3的结果
  2. 将计算的结果与ODR的值进行相或
  3. 将第二步计算的结果赋值给ODR寄存器

置位/复位寄存器:置1

GPIOB->BSRRL = 1<<3;

  1. 计算1<<3的结果
  2. 赋值给BSRRL寄存器
GPIO模块相关寄存器STM32F40x
时钟使能的概述   

        为了节省功耗,STM系列单片机专门设置了相关寄存器来控制每一个片内外设模块的时钟使能(开启)或关闭(默认状态下时钟是关闭状态的),在使用任何模块之前都必须先使能对应模块的时钟,否则对对应模块的配置无效。

APBx提供时钟源。

时钟使能相关寄存器

        ①RCC_AHB1外设时钟使能寄存器

          寄存器作用:对AHB1系统总线上的片内外设模块进行时钟使能,在对应的位上写‘1’,则使能相对应的外设模块时钟。

        ②RCC_AHB2外设时钟使能寄存器

        ③RCC_AHB3外设时钟使能寄存器

        ④RCC_APB1外设时钟使能寄存器

        ⑤RCC_APB2外设时钟使能寄存器

STM32F40x系列时钟使能步骤

        1.找出所需要使能时钟的片内外设模块挂载在那一条时钟总线上,参考“英文数据手册2.2章”。

        2.找出中文参考手册第六章系统总线对应的时钟使能寄存器,并且在相应的位上写‘1’使能外设模块时钟。

GPIO端口相关寄存器STM32F40x芯片

点亮位于PB3的LED6灯,低电平点亮。

GPIO端口模式寄存器

PB3设置为输出模式。

GPIO端口输出类型寄存器

PB3设置为推挽输出

GPIO端口输出速度寄存器

PB3设置高速输出模式

GPIO端口输出数据寄存器

关闭LED6,PB3设置为高电平,ODR3位设置为1;

引脚输出高电平;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/488203.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js设计模式:备忘录模式

作用: 封装的对象可以在对象触发行为时进行状态的记录与保存 也可以进行状态的回退,恢复之前的状态 示例: class Editor{constructor(){this.allText }edit(text){this.allText text}saveNow(){return new EditorText(this.allText)}backspacing(editorText){this.allText…

【k8s资源调度-StatefulSet】

1、部署对象StatefulSet资源&#xff08;无状态应用&#xff09; StatefulSet针对的是有状态应用&#xff0c;有状态应用会对我们的当前pod的网络、文件系统等有关联。 2、配置文件如下 StatefulSet资源的配置文件粗略如下&#xff0c;如下的配置信息包含了数据卷&#xff0c;…

python 3.7.3的安装

参考 Linux安装Python3.7-良许Linux教程网 (lxlinux.net) 1、Index of /ftp/python/3.7.9/ 1、安装gcc&#xff0c;yum -y install gcc 2、 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel…

有趣的CSS - 文字加载动画效果

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是用 css 实现多字符模拟加载动画效果。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页…

容器_Docker ( 06 )

容器_Docker ( 05 ) Kubernetes 资源对象管理 资源对象文件 模板与帮助信息 资源对象文件优势 命令无法实现高级复杂的功能某些资源对象使用命令无法创建方便管理 , 保存 , 追溯历史 资源对象文件太长 , 记不住怎么办 使用命令创建模板查询帮助信息查询官方手册 生成资源…

2024-02-21 作业

作业要求&#xff1a; 复习课上内容 //已完成结构体字节对齐&#xff0c;64位没做完的做完&#xff0c;32位重新都做一遍&#xff0c;课上指定2字节对齐的做一遍&#xff0c;自己验证 //已完成两种验证大小端对齐的代码写一遍复习指针内容 //已完成完善顺序表已写出的…

300分钟吃透分布式缓存-12讲:为何MC能长期维持高性能读写?

内存管理 slab 机制 讲完淘汰策略&#xff0c;我们接下来学习内存管理 slab 机制。 Mc 内存分配采用 slab 机制&#xff0c;slab 机制可以规避内存碎片&#xff0c;是 Mc 能持续高性能进行数据读写的关键。 slabclass Mc 的 slab 机制是通过 slabclass 来进行运作的&#x…

普中51单片机学习(DS1302)

DS1302时钟 DS1302实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力&#xff0c;还有闰年调整的能力。内部含有31个字节静态RAM&#xff0c;可提供用户访问。采用串行数据传送方式&#xff0c;使得管脚数量最少&#xff0c;简单SPI 3线接口。工作电压…

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…

Ansible 常见模块

模块文档 官方模块列表&#xff1a;https://docs.ansible.com/ansible/latest/collections/index_module.html # 查看支持的模块&#xff08;小写 l&#xff09; ansible-doc -l # 查看支持的模块个数-> 3387 ansible-doc -l | wc -l # ansible-doc 模块名 或者 ansible-…

从零开始学IO_FILE的堆利用:理解IO_FILE之fread

要学习基于IO_FILE的堆利用就得了解它的本质&#xff0c;以下会介绍几个主要的IO函数&#xff0c;结合源码和动态调试去学习。 调试环境搭建可参考环境从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;优化pwn虚拟机配置支持libc等指令-CSDN博客 前面分析了系统…

Servlet使用Cookie和Session

一、会话技术 当用户访问web应用时&#xff0c;在许多情况下&#xff0c;web服务器必须能够跟踪用户的状态。比如许多用户在购物网站上购物&#xff0c;Web服务器为每个用户配置了虚拟的购物车。当某个用户请求将一件商品放入购物车时&#xff0c;web服务器必须根据发出请求的…