这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【CW32L012】4、ADC采集

共1条 1/1 1 跳转至

【CW32L012】4、ADC采集

高工
2025-11-18 13:38:47     打赏

CW32L012  16 路模拟信号转换为数字信号。现实世界中的绝大多数信号都是模拟量,如光、电、声、图像信号等,都要  内部集成 2 个 12 位精度、最高 1M SPS 转换速度的逐次逼近型模数转换器(SAR ADC),最多可将 由 ADC 转换成数字信号,才能由 MCU 进行数字化处理。本篇将介绍如何能过饭盒派上的电位器进行ADC采集的验证。

1、饭盒派扩展板上的电位器接入的IO为PB0

2、先找到PB0对应的ADC通道,根据用户手册,其通道为8

image.png

【代码组织】

1、根据用户手,使用ADC的步骤如下:

image.png

2、根据以上步骤,我创建一个bsp_adc.c/h并添加进工程,代码如下:

#include "bsp_adc.h"
#include "cw32l012_sysctrl.h"  
#include "cw32l012_gpio.h"
#include "cw32l012_adc.h"

void ADC_Port_Init(void)
{
  /*        初始始PB0为输入              */
  __SYSCTRL_GPIOB_CLK_ENABLE();                 //使能GPIOB的时钟
  __SYSCTRL_ADC_CLK_ENABLE();                   //使能ADC的时钟
  CW_GPIOB->ANALOG_f.PIN0  =  1;                // 将PB0 设置为模拟输入  也可以使用PB00_ANALOG_ENABLE();

}

void ADC_Config(void)
{
	CW_ADC1->CR_f.EN   = 1;                       // 设置 ADCx_CR.EN 为 1,使能 ADC 模块;
	__NOP();                                      //稍加延迟
	CW_ADC1->CR_f.CONT = 0;                       //选择单次转换
	CW_ADC1->SAMPLE_f.SQRCH0 = ADC_SampTime9Clk;  //  转换时钟
	CW_ADC1->CR_f.CLKSRC =     1;                 //PCLK/2 主频为96/2 为48M
	CW_ADC1->CR_f.ENS         =0;                 //转换数存放的寄存器为0
	CW_ADC1->SQRCFR_f.SQRCH0  =8;                 //第8个通道
	CW_ADC1->ICR              =0;                 //清除中断
}

uint16_t get_adc_value(void)
{
	uint16_t value;
	CW_ADC1->ICR              = 0;                 //清除中断 必须加入这个,要不采集的数据不会更新
	CW_ADC1->START_f.START    = 1;                 //开始转换
	while(CW_ADC1->ISR_f.EOS != 1);                //等待转换结束标志
	value = CW_ADC1->RESULT0_f.RESULT;             //读取结果
	CW_ADC1->START_f.START = 0;                    //停止转换  其实也不用加,因为只转换1次
  return value;
}

3、在app.c中,编写获取ADC的值,并通过printf打印出来:

#include "app.h"
#include "bsp_adc.h"
#include "cw32l012_systick.h"
void Run(void)
{
	
	ADC_Port_Init();
	ADC_Config();
	uint16_t adc_value;
	while(1)
	{
		adc_value = get_adc_value();
		printf("ADC value:%d\r\n",adc_value);
		SysTickDelay(1000);
		
	}
	
}

【实验效果】

下载到开发板后,打开串口终端,就可以看到成功的得到了ADC转换的数据了。

image.png

【注意】

由于ADC的参考电压为VDD,因此需要插入开发板的外接电源。

【附件】源码:

cw32L012adc.zip




关键词: CW32L012     ADC1    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]