EV_HC32F460_ADC调试

EV_HC32F460_ADC调试

简介

HC32F460 系列 MCU 内部集成 ADC1 ADC2 两个 ADC 模块(系统框图如图 2-1),挂载于AHB-APBAPB3)总线,可配置 12 位、 10 位和 8 位分辨率,支持最多 16 个外部模拟输入通道和 1 个内部基准电压/8bitDAC 输出的检测通道。这些模拟输入通道可以任意组合成一个序列(序列 A 或序列 B),一个序列可以进行单次扫描(包括两个动作:采样和转换),或连续扫描。支持对任意指定通道进行连续多次扫描,并对转换结果进行平均。

硬件

我们先找开发板的原理图,在第七页找到电位计的电路图。

 

对应电路图和实物上的连接,电位器的接口在PC0 的端口,该端口功能复用为 ADC ,连接到 ADC12 的IN10。

 

在 DLL 的库中有函数来配置端口的功能,其实就是对 GPIO 的功能选择寄存器的配置,端口的功能选择寄存器 PFSRxy ,x: 对应A~E,H,对应0~4,5。而 y 对应的是各个 IO 口,范围是 0~15。根据各个端口的 IO 口数量来决定 y 的值。这个 y 在用户手册上我暂时未找到其含义的解释。

en_result_t PORT_SetFunc(en_port_t enPort, uint16_t u16Pin, en_port_func_t enFuncSel,  en_functional_state_t enSubFunc)

该函数的入口参数 (Param)

参数1:对应的是 Port 的端口

参数2:对应的是对应 Port 的 IO 口

参数3:选择该口的功能

参数4:是否使能其副功能

第一、二个参数不需要多做解释,第三个参数可以查看数据手册中的2.2章中的引脚功能表来查看引脚可以设置的功能,上述中第四个参数的设置和公共控制寄存器 PCCR 相关,某些应用场合需要直接写寄存器比较高效,所以寄存器还是要了解。

软件

软件这个地方要结合官方的例程以及 dll 的帮助文档来学习,但是最根本的还是用户手册了,使用库函数开发要熟悉库的使用方法。

系统时钟初始化函数

在该篇中有些已经在之前的文章中有提到,有些可能不在做详细解释,会提到在哪篇中讲过,请移步查看,在下图所示的代码中已经详细注释。

 

上图为系统时钟的初始化配置,在代码中我已将详细注释,只需要对照我的注释再结合官方的帮助手册,就能知道其含义,不知含义的可以找到配置源代码对照用户手册来确定其功能,之后的使用中可以参考官方例程根据自己的需求对底层驱动代码进行修改。

ADC 的配置

ADC 时钟的配置

在 ADC 时钟的配置部分,在官方最基础的代码中只将用到的配置时钟进行了注解,如下图所示,

 

根据系统时钟框图ADC 的时钟来源可以理解为三大类。第一类:系统时钟分频出来的。第二类:UPLL 倍频分频出来的。第三类:MPLL 倍频分频出来的。

 

ADC 的时钟初步先讲解到此,大家也可以深入搞搞。

ADC 的功能配置

ADC 的功能配置,主要配置分辨率、数据对齐模式、结果清除、扫描模式的配置。详细请查看代码中的注释。

 

ADC 的通道配置

ADC 的通道配置,主要配置的有 ADC 的通道、序列、需要硬件平均的通道、平均的次数、

将对应的引脚配置为模拟模式(其实是对通用控制寄存器PCRxy[15] 的DDIS 位的设置),设置为1是禁止数字功能(就是使能模拟功能),上文也提到了 xy 的值代表什么,x对应各个端口,y对应各个端口的IO口,我理解的通用控制寄存器(PCRxy)和功能选择寄存器(PFSRxy) 总计各有 6*16。

总结

       基本将 ADC 的配置梳理了一下,至于端口的模式配置,可以详细对照数据手册中的寄存器地址理解一下。

猜你喜欢

转载自blog.csdn.net/qq_39567970/article/details/118854888