GD32自学笔记:4.ADC

while(1)里测试ADC是否正常

        首先,ADC引脚说明如下:

ADC 通道引脚描述
ADC_CHANNEL_0PA0端口 A 的引脚 0,可用于模拟信号输入,如传感器或外部电压。
ADC_CHANNEL_1PA1端口 A 的引脚 1,常用于模拟输入,适用于一般 ADC 应用。
ADC_CHANNEL_2PA2端口 A 的引脚 2,可用于 ADC 采样,常见于多通道采集场景。
ADC_CHANNEL_3PA3端口 A 的引脚 3,适用于模拟信号输入,常用于信号测量。
ADC_CHANNEL_4PA4端口 A 的引脚 4,可用于 ADC,也常用于 DAC 输出(需注意复用)。
ADC_CHANNEL_5PA5端口 A 的引脚 5,常见于模拟输入,需注意与其他外设复用。
ADC_CHANNEL_6PA6端口 A 的引脚 6,可用于 ADC 采样,注意避免与定时器等冲突。
ADC_CHANNEL_7PA7端口 A 的引脚 7,适用于一般 ADC 输入场景。
ADC_CHANNEL_8PB0端口 B 的引脚 0,扩展了 ADC 通道,适合多通道采集。
ADC_CHANNEL_9PB1端口 B 的引脚 1,常用于模拟信号输入。
ADC_CHANNEL_10PC0端口 C 的引脚 0,适用于需要高精度采样的场景。
ADC_CHANNEL_11PC1端口 C 的引脚 1,此程序中使用的通道,默认用于 ADC 采样
ADC_CHANNEL_12PC2端口 C 的引脚 2,适用于模拟输入,常见于传感器接口。
ADC_CHANNEL_13PC3端口 C 的引脚 3,可用于 ADC 采样,注意外部电路设计。
ADC_CHANNEL_14PC4端口 C 的引脚 4,适用于模拟信号输入场景。
ADC_CHANNEL_15PC5端口 C 的引脚 5,常用于 ADC 通道扩展。
ADC_CHANNEL_16内部内部温度传感器通道,用于测量芯片内部温度。
ADC_CHANNEL_17内部内部参考电压通道,用于校准或测量 VREFINT。

  • 通道分配:GD32F470ZGT6 的 ADC 通道 0 到 15 对应外部 GPIO 引脚,从 PA0 到 PC5,覆盖端口 A、B、C。这些引脚在配置为 ADC 模式时,必须设置为模拟输入模式(GPIO_MODE_ANALOG)。
  • 内部通道:ADC_CHANNEL_16 和 ADC_CHANNEL_17 是内部通道,分别用于测量芯片温度和内部参考电压(VREFINT),无需外部引脚。

        硬件连接图:

        bsp_adc.c中的Get_ADC_Value函数:

unsigned int Get_ADC_Value(uint8_t  ADC_CHANNEL_x)
{unsigned int adc_value = 0;//ÉèÖòɼ¯Í¨µÀadc_regular_channel_config(ADC0, 0, ADC_CHANNEL_x, ADC_SAMPLETIME_15);//¿ªÊ¼Èí¼þת»»adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);//µÈ´ý ADC0 ²ÉÑùÍê³É while ( adc_flag_get(ADC0, ADC_FLAG_EOC) == RESET ) {;}//¶ÁÈ¡²ÉÑùÖµadc_value = adc_regular_data_read(ADC0);//·µ»Ø²ÉÑùÖµreturn adc_value;
}

       通过此函数可以明白ADC的采样流程如下:

  1. 配置 ADC 通道

    • 函数:adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_x, ADC_SAMPLETIME_15)
    • 动作:设置 ADC0 的常规通道(如 ADC_CHANNEL_11/PC1),采样时间为 15 个 ADC 时钟周期,准备采集模拟信号。
  2. 触发 ADC 转换

    • 函数:adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL)
    • 动作:通过软件触发启动 ADC0 转换,将 PC1 引脚的模拟信号(0-3.3V)转换为 12 位数字值(0-4095)。
  3. 等待转换完成

    • 函数:while (adc_flag_get(ADC0, ADC_FLAG_EOC) == RESET)
    • 动作:轮询检查 ADC 转换结束标志(EOC),等待采样和转换完成。
  4. 读取转换结果

    • 函数:adc_value = adc_regular_data_read(ADC0)
    • 动作:从 ADC0 数据寄存器读取 12 位转换结果,存储到 adc_value
  5. 返回采样值

    • 函数:return adc_value
    • 动作:返回 12 位数字值,供主程序转换为电压(如 (value / 4095.0) * 3.3)并通过串口输出。

        main.c里写:

