GD32的ADC有很多模式,这里教大家使用最简单的软件触发读取ADC,我使用的芯片是 GD32F350K8U6

使用步骤
1.初始化IO引脚设置为模拟输入模式
2.初始ADC时钟和配置ADC
3.软件触发读取ADC值
4.将ADC值转换成电压值

我这里采用PA5进行ADC的channel_5通道

1.初始IO引脚

/*初始化时钟*/
rcu_periph_clock_enable(RCU_GPIOA);
/* 配置读取ADC引脚 */
gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ADC_GPIO_PIN);

2.配置ADC相关

void ADC_Init(void)
{/* 使能ADC时钟 */rcu_periph_clock_enable(RCU_ADC);/* 配置ADC时钟来源 这里使用APB2时钟的六分频*/rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6);   /* 数据对齐方式 右对齐*/adc_data_alignment_config(ADC_DATAALIGN_RIGHT);/* 配置使用ADC规则通道,使用1个 */adc_channel_length_config( ADC_REGULAR_CHANNEL, 1U);/* 配置ADC触发方式:这里使用软件触发 */adc_external_trigger_source_config( ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE); /*使能ADC软件触发 */adc_software_trigger_enable(ADC_REGULAR_CHANNEL);/* ADC分辨率 12B */adc_resolution_config(ADC_RESOLUTION_12B);/* ADC外部触发配置 */adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);/* 使能ADC */adc_enable();/* 这个延时是为了让ADC稳定*/delay_1ms(1U);/* 进行ADC自校准 */adc_calibration_enable();}

3.设置软件触发

//channel参数为ADC通道:ADC_CHANNEL_x  x = 0...15
uint16_t ADC_Get_Channel(uint8_t channel)
{/* 配置DAC通道和转换时间 */adc_regular_channel_config(0U, channel, ADC_SAMPLETIME_239POINT5);/* 等待ADC转换完成 */while(!adc_flag_get(ADC_FLAG_EOC));/* 清除转换完成标志位 */adc_flag_clear(ADC_FLAG_EOC);/* 返回ADC的值 */return (adc_regular_data_read() & 0xfff);
}

除了单次获取之外,还可以采用多次读取然后取平均值

//channel参数为ADC通道:ADC_CHANNEL_x  x = 0...15
uint16_t adc_Channel_Sample_Average(uint8_t channel)
{uint32_t adc_raw = 0;uint8_t degree = 3;  //读的次数的幂 2^3for(int i = 0;i < (1 << degree);i++){//读取ADC次数adc_raw += ADC_Get_Channel(channel);delay_1ms(2);}//这里循环8次读取,因此 >>3位就是除以8adc_raw >>= degree;return adc_raw;}

4.将ADC值转换成电压值

芯片使用的是3.3V供电,根据上面的配置ADC,精度为12位可以得到

电压值 = ADC数值 * 3.3 / 4096

Vin = adc_value * 3.3 /4096

void main(void)
{ADC_Init();float Vin = 0,tmp_adc_value;uint16_t adc_value = 0;while(1){//读取ADC数值并取平均值adc_value = adc_Channel_Sample_Average(ADC_CHANNEL_5);//将值转换成float计算tmp_adc_value = (float)adc_value;//根据公式进行转换Vin = tmp_adc_value * 3.3f / 4096.0f;//打印printf("voltage :%.3f",Vin);}}

**

【GD32】GD32读取ADC数据相关推荐

  1. 复旦微ZYNQ procise axi读取adc数据

    1,使用vivado2018.3搭建block design 2,点击菜单栏 File -> Export -> Export Hardware,勾选 Include bitstream, ...

  2. STM32学习:通过DMA读取ADC规则通道多通道转换数据

    1.STM32的DMA简介 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作. ...

  3. Arduino RP2040 读取ADC采样数据

    Arduino RP2040 读取ADC采样数据

  4. 用GPIO模拟SPI接口读取传感器数据

    本文基于平头哥开发板RVB2601,简要介绍了用GPIO模拟SPI时序逻辑,实现SPI协议,按照特定温度传感器的时序,读取其数据,及示例程序 一.概述 SPI(Serial Peripheral In ...

  5. 使用Matlab提取ADC数据占空比变化的波形

    提取变化占空比的规则如下: 1. 如果占空比发生 >=5% 的变化,则认为占空比发生变化: 2. 正常的1个周期100个,其中连续 <0.1V 变化的点约为40个左右: 3. 那么,40* ...

  6. RA4M2开发(3)----读取ISL29035数据,并在OLED上显示,串口打印

    概述 首先导入必要的库文件,包括I2C驱动和OLED驱动. 在代码中配置I2C接口,并初始化I2C驱动. 配置ISL29035传感器,包括配置传感器的工作模式和量程. 使用I2C读取ISL29035传 ...

  7. STM32H7并行读取AD7606数据以及片内AD值不准解决办法

    一.硬件 先了解一下AD7606,16位,单电源,200k采样率,8路,除了贵没有其他缺点,数据相当的稳,一个5V供电,不用运放的情况下采集电压精度可以达到1mv,非常Nice 与单片机相连 单片机 ...

  8. TensorFlow csv读取文件数据(代码实现)

    TensorFlow csv读取文件数据(代码实现) 大多数人了解 Pandas 及其在处理大数据文件方面的实用性.TensorFlow 提供了读取这种文件的方法. 前面章节中,介绍了如何在 Tens ...

  9. SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题...

    转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...

最新文章

  1. 酸爽! Intellij IDEA 神器居然还藏着这些实用小技巧 !
  2. iOS证书申请详细流程
  3. .NET服务器应用程序开发
  4. mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项
  5. Jakarta EE工作组正式成立
  6. 镜像数据库上SQL Server复制
  7. linux设备模型之tty驱动架构分析,linux设备模型之uart驱动架构分析
  8. 【python】【multiprocessing】【Pool、pool.Pool、pool.ThreadPool】apply 和apply_async多进程有关时间的比较分析
  9. php和jsp有什么区别,php和jsp之间的区别是什么
  10. 火狐firefox浏览器不能播放视频,但别的浏览器可以。
  11. Spark Streaming项目实战
  12. 《CSAPP》(第3版)答案(第十一章)
  13. php中alight是什么意思,进阶PHP需要注意的一些点
  14. 计算机知识竞赛赛制,知识竞赛活动规则
  15. Flexigrid在FleaPHP下的使用方法介绍
  16. c语言%hx输出大写,C语言输出函数printf
  17. C语言:动态内存分配
  18. 最近老是卖了就涨 买了就跌呢
  19. Java-SpringBoot-使用SNMP对交换机/服务器进行简单的数据采集
  20. java判断不相等_java判断字符串是否不相等的方法

热门文章

  1. H5互动游戏推广引流是做什么的?详解游戏引流推广方式
  2. 如何学习一门新的编程语言
  3. void *指针是什么含义
  4. 什么是长尾词,长尾关键词的SEO秘密有哪些?
  5. 中国作家维权联盟向苹果和百度发出律师函
  6. 腾讯的核心竞争力是什么!
  7. 牛逼了啊!用 JS 实现了识别网页验证码的功能!
  8. cad画正弦曲线lisp_AutoCAD怎么画正弦线?
  9. 5-27 冒泡法排序 (20分)
  10. matlab和通达信,matlab量化通达信