4627|11

33

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

EV-HC32F460-GPIO简介与调试 [复制链接]

 
  本帖最后由 gao_hex 于 2021-3-24 23:46 编辑

一、简介

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

二、调试

1、硬件

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

LED 的电路

LED 通过网络标号的形式连接到 MCU 上,我们还需要找到 MCU 部分的电路图(第三页),找到对应网络标号 LED0、LED1、LED2、LED3 所连接的 MCU 端口。

由原理图我们可以知道 LED 与之对应 GPIO 端口。

LED0--------PE6

 LED1--------PA7

LED2--------PB5

LED3--------PB9

2、软件

库文件简介

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

       在目前文件(hc32f46x_ddl_Rev1.3.0)所使用的库文件版本做简单介绍,其中 GPIO 包含了如下图所示的 API 函数(在文件 hc32f46x_gpio.h 中

在源文件中也可通过阅读代码了解到函数的功能,

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

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 的类似。

对于该 API 函数稍作较细致分析,往后的篇幅中可能不会这么讲解,跳入初始化 API 函数中,如下图所示

在图中所示①处的操作是调试用到的,最里面的内容理解可以参照下面这篇文章理解,有兴趣的可以详细看看 __FILE__ 、__LINE__,这里暂不详细解释。

https://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html

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

    个人觉得端口的定义可以直接定义为端口的数字,这样就会减少没必要的循环,只需要判断特殊的操作(对整个 PORT 操作)就可以避免对齐之一个端口操作带来的循环。毕竟对整个 PORT 操作没有对单独一个端口的操作常用。个人拙见,可以交流学习,细看源码能学习挺多的操作。

②处以下的操作是确定对应 PORT 和 Pin 口的 PCRxy、PFSRxy 寄存器基址,可以在用户手册的 9.4 寄存器说明找到如下所示的地址计算,和代码中相对应。

    对于地址的计算可以详细看一下代码中的操作,理解联合体 union 、结构体 struct 的操作,就能理解②处以下的代码。

代码就大致讲这么多,关键在于对 union 和 struct 操作的理解,其他外设的地址也是如此对应的。


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

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

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

union
{
    char a;
    short b;
    int c;
};

在上述的联合体中所占用的空间为 4byte

 

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

typedef struct
{
    uint16_t :1;
    uint16_t :2;
    uint16_t :2;
    uint16_t :4;
    uint16_t :2;
    uint16_t :2;
    uint16_t :1;
    uint16_t :1;
    uint16_t :1;
}DR;

    下面对例程 GPIO 代码的简介,应该会有人疑问时钟的初始化去哪了,时钟的初始化在 SystemInit 中被初始化,然后疑问又来了。SystemInit 在main函数中没找到,这个就要和单片机的启动有关系了,在 main 函数之前还有时钟初始化和 __main 函数的运行,这个我们要去启动文件中可以找到。Debug 时就可以看到运行的步骤,如下图所使

上述大致就是对GPIO的操作简述了,有兴趣想要深入了解的小伙伴,可以百度了解一下之前提到的一些。

 

点灯图

讲了这么多来张效果图吧

个人体会

        相比较之下在国产中华大的库确实写的不错了,GD 、中微、用过对比一下就知道了。国外的话 ST 的库确实写的不错(毕竟玩的第一款 32 位 MCU),NXP 的库吧个人觉得宏定义太多,一个功能能宏定义三次或者更甚,目前没了解到这样做的原因,或许还没到境界吧  哈哈。接下来的测评文,对底层库的配置就不这么分析了,望大家理解。手抽了 半夜十一点多了,洗洗睡觉,明天还要搬砖。

image.png (167.09 KB, 下载次数: 0)

image.png

最新回复

这个烧写程序是用的jlink吗?之前玩的stm32f103都是用的stlink   详情 回复 发表于 2021-3-27 09:01
点赞 关注
 
 

回复
举报

2万

帖子

74

TA的资源

管理员

沙发
 

辛苦了 ,继续加油!

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

最近不加班  多整整这个,哈哈哈  详情 回复 发表于 2021-5-19 21:37
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 

谢谢分享,期待后续

点评

撸起袖子淦  详情 回复 发表于 2021-5-19 21:36
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

6856

帖子

0

TA的资源

五彩晶圆(高级)

4
 

就是这个时钟的初始化在 SystemInit 中被初始化,手册上有否说明呢

点评

所有的单片机在main运行之前都会有 系统时钟初始化 及__main的运行,这个就很偏底层,这款单片机个别外设是没有单独的时钟使能控制  详情 回复 发表于 2021-3-26 08:59
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

5
 
Jacktang 发表于 2021-3-25 22:54 就是这个时钟的初始化在 SystemInit 中被初始化,手册上有否说明呢

所有的单片机在main运行之前都会有 系统时钟初始化 及__main的运行,这个就很偏底层,这款单片机个别外设是没有单独的时钟使能控制

点评

那如果没有没有单独的时钟使能控制的外设,就有点麻烦了  详情 回复 发表于 2021-3-26 15:47
 
 
 

回复

6856

帖子

0

TA的资源

五彩晶圆(高级)

6
 
gao_hex 发表于 2021-3-26 08:59 所有的单片机在main运行之前都会有 系统时钟初始化 及__main的运行,这个就很偏底层,这款单片机个别外设 ...

那如果没有没有单独的时钟使能控制的外设,就有点麻烦了

 
 
 

回复

155

帖子

0

TA的资源

一粒金砂(中级)

7
 

你用的是测评送的仿真器吗?

点评

之前自己买的Jlink    详情 回复 发表于 2021-3-29 23:29
 
 
 

回复

859

帖子

3

TA的资源

版主

8
 

这个烧写程序是用的jlink吗?之前玩的stm32f103都是用的stlink

点评

其实我也有个疑问  就是自己创建的工程Jlink不能识别芯片,从 ddl 里分离出来的工程就可以识别到,但是找不到原厂的人问,就先记录了这个问题  还没详细去搞  详情 回复 发表于 2021-3-29 23:32
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

9
 
梦溪开物 发表于 2021-3-26 17:20 你用的是测评送的仿真器吗?

之前自己买的Jlink

 

 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

10
 
1nnocent 发表于 2021-3-27 09:01 这个烧写程序是用的jlink吗?之前玩的stm32f103都是用的stlink

其实我也有个疑问  就是自己创建的工程Jlink不能识别芯片,从 ddl 里分离出来的工程就可以识别到,但是找不到原厂的人问,就先记录了这个问题  还没详细去搞

 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

11
 
freebsder 发表于 2021-3-25 14:27 谢谢分享,期待后续

撸起袖子淦

 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

12
 
soso 发表于 2021-3-25 09:07 辛苦了 ,继续加油!

最近不加班  多整整这个,哈哈哈

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表