【GD32】02-ADC模拟数字转换器

ADC

在电子和通信技术中,ADC(模拟数字转换器)是一种将模拟信号转换为数字信号的电子设备。这种转换是电子系统中非常关键的一个环节,因为数字信号更易于处理、存储和传输。ADC的工作原理通常包括采样、保持、量化和编码等步骤。采样是从模拟信号中提取离散的值,保持是确保在采样期间信号值不变,量化是将采样值转换为最接近的数字值,而编码则是将这些数字值表示为二进制代码。ADC的性能指标包括分辨率、转换速率和精度等。

ADC在多个领域都有广泛的应用。在通信领域,ADC用于将模拟信号(如语音信号)转换为数字信号,以便在无线通信、有线通信和光纤通信系统中进行传输。在医疗领域,ADC用于将生物信号(如心电图和脑电图)转换为数字信号,以便于进行医学分析和诊断。此外,在汽车领域,ADC用于检测传感器信号,如发动机转速、车速和油位等,以实现对汽车系统的精确控制。

 以上介绍来自文心一言。

GD32E230C8T6中的ADC

GD32E230C8T6只有一个ADC,但是可以用的外部通道有10个,还是够用的。

那么我们需要看看ADC的不同通道对应着哪些GPIO。

可用的GPIO是GPIOA的0号引脚到7号引脚,以及GPIOB的0和1号引脚。

接下来我们来看看怎么使用ADC。

固件库函数

在介绍ADC相关固件库之前我们需要先打开外设时钟。 

    rcu_periph_clock_enable(RCU_ADC);

还需要指定一下ADC的时钟。

rcu_adc_clock_config

可以选择的选项在上面表格中。关于如何选择,我们还需要看看GD32E230的时钟树。

由于ADC最大只能28MHz,因此配置的时钟频率不能大于28MHz。

ADC相关的固件库函数很多,我这边就挑着讲。

adc_enable

无需参数,调用即可使能ADC外设。

当然了,这个函数我们需要等ADC配置完再调用,可以参考STM32的ADC。这边先讲是因为我按照固件库使用指南的顺序说的,函数具体调用的时机可以参考我最后的示例代码。

adc_disable

有使能就有失能。调用之后就相当于关闭了ADC外设。

adc_calibration_enable

开启ADC校准复位。也就是让ADC开始校准,在STM32中也有类似的做法,不过在GD32的固件库中我们只需要调用这个函数即可。

adc_channel_length_config

配置通道组的长度,一般来说都是用的规则组(ADC_REGULAR_CHANNEL),我们一共用到几个ADC通道,我们第二个参数就填几。

adc_regular_channel_config

设置规则组,设置rank也就是通道序列,还有ADC的通道,一般来说通道几我们的rank也就是几。还有就是采样时间,可供选择的参数可以参考上表,采样周期越长,采样结果越精确,按照实际需求配置就行。

adc_external_trigger_config

配置ADC外部触发。我们选择规则组和使能。

这个函数描述会有点歧义,我们ADC一般是由软件触发的,实际上软件触发也属于外部触发的一种,这边外部触发的外部和外部中断的外部不太一样。

adc_external_trigger_source_config

选择外部触发源,我们选择软件触发。 

adc_software_trigger_enable

开启软件转换。

adc_regular_data_read

读取规则组的ADC的转换值,但是我们需要在ADC转换之后再读取。

adc_flag_get

获取ADC的标志位,我们在读取数据之前需要等待ADC转换结束,用的就是这个函数。

adc_resolution_config

配置ADC分辨率,可以选6,8,10,12位,一般来说我们就多多益善,选择12位的分辨率。

adc_special_function_config

开启ADC特殊功能,我们这边打开扫描模式。如果有用到DMA的话可以选择连续模式。

adc_data_alignment_config

选择数据对齐方式,因为存放ADC转换结果的寄存器是16位,而我们的分辨率是小于16位的,因此我们需要选择把这12位的数据靠左放还是靠右放,一般就是右对齐。

示例代码

我们再梳理一下,首先先调用配置函数,配置函数的顺序无所谓,都可以。

然后是使能ADC,接着是校准。

最后是读取数据,开启软件触发之后我们就等待转换完毕,转换结束之后调用函数读取即可。

