ADC测试仅仅是按照例程来做修改的,做了简单的测试,按照例程的来,首先我们看看原理图。
可调电阻的是做了分离设计的,并没有连接到ADC的引脚,所以需要用跳线连接到引脚上
我们的硬件端的是连接到ADC0的,
然后看看我们的代码
#include "DRV_ADC.h"
#include "DRV_UART.h"
void ADC_SingleSample_Config(void)
{
ADC_InitTypeDef stInit;
/* 复位ADC0,并开启该外设的时钟 */
ADC_DeInit(ADC0);
/* 校准ADC0 */
ADC_StartCalibration(ADC0);
/* 初始化ADC */
ADC_StructInit(&stInit);
stInit.virtualChannelMask = ADC_VIRTUAL_CHANNEL0;
stInit.workMode = ADC_WORK_MODE_SINGLE;
stInit.trigMode = ADC_TRIGGER_MODE_CONTINUOUS;
stInit.trigger = ADC0_TRIGGER_SRPWM_ROW0_COL0;
ADC_Init(ADC0, &stInit);
/* 将模拟通道0映射到虚拟通道0 */
ADC_ACRemapSingle(ADC0, ADC_VIRTUAL_CHANNEL0, ADC_ANALOG_CHANNEL0);
/* 使能ADC */
ADC_CoreEnable(ADC0);
/* 使能虚拟通道 */
ADC_VCEnable(ADC0, ADC_VIRTUAL_CHANNEL0);
}
void SRPWM_Config(void)
{
SRPWM_TBInitTypeDef stTBInit;
/* 复位SRPWM0,并开启SRPWM0的时钟 */
CRG_PeriphReset(CRG_SRST_SRPWM0);
/* 初始化 */
SRPWM_TBStructInit(&stTBInit);
stTBInit.period = 0xFFFF;
stTBInit.countMode = SRPWM_COUNTMODE_UP;
SRPWM_TBInit(SRPWM0, &stTBInit);
/* 使能SRPWM0的ADC同步信号0事件输出:周期事件 */
SRPWM_OEPAdcSyncEnable(SRPWM0, SRPWM_OUTEVT_SYNC_PRD_EVT, SRPWM_SYNC0);
/* 选择给ADC的触发信号 */
SRPWMCOM_SelectADCTrigger(SRPWMCOM_ADCTriggerRow0, SRPWMCOM_ADCTriggerCol0, SRPWMCOM_ADC_SRPWM0_TRIGGER0);
/* 使能高精度旁路 */
SRPWM_HRPWMBypassEnable(SRPWM0);
/* 使能PWM模块 */
SRPWMCOM_Enable(SRPWM_CHANNEL_0);
}
void Test_ADC_Init(void)
{
ADC_SingleSample_Config();
SRPWM_Config();
}
void ADC_Test(void)
{
unsigned int ret=0;
/* 等待采样完成 */
while (ADC_GetVCResultStatus(ADC0, ADC_VIRTUAL_CHANNEL0) != SET);
/* 获取采样数据 */
ret = ADC_S16D2toUint(ADC_GetVCResult(ADC0, ADC_VIRTUAL_CHANNEL0));
/* 打印采样结果 */
printf("adc sample code: %d \r\n", ret);
}
主函数的代码就只是调用,这里就不写了
我们来看看结果吧
串口端在不停的刷新采样的数值,
转动电阻,可以看到采样数值的变化。
好了,今天就到这里了。