华大电子MCU-CIU32F011x3、CIU32F031x5通用输入输出

发布者:nu23最新更新时间:2024-08-13 来源: cnblogs关键字:华大电子  MCU  通用输入输出 手机看文章 扫描二维码
随时随地手机看文章

11. 通用输入输出(GPIO)

11.1. 模块介绍

每组 GPIO 端口有四个 32 位配置寄存器(GPIOx_MODE,GPIOx_OTYPE, GPIOx_OSPEED and GPIOx_PUPD),两个 32 位数据寄存器(GPIOx_IDAT and GPIOx_ODAT),一个 32 位置位/复位寄存器(GPIOx_BSR)和一个 32 位翻转寄存器(GPIOx_TGL)。另外,所有 GPIO 有两个复用功能选择寄存器(GPIOx_AFRH and GPIOx_AFRL)。

:GPIOx 中的 x 表示 GPIO 组数。

11.2. 功能特点

• 输出状态:推挽或开漏(上下拉)

• 输出寄存器状态值(GPIOx_ODAT) 或者复用功能输出

• 输入状态:浮空、上下拉、模拟

• 输入数据到数据寄存器(GPIOx_IDAT) 或复用功能输入

• 独立置位/复位/翻转 IO 状态(GPIOx_ BSR、GPIOx_TGL)

• 模拟功能

• 复用功能(开漏或推挽、上拉或下拉)

11.3. 功能说明

GPIO 的每一个端口可以通过软件独立配置成下面状态

• 输入浮空

• 输入上拉

• 输入下拉

• 模拟功能

开漏输出(上拉或下拉)

• 推挽输出

• 复用功能(开漏或推挽、上拉或下拉)

11.3.1. 通用 IO(GPIO)

复位期间和刚复位后,复用功能未开启,IO 端口被配置成浮空输入模式。

当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ ODAT)输出到相应的 IO 引脚。可以以推挽或开漏模式使用输出驱动器。

输入数据寄存器(GPIOx_ IDAT)在每个 APB 时钟周期捕捉 IO 引脚上的数据。所有 GPIO 引脚有一个内部弱上拉,当配置为输入时,它们可以被激活也可以被断开。

11.3.2. 单独的位操作

当对 GPIOx_ ODAT 的个别位编程时,软件不需要禁止中断:在单次 APB 写操作里,可以只更改一个或多个位。只需要通过对“置位/复位寄存器”(GPIOx_BSR)或“取反寄存器”(GPIOx_TGL)中想要更改的位写“1”来实现。没被选择的位将不被更改。

11.3.3. 复用功能(AF)

芯片 IO 引脚通过多路选择器连接到片内外设,每个 IO 上同一时刻只能选通一个复用功能。每个 IO引脚有一个 2 输入的多路选择器连接到复用功能(AF0~AF1),通过配置 GPIOx_AFRH/L 选择功能。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个 GPIO 脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。

11.3.4. 输入配置

当 IO 端口配置为输入时

• 输出缓存器被禁止

• 施密特触发输入被激活

• 根据输入配置(上拉、下拉或浮空)的不同,弱上拉和下拉电阻被连接

• 出现在 IO 脚上的数据在每个 APB 时钟被采样到输入数据寄存器

• 对输入数据寄存器的读访问可得到 IO 状态

11.3.5. 输出配置

当 IO 端口被配置为输出时

• 输出缓冲器被激活

开漏模式:输出寄存器上的“0”激活 N-MOS,而输出寄存器上的“1”将端口置于高阻态(P-MOS 从不被激活)推挽模式:输出寄存器上的“0”激活 N-MOS,而输出寄存器上的“1”将激活 P-MOS。

• 施密特触发输入被激活

• 弱上拉和下拉电阻被禁止

• 出现在 IO 脚上的数据在每个 APB 时钟被采样到输入数据寄存器

• 在开漏模式时,对输入数据寄存器的读访问可得到 IO 状态

• 在推挽模式时,对输出数据寄存器的读访问得到最后一次写的值

11.3.6. 模拟输入配置

当 IO 端口被配置为模拟输入配置时

• 输出缓存器被禁止

• 禁止施密特触发输入,实现了每个模拟 IO 引脚上的零消耗。施密特触发输出值被强制为“0”

• 弱上拉和下拉电阻被禁止

• 读取输入数据寄存器时数值为“0”

11.3.7. 复用功能配置

对 IO 端口进行编程作为复用功能时

• 在开漏或推挽式配置中,输出缓冲器被打开

• 内置外设的信号驱动输出缓冲器 (复用功能输出)

• 施密特触发输入被激活

• 弱上拉和下拉电阻被禁止

• 在每个 APB 时钟周期,出现在 IO 脚上的数据被采样到输入数据寄存器

• 开漏模式时,读输入数据寄存器时可得到 IO 口状态

• 在推挽模式时,读输出数据寄存器时可得到最后一次写的值

11.4. 模块框图

 


关键字:华大电子  MCU  通用输入输出 引用地址:华大电子MCU-CIU32F011x3、CIU32F031x5通用输入输出

上一篇:华大电子MCU-CIU32F011x3、CIU32F031x5同步串行接口
下一篇:华大电子MCU-CIU32F011x3、CIU32F031x5复位和时钟系统

推荐阅读最新更新时间:2024-11-12 12:54