#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "bsp_led.h"
#include "sys.h"
#include "bsp_usart.h"
#include "bsp_adc.h"
#include <stdio.h>/*!\brief    main function\param[in]  none\param[out] none\retval     none
*/
char ptr[200];
int main(void)
{uint16_t value = 0;systick_config();usart_gpio_config(9600U);adc_config();while(1) {value = Get_ADC_Value(ADC_CHANNEL_11);sprintf((char*)ptr,"ADC value = %f\r\n",(( value / 4095.0 ) * 3.3));usart_send_string(ptr);delay_1ms(500);}
}

        然后PA9(单片机TX)接USB转TTL的RX,PA10(单片机RX)接USB转TTL的TX,这里的PC1是ADC引脚,ADC引脚可以接板载的GND和3.3V测试一下:

        接GND:

        接3.3V:

      后续把ADC放定时器中断里和DMA相关的程序放在开发板”毕业“小项目里再涉及。

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

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

相关文章

渐变背景色和渐变字体颜色的实现方法

一、渐变背景色&#xff08;Gradient Background&#xff09;1. 线性渐变&#xff08;Linear Gradient&#xff09;通过 linear-gradient 创建从一种颜色到另一种颜色的线性渐变。代码示例<div class"linear-gradient"></div><style> .linear-grad…

Wi-Fi技术——传播与损耗

一、频段和信道 Wi-Fi通过发射无线电进行传输&#xff0c;而无线电的一个重要特性是频率。 频段&#xff1a;一个大的频率范围&#xff0c;如Wi-Fi工作在2.4GHz、5GHz、6GHz&#xff0c;其并不是一个值&#xff0c;而是一个范围信道&#xff1a;在每个频段中划分小的频率范围…

【Mysql-installer-community-8.0.26.0】Mysql 社区版(8.0.26.0) 在Window 系统的默认安装配置

ℹ️大家好&#xff0c;我是练小杰&#xff0c;好久不见了&#xff0c;周末愉快&#xff0c;今天周六了&#xff01;&#xff01;做了CSDN博客才发现&#xff0c;坚持不断发文是那么的困难&#xff0c;大家都是好样的&#xff01;&#xff01;&#x1f606; 本文是针对 Mysql 的…

【RabbitMQ】----初识 RabbitMQ

1. MQ 是什么&#xff1f; 在互联网中&#xff0c;会经常使用 MQ 来作为消息通信服务&#xff0c;我们一起来看一下什么是 MQ 吧&#xff01; 1.1 MQ 本质 【MQ】&#xff08;Message queue&#xff09;&#xff0c;消息队列&#xff0c;字面意思来看&#xff0c;本质是一个…

深度学习:归一化技术

在深度学习中&#xff0c;归一化技术是提高模型训练效率和性能的重要手段。归一化通过调整输入数据的分布&#xff0c;使得模型在训练过程中更易于收敛&#xff0c;减少过拟合的风险。本文将介绍几种常见的归一化技术&#xff0c;包括特征归一化、批归一化、层归一化和实例归一…

【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)

开学前三周先进行企业实训&#xff0c;主要学习Javaweb并实现一些小的项目&#xff0c;本篇笔记主要记录第一周实训的知识总结以及个人遇到的问题及解答&#xff0c;用于日后复习回顾和知识巩固&#xff0c;希望可以帮到同样在学Javaweb的大家 文章目录D1html基础D2块元素与行…

SQL 拓展指南:不同数据库差异对比(MySQL/Oracle/SQL Server 基础区别)

在学习 SQL 的过程中&#xff0c;你可能会发现&#xff1a;同样的 “建表语句” 在 MySQL 能运行&#xff0c;在 Oracle 却报错&#xff1b;“分页查询” 的写法在 SQL Server 和 MySQL 完全不同。这是因为 MySQL、Oracle、SQL Server 是三大主流关系型数据库&#xff0c;虽都支…

论文阅读:DMD | Improved Distribution Matching Distillation for Fast Image Synthesis

论文地址&#xff1a;https://arxiv.org/abs/2405.14867 项目官网&#xff1a;https://tianweiy.github.io/dmd2/ 代码地址&#xff1a;https://github.com/tianweiy/DMD2 发表时间&#xff1a;2024年5月24日 分布匹配蒸馏&#xff08;DMD&#xff09;生成的一步生成器能够与教…

嵌入式 Linux 启动流程详解 (以 ARM + U-Boot 为例)

嵌入式 Linux 启动流程详解 (以 ARM U-Boot 为例) 对于嵌入式开发者而言&#xff0c;深入理解系统的启动流程至关重要。这不仅有助于进行底层驱动开发和系统移植&#xff0c;还能在遇到启动失败等问题时&#xff0c;快速定位和解决。本文将详细分解基于 ARM 架构的嵌入式 Linu…