#include "gd32e23x.h"
#include "systick.h"
#include <stdio.h>
#include "OLED.h"uint16_t getValue(uint8_t  ADC_CHANNEL_x){adc_regular_channel_config(0, ADC_CHANNEL_x, ADC_SAMPLETIME_239POINT5); //设置采集通道adc_software_trigger_enable(ADC_REGULAR_CHANNEL);                       //开始软件转换while ( adc_flag_get(ADC_FLAG_EOC) == RESET ) ;                         //等待 ADC 采样完成 uint16_t res = adc_regular_data_read();                                 //读取采样值return res;
}int main(void){systick_config();       //延时函数初始化OLED_Init();            //OLED初始化rcu_periph_clock_enable(RCU_GPIOA);   //开启GPIOA的外设时钟rcu_periph_clock_enable(RCU_ADC);     //开启ADC的外设时钟rcu_adc_clock_config(RCU_ADCCK_APB2_DIV4);  //指定ADC的时钟为5分频的APB2(72MHz/4)gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0);     //将ADC的对应通道的对应引脚设为模拟输入adc_special_function_config(ADC_SCAN_MODE, ENABLE);                     //开启扫描模式adc_external_trigger_config(ADC_REGULAR_CHANNEL,ENABLE);                //开启规则组外部触发adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);  //配置规则组为软件触发adc_regular_channel_config(0, ADC_CHANNEL_0, ADC_SAMPLETIME_239POINT5); //设置规则组通道adc_data_alignment_config(ADC_DATAALIGN_RIGHT);                         //数据右对齐adc_resolution_config(ADC_RESOLUTION_12B);                              //配置分辨率为12位adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);                      //配置规则组长度为1adc_enable();                       //使能ADC    adc_calibration_enable();           //开启校准uint16_t val;OLED_ShowString(1,1,"Hello World");while(1){val=getValue(ADC_CHANNEL_0);OLED_ShowNum(2,1,val,6);delay_ms(1000);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http协议 tomcat如何访问资源 servlet理论介绍

tomcat介绍 bin是启动命令&#xff1b; conf是配置&#xff0c;可以修改端口号&#xff1b; lib是依赖的jar包&#xff1b; logs是日志 webapps是重点&#xff0c;在这里新建我们自己的javaWeb项目 tomcat如何访问资源 tomcat通过统一资源定位符&#xff08;URL&#xff09;来…

乡村振兴与农村基础设施建设:加大农村基础设施建设投入,提升农村公共服务水平,改善农民生产生活条件,构建宜居宜业的美丽乡村

一、引言 乡村振兴是我国现代化进程中的重要战略&#xff0c;而农村基础设施建设则是乡村振兴的基石。随着城市化进程的加快&#xff0c;农村基础设施建设滞后的问题日益凸显&#xff0c;成为制约乡村发展的瓶颈。因此&#xff0c;加大农村基础设施建设投入&#xff0c;提升农…

AI大模型探索之路-训练篇21:Llama2微调实战-LoRA技术微调步骤详解

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

华为OD机试 - 执行任务赚积分 - 动态规划(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述 现有 N 个任…

Gradle基础学习(六) 认识任务Task

理解Gradle中的任务 Gradle的构建过程基于任务&#xff08;Task&#xff09;的概念&#xff0c;而每个任务都可以包含一个或多个动作&#xff08;Action&#xff09;。 任务是构建中执行的一些独立的工作单元&#xff0c;例如编译类、创建JAR、生成Javadoc或将存档发布到仓库…

4.5网安学习第四阶段第五周回顾(个人学习记录使用)

本周重点 ①部署域环境&#xff08;Win2008&#xff09; ②域组策略 ③域内信息收集 ④(重点)哈希传递攻击PTH ⑤MS14-068 提权漏洞 ⑥黄金票据伪造 ⑦白银票据伪造 ⑧ZeroLogon (CVE-2020-1472) 漏洞复现 本周主要内容 ①部署域环境&#xff08;Win2008&#xff09;…

【算法】滑动窗口——串联所有单词的子串

今天来以“滑动窗口”的思想来详解一道比较困难的题目——串联所有单词的子串&#xff0c;有需要借鉴即可。 目录 1.题目2.下面是示例代码3.总结 1.题目 题目链接&#xff1a;LINK 这道题如果把每个字符串看成一个字母&#xff0c;就是另外一道中等难度的题目&#xff0c;即&…

不同路径| 和 不同路径||

不同路径| 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xf…

大学生体质测试|基于Springboot+vue的大学生体质测试管理系统设计与实现(源码+数据库+文档)

大学生体质测试管理系统 目录 基于Springboot&#xff0b;vue的大学生体质测试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 4教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算…

C++笔试强训day20

目录 1.经此一役小红所向无敌 2.连续子数组最大和 3.非对称之美 1.经此一役小红所向无敌 链接 简单模拟即可。 需要注意的是&#xff1a; 除完之后有无余数&#xff0c;若有&#xff0c;则还可以再挨一次打。 #include <iostream> using namespace std; #define in…

设计模式——结构型模式——代理模式(静态代理、动态代理:JDK、CGLIB)

目录 代理模式 代理模式简介 代理模式的分类 代理模式组成 代理模式的优缺点 静态代理 背景前置 编写代码 JDK动态代理 编写代码 使用Arthas分析JDK动态代理底层原理 CGLIB动态代理 编写代码 三种代理的对比 代理模式使用场景 代理模式 代理模式简介 代理模式属…

Mybatis操作数据库的两种方式:Mapper代理模式

1.Mapper代理模式的特点 程序员没有写接口的子实现——直接获取数据库的数据 因为Mybatis定义了一套规则&#xff0c;对方法进行了实现&#xff0c;程序员只要遵循这套方法就可以直接使用 2.如何实现Mapper代理模式 步骤&#xff1a; 1.创建一个dao接口&#xff0c;在接口…

java项目之英语知识应用网站源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的英语知识应用网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 英语知识应用网站的主要…

【免费】AME最新Adobe Media Encoder电脑软件安装包2024-2018支持WIN和MAC

Adobe MediaEncoder「Me」2024是一款功能强大的转码和媒体处理软件&#xff0c;它不仅能轻松应对各种媒体文件的编码和导出需求&#xff0c;还支持多种视频格式和分辨率&#xff0c;让你的视频处理变得更加高效。此外&#xff0c;该软件界面简洁明了&#xff0c;操作简便&#…

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努…

【Element-UI快速入门】

文章目录 **Element-UI快速入门****一、Element-UI简介****二、安装Element-UI****三、引入Element-UI****四、使用Element-UI组件****五、自定义Element-UI组件样式****六、Element-UI布局组件****七、Element-UI表单组件****八、插槽&#xff08;Slots&#xff09;和主题定制…

【数据结构】排序(一)—— 希尔排序(思路演进版)

目录 一、常见的排序算法分类 二、常见排序算法的实现 2.1插入排序 2.1.1基本思想 2.1.2直接插入排序 思路 step1.单趟控制 step2.总体控制 代码实现 测试 特性总结 2.1.3 希尔排序( 缩小增量排序 ) 基本思想 思路演进 &#x1f308;1.代码实现单组排序&#…

端午节线上活动方案怎么写?

一年一端午&#xff0c;一岁一安康。 如果您想组织端午活动&#xff0c;却不知道如何安排&#xff0c;可以看看何策网&#xff0c;有很多案例参考&#xff0c;仿造模板修改即可。 下面分享一个线上端午节活动策划方案&#xff0c;希望能帮到你&#xff01; 端午节作为祭祖祈…

mysql集群NDBcluster引擎在写入数据时报错 (1114, “The table ‘ads‘ is full“)

问题描述&#xff1a;mysql集群在写入数据时&#xff0c;出现上述报错 问题原因&#xff1a;表数据已满&#xff0c;一般是在集群的管理节点设置里面datamemory的值太小&#xff0c;当数据量超过该值时就会出现该问题 解决方案&#xff1a; 修改集群管理节点的config.ini里面…

ICode国际青少年编程竞赛- Python-4级训练场-嵌套for循环练习2

ICode国际青少年编程竞赛- Python-4级训练场-嵌套for循环练习2 1、 for i in range(3):Dev.turnRight()for j in range(3):Dev.step(-3)Dev.turnRight()Dev.step(4-2*i)2、 for i in range(6):for j in range(2):Dev.step(2 2 * i)if i > 3: Dev.step(i - 2)Dev.turnRi…