51单片机实验5:动态数码管
开发板数码管模块电路图如下: 由于74ls138译码器的特点,即只能是一个数码管的阴极电平为0,显然不能使多个数码管同时工作,若想要得到多个数码管同时工作的效果,只能采用动态扫描显示的方式。所谓动态扫描显示,就是利用发光管的余辉和人眼视觉暂留作用,使人感觉好像多个数码管在同时工作。 程序中digdisplay函数利用for循环和switch语句,不断扫描8个数码管,完成位选工作,并对P0口赋值实现段选功能。从而在8个数码管依次输出1~8,并利用延时函数控制输出间隔时间,实现动态输出的功能。 细节: (1)在每位数码管显示之后设置一定时间的延时。 (2)P0口置0(P0=0x00),完成“消影”目的。 #incl
[单片机]
51<font color='red'>单片机</font>实验5:动态数码管
如何在STM32单片机上移植FreeRTOS
首先在网上看到大部分移植FreeRTOS 都是选择修改他的启动文件,我个人感觉这样不是很好,毕竟是汇编,当你采用不同的芯片型号时,又要修改不同的xx.S文件,所以我选择修改FreeRTOSconfig.h文件。 1. 下载STM32官方源码:我的是基于V3.5的官方库(有工程模板的可以不用)。 2. 搭建好一个MDK的工程,我这里采用的是野火的工 程。 3. 在工程模板目录下新建一个FreeRTOS文件夹,在FreeRTOS文件夹在建一个includewen文件夹(存放.h文件,方便管理)。 (1)从FreeRTOS7.0.2 的源文件中找到 croutine.c, timers.c,list.c, queue.c, task
[单片机]
PIC单片机驱动LCD1602液晶循环显示两行字符串程序
#include pic.h __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 //LCD控制线宏定义 #define rs RA0 #define rw RA1 #define e RA2 char web = { www.51hei.com }; char tel = { QQ:776860123 }; void init(); //申明I/O口初始化函数 void lcd_init(); //申明LCD初始化函数 void write(char x); //申明显示1字节数据函数 voi
[单片机]
51单片机-定时器1中断
************************************************************************************** *定时器1实验* 实现现象:下载程序后数码管最后一位间隔一秒循环显示0-F。使用单片机内部定时器可以实现准确延时。 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。 ***************************************************************************************/ #include reg52.h //此文件中定义了单片机
[单片机]
单片机 avr 定时器/计数器T/C2
T/C2: 8位定时器/计数器,可产生无输出抖动、相位可调的脉宽调制信号。 FOC2强制输出比较:仅在WGM指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,使用 PWM 时,写TCCR2 要对其清零。写1 后,波形发生器将立即进行比较操作 TNCT2计数寄存器: 通过它 寄存器可以直接对计数器的8 位数据进行读写访问 OCR2输出比较寄存器: 输出比较寄存器包含一个8 位的数据,不间断地与计数器数值TCNT2 进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC2 引脚上产生波形。 T/C1 真正的16位定时器/计数器,能够输出16位的PWM,有两个独立的输出比较单元。具有输入捕捉功
[单片机]
<font color='red'>单片机</font> avr 定时器/计数器T/C2
PIC18Fxx单片机内部EEPROM存取程序
#include p18cxxx.h #include p18f6680.h #include usart.h #pragma config OSC=HS #pragma config WDT = OFF void eebf_d( void); void eebf( void); unsigned char out_bz ; unsigned char *buf_d ,*buf ; int j=0 ; //创建接受数组 #pragma idata bigsata unsigned char out ; #pragma idata void eebf( void) //将数据存EEPR
[单片机]
如何长进单片机系统的抗扰乱功能
搞过产品的朋友都有经验,一个设计看似容易,硬件设计和代码编写很快就搞定,但在调试过程中却或多或少的事故,这些都是抗扰乱力气不够的揭示。 下面谈论一下如何让你的设计避免走弯路: 抗扰乱展目前2个方面,一是硬件设计上,二是软件编写上。 这里关键提醒:在MCU设计中重要抗扰乱设计是在硬件上,软件为辅。因为MCU的计算力气有限,因而要在硬件上花大工夫。 看看扰乱的门径: 1:扰乱信号扰乱MCU的重要路径是穿越I/O口,一是波及了MCU的数据采集,二是波及内部其它储藏器。 处理措施:后面谈论。 2:电源扰乱:MCU固然习惯电压较宽(3-5。5V),但对于电源的波动却很敏感,例如说MCU能够在3V电压下安宁工作,但却不能在电压在3V-5。5V波
[单片机]
基于GD32 MCU的电机驱动方案详解
兆易创新 GD32 MCU 在电机驱动应用上,经过多年技术沉淀,在无刷电机和步进电机的应用中,形成自身完整可靠的解决方案,愿能为用户提供更多的服务。 社会发展日新月异,我们的生活和工作越来越智能化,智能牙刷,扫地机器人,无人机等已经日常化使用,机械自动化也作为工业 IOT 的一个重要组成部分,其中我们可以看到电机的使用已经是一个共同的焦点应用。 作为工程师的我们,总是在我们的产品上进行深度思考,如何实现社会用户的使用需求。 需要什么类型电机 电机的功率,电压,电流参数要求 电机的速度,位置,转矩,精度 电机驱动算法 ZLG 具有一支资深的专业电机控制算法解决团队,为您做了如下分类,您可根据切身应用作以对比验证。 ZLG
[单片机]
基于GD32 <font color='red'>MCU</font>的电机驱动方案详解
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved