打印
[方案相关]

EV-HC32F460-GPIO简介与调试

[复制链接]
1666|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
EV-HC32F460-GPIO简介与调试简介

       GPIO 做为单片机最基础的外设也是较关键的外设之一,常规端口的配置,如输入、输出、模拟输入(ADC),端口的上拉电阻,开漏输出,这颗片子独特之处在于一个端口可以配置两个功能,需要注意的是不能设置成两个输出功能


调试硬件

在开发工具中找到压缩文件文件(EV-HC32F460-LQFP100设计文件)打开、找到开发板的电路图文件(EV-F460-LQ100-V14_SCH_20201215),在电路图中的第七页,找到GPIO 的连接(原理图的第一中的左上角有标注)


使用特权

评论回复
沙发
实际测量不符|  楼主 | 2021-11-30 11:48 | 只看该作者
LED 的电路

使用特权

评论回复
板凳
实际测量不符|  楼主 | 2021-11-30 11:48 | 只看该作者
LED 通过网络标号的形式连接到 MCU 上,我们还需要找到 MCU 部分的电路图(第三页),找到对应网络标号 LED0、LED1、LED2、LED3 所连接的 MCU 端口。

使用特权

评论回复
地板
实际测量不符|  楼主 | 2021-11-30 11:49 | 只看该作者
由原理图我们可以知道 LED 与之对应 GPIO 端口。



使用特权

评论回复
5
实际测量不符|  楼主 | 2021-11-30 11:51 | 只看该作者
软件
库文件简介

       在官网的开发工具中有一个帮助文件(hc32f46x_ddl_help_Rev1.3.0)该文件解压后为一个 HTML 的帮助文档,在该文档中可以找到库文件涉及的 数据结构和相应的 API 函数,此章以 GPIO 为例,简单介绍如何查找对应功能的 API 函数。

使用特权

评论回复
6
实际测量不符|  楼主 | 2021-11-30 11:56 | 只看该作者
在目前文件(hc32f46x_ddl_Rev1.3.0)所使用的库文件版本做简单介绍,其中 GPIO 包含了如下图所示的 API 函数(在文件 hc32f46x_gpio.h 中)

使用特权

评论回复
7
实际测量不符|  楼主 | 2021-11-30 11:56 | 只看该作者

使用特权

评论回复
8
实际测量不符|  楼主 | 2021-11-30 11:58 | 只看该作者
在源文件中也可通过阅读代码了解到函数的功能,

此处大致介绍较为常用的 API 函数。

使用特权

评论回复
9
实际测量不符|  楼主 | 2021-11-30 12:05 | 只看该作者
PORT_Init(en_port_t enPort, uint16_t u16Pin, const stc_port_init_t *pstcPortInit)

参数

参数1:en_port_t:为 GPIO的端口 PortA、PortB、PortC、PortD、PortE、PortH

参数2:en_pin_t:对应端口的引脚 0~15 & ALL

参数3:stc_port_init_t:端口的功能模式配置结构体,初始化方式与 ST 的类似。

使用特权

评论回复
10
实际测量不符|  楼主 | 2021-11-30 12:06 | 只看该作者
对于该 API 函数稍作较细致分析,往后的篇幅中可能不会这么讲解,跳入初始化 API 函数中,如下图所示

使用特权

评论回复
11
实际测量不符|  楼主 | 2021-11-30 12:07 | 只看该作者

使用特权

评论回复
12
实际测量不符|  楼主 | 2021-11-30 12:08 | 只看该作者

使用特权

评论回复
13
实际测量不符|  楼主 | 2021-11-30 12:11 | 只看该作者
在图中所示①处的操作是调试用到的,最里面的内容理解可以参照下面这篇**理解,有兴趣的可以详细看看 __FILE__ 、__LINE__,这里暂不详细解释。

使用特权

评论回复
14
实际测量不符|  楼主 | 2021-11-30 12:14 | 只看该作者
https://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html

在图中所示②处的操作与引脚的枚举变量有关,在文件 hc32f46x_gpio.h 中有如下图所示对 Pin 口的定义,结合这个地方的定义就能理解上述②处的循环操作。

使用特权

评论回复
15
实际测量不符|  楼主 | 2021-11-30 12:15 | 只看该作者

使用特权

评论回复
16
实际测量不符|  楼主 | 2021-11-30 12:16 | 只看该作者
②处以下的操作是确定对应 PORT 和 Pin 口的 PCRxy、PFSRxy 寄存器基址,可以在用户手册的 9.4 寄存器说明找到如下所示的地址计算,和代码中相对应。

使用特权

评论回复
17
实际测量不符|  楼主 | 2021-11-30 12:16 | 只看该作者
对于地址的计算可以详细看一下代码中的操作,理解联合体 union 、结构体 struct 的操作,就能理解②处以下的代码。

使用特权

评论回复
18
实际测量不符|  楼主 | 2021-11-30 12:22 | 只看该作者
代码就大致讲这么多,关键在于对 union 和 struct 操作的理解,其他外设的地址也是如此对应的.

大致讲一下,不足之处还请指出

union 联合体也叫共用体   该用法与内存有关系

union 对内存的请求是按最大字节元素申请空间(而且与对齐有关系)

使用特权

评论回复
19
实际测量不符|  楼主 | 2021-11-30 12:22 | 只看该作者
union
{
    char a;
    short b;
    int c;
};

使用特权

评论回复
20
实际测量不符|  楼主 | 2021-11-30 12:23 | 只看该作者
在上述的联合体中所占用的空间为 4byte

struct 的一个操作,如下所示的结构体所占用的内存为 16 Bit ,冒号后边的数字代表的是几个 Bit ,所以该结构占用 16 Bit

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

603

帖子

1

粉丝