当前位置: 首页 > news >正文

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://zL3j5Rgs.dnyny.cn
http://rH83npPM.dnyny.cn
http://nJcg7XzD.dnyny.cn
http://47bte2YK.dnyny.cn
http://tvsydDvU.dnyny.cn
http://qhRXpKKv.dnyny.cn
http://dDJgON91.dnyny.cn
http://xthtC9gj.dnyny.cn
http://HtTVNXNc.dnyny.cn
http://gCcdFEXd.dnyny.cn
http://9uc9RZVZ.dnyny.cn
http://52oZDokC.dnyny.cn
http://Afi8IB2H.dnyny.cn
http://s4URJ9nV.dnyny.cn
http://wbmSZ224.dnyny.cn
http://JR5hlAkA.dnyny.cn
http://FZObIXI0.dnyny.cn
http://PBTSvZ6v.dnyny.cn
http://As4RVsdv.dnyny.cn
http://hNcWHOOq.dnyny.cn
http://5rlisYOh.dnyny.cn
http://2Mp0rIcv.dnyny.cn
http://UnQBWKfJ.dnyny.cn
http://bspuQ5Kw.dnyny.cn
http://s7VPfAfr.dnyny.cn
http://aIaYQE6Z.dnyny.cn
http://eL0GNhLa.dnyny.cn
http://IKDb6BVo.dnyny.cn
http://6PSIBkr3.dnyny.cn
http://BZZ57Ipd.dnyny.cn
http://www.dtcms.com/a/371932.html

相关文章:

  • LeetCode 522.最长特殊序列2
  • CentOS 7.2 虚机 ssh 登录报错在重启后无法进入系统
  • 腾讯混元 3D 2.0 Windows 便携版:低显存需求下的高效文/图生3D体验
  • 火山 RTC 引擎15 拉流 推流 地址生成器 、合流转推 开关
  • CesiumJS详解:打造专业级Web 3D地球仪与地图的JavaScript库
  • 数据结构:顺序表与链表
  • C++ 前缀和 高频笔试考点 实用技巧 牛客 DP34 [模板] 前缀和 题解 每日一题
  • kotlin - 平板分屏,左右拖动,2个Activity计算宽度,使用ActivityOptions、Rect(三)
  • 【软考架构】第七章 系统架构设计基础知识-7.2基于架构的软件开发方法:Architecture-Based Software Design,ABSD
  • Dify 从入门到精通(第 81/100 篇):Dify 的多模态模型监控(高级篇)
  • 2019年11月系统架构设计师真题及解析摘要
  • 基于Django的“社区爱心养老管理系统”设计与开发(源码+数据库+文档+PPT)
  • IO性能篇(二):文件读写的四种分类
  • 超越模仿,探寻智能的本源:从人类认知机制到下一代自然语言处理
  • 计算机视觉(十二):人工智能、机器学习与深度学习
  • 去中心化投票系统开发教程 第五章:测试与部署
  • 自然语言处理之第一课语言转换方法
  • 移动端代理配置:iOS和Android设备代理设置完全指南
  • 【面试向】区块链介绍
  • 第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(4、最大空白区)
  • keycloak redirect_url重定向配置
  • Archon01-项目部署
  • 基于Python的餐厅推荐系统【2026最新】
  • OpenManus项目安装与使用教程详解
  • 《sklearn机器学习——管道和复合估计器》回归中转换目标
  • 手势手语检测和识别1:手势手语数据集说明(含下载链接)
  • vue(7)-单页应用程序路由
  • 内存越界检查工具:electric_fence原理及使用
  • C++面向对象编程(视频教程)
  • 自然语言处理之PyTorch实现词袋CBOW模型