HK32MCU应用笔记(十二)| HK32F103xC/D/E的GPIO的应用及注意事项

电子说

1.3w人已加入

描述

HK32F103x/C/D/E是航顺芯片推出的中大容量的103系列芯片,而作为32位MCU最常用功能就是GPIO。HK32F103x的每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR 和 GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式。

输入浮空

输入上拉

输入下拉

模拟输入

开漏输出

推挽式输出

推挽式复用功能

开漏复用功能

每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访问)。GPIOx_BSRR 和 GPIOx_BRR 寄存器允许对任何GPIO寄存器进行读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。每个GPIO管脚都可以由软件配置成输出(推拉或开路)、输入(带或不带上拉或下拉)或其它的外设功能端口。多数 GPIO 管脚都与数字或模拟的外设共用。所有的 GPIO 管脚都有大电流通过能力。在需要的情况下,I/O 管脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入 I/O 寄存器。

下图就是I/O 端口位的基本结构:

mcu

5伏兼容 I/O 端口位的基本结构

mcu

注意:VDD_FT 对5伏容忍I/O脚是特殊的,它与VDD不同

端口位配置表

mcu

输出模式位

mcu

单独的位设置或位清除

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

复用功能(AF)

使用默认复用功能前必须对端口位配置寄存器编程。

● 对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动

注意:也可以通过软件来模拟复用功能输入引脚,这种模拟可以通过对 GPIO 控制器编程来实现。此时,端口应当被设置为复用功能输出模式。显然,这时相应的引脚不再由外部驱动,而是通过 GPIO 控制器由软件来驱动。

● 对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。

● 对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。

如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。

输入配置

当 I/O 端口配置为输入时:

● 输出缓冲器被禁止

● 施密特触发输入被激活

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

● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器

● 对输入数据寄存器的读访问可得到I/O状态

输出配置

当 I/O 端口被配置为输出时:

● 输出缓冲器被激活

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

─ 推挽模式:输出寄存器上的’0’激活 N-MOS,而输出寄存器上的’1’将激活 P-MOS。

● 施密特触发输入被激活

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

● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器

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

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

复用功能配置

当 I/O 端口被配置为复用功能时:

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

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

● 施密特触发输入被激活

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

● 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器

● 开漏模式时,读输入数据寄存器时可得到I/O口状态

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

模拟输入配置

当 I/O 端口被配置为模拟输入配置时:

● 输出缓冲器被禁止

● 禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置为’0’

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

● 读取输入数据寄存器时数值为’0’

下面就HK32F103xC/D/E在操作上需要应用开发者注意的。

用户在使用HK32F103xC/D/E时,使用软件循环产生定时,用GPIO翻转模拟时序,发现跟友商不一致。这是我们设计跟友商不一样。

解决方法如下:

不开 Cache,HK32F103xCxDxE 效率低一点。

打开 Cache,HK32F103xCxDxE 效率明显提高。

以上有关寄存器的介绍可以参考我们HK的HK32F103xC/D/E的应用手册。

来源:航顺芯片

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分