在前端开发中,html中script 的type分别有哪几种?分别什么情况用到?

以下是 HTML 中<script>标签type属性的常见取值、说明及使用场景&#xff1a;type 值说明使用场景不写&#xff08;空值&#xff09;HTML5 中默认等同于text/javascript&#xff0c;表示普通 JavaScript 脚本绝大多数传统 JavaScript 代码&#xff0c;包括内联脚本和外部…

2025职教技能大赛汽车制造与维修赛道速递-产教融合实战亮剑​

各位职教同仁&#xff0c;2025年世界职业院校技能大赛总决赛争夺赛&#xff08;汽车制造与维修赛道&#xff09;国内赛区的战报新鲜出炉&#xff01;本次大赛以“技炫青春 能创未来”为主题&#xff0c;聚焦汽车产业链高质量发展需求&#xff0c;在真实场景中比拼技能&#xff…

日志 | Spring Boot 日志配置通用规律(AI问答)

Spring Boot 日志配置通用规律。想看特定日志&#xff0c;怎么打开日志开关 文章目录一、一句话总结二、AI问答版提问词AI的响应&#x1f4ca; Spring Boot 日志配置通用规律1. 基本语法结构2. 日志级别&#xff08;从详细到简洁&#xff09;&#x1f3af; 常用日志配置分类1. …

DJANGO后端服务启动报错及解决

1.报错信息[2025-09-05 17:08:54 0800] [23438] [INFO] Worker exiting (pid: 23438) [2025-09-05 17:08:54 0800] [23440] [ERROR] Exception in worker process Traceback (most recent call last):File "/www/SOP/lib64/python3.11/site-packages/gunicorn/arbiter.py&…

Qt 中的 Q_OBJECT 宏详解 —— 从源码到底层机制的全面剖析

Qt 中的 Q_OBJECT 宏详解 —— 从源码到底层机制的全面剖析 文章目录Qt 中的 Q_OBJECT 宏详解 —— 从源码到底层机制的全面剖析摘要一、Q_OBJECT 宏是什么&#xff1f;二、Q_OBJECT 宏背后的源码三、moc 工具的作用四、信号与槽调用流程五、没有 Q_OBJECT 会怎样&#xff1f;六…

GD32自学笔记:5.定时器中断

定时器中断功能主要是两点&#xff1a;1.怎么配置的定时器中断时间间隔&#xff1b;2.中断里长什么样一、定时器中断配置函数直接在bsp_basic_timer.c里找到下面函数&#xff1a;void basic_timer_config(uint16_t pre,uint16_t per) {/* T 1/f, time T * pre,pertime (pre …

[Godot入门大全]目录

1 免责声明 资源分享免责声明&#xff1a; 本平台/本人所分享的各类资源&#xff08;包括但不限于文字、图片、音频、视频、文档等&#xff09;&#xff0c;均来源于公开网络环境中的可分享内容或已获授权的传播素材。 本平台/本人仅出于信息交流、资源共享之目的进行传播&…

使用 StringRedisTemplate 实现 ZSet 滚动查询(处理相同分数场景)

1. 为什么需要改进当 ZSet 中存在相同分数 (score) 的元素时&#xff0c;单纯使用分数作为偏移会导致数据漏查或重复。例如&#xff1a;多条记录具有相同时间戳&#xff08;作为分数&#xff09;分页查询时可能跳过相同分数的元素或重复查询相同分数的元素改进方案&#xff1a;…

【Android】安装2025版AndroidStudio开发工具开发老安卓旧版App

为了开发老旧的安卓App&#xff0c;这里记录一下2025版AndroidStudio的安装过程&#xff0c;如果卸载以后&#xff0c;可以按照此文章的步骤顺利重新安装继续使用。 文章目录安装包Android SDK新建项目新建页面构建项目Gradle下载失败构建失败构建完成编译失败安装失败关于APP在…

Python跳过可迭代对象前部元素完全指南:从基础到高并发系统实战

引言&#xff1a;跳过前部元素的核心价值在数据处理和系统开发中&#xff0c;跳过可迭代对象的前部元素是常见且关键的操作。根据2024年数据处理报告&#xff1a;92%的数据清洗需要跳过文件头部85%的日志分析需要忽略初始记录78%的网络协议处理需跳过头部信息65%的机器学习训练…

ConcurrentHashMap扩容机制

ConcurrentHashMap的扩容为了提高效率&#xff0c;是多线程并发的每个线程控制一部分范围节点的扩容(根据cpu与数组长度确定控制多大范围)有两个核心参数sizeCtl&#xff1a;标记扩容状态 负数时代表正在扩容&#xff0c;存储量参与扩容的线程数&#xff0c;正数代表出发扩容的…