[MM32软件]【灵动微电子MM32F5330测评】+05 ADC调试调试

一:实验目的
利用ADC模块测量输入电压的,并通过串口输出测试结果
二:ADC介绍:
Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。
ADC 是 12 位的逐次逼近型( SAR)模拟数字转换器,可以将模拟信号转换成数字信号。
        ADC 有可测量内部或外部信号源,其中 ADC1 有 19 路外部输入通道, ADC2 有 17 路外部输入通道
        和 2 路内部通道。这些 ADC 的通道可以单次、单周期和连续进行转换。根据不同的方式又可以选择普通通道转换、任意通道转换。
ADC 的最大输入时钟为 48MHz,它是由 PLL2 和 APB2 时钟(PCLK2)分频产生。
功能框图:

可以看到MM32F系列一共有19路ADC输入,但是T_SENSOR(温度传感器)通道在 ADC2 的 AIN17 通道, V_SENSOR(内部参考电压)通道在ADC2 的 AIN18 通道。
软件配置流程:
l 开启PA口时钟和ADC1时钟,设置PA8为模拟输入。
l 复位ADC1,同时设置ADC1分频因子。
l 初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。
l 使能ADC并校准。
l 配置规则通道参数:
l 开启软件转换:
l 等待转换完成,读取ADC值。
软件主要代码:
void ADC_Configure(void)
{
    ADC_InitTypeDef  ADC_InitStruct;
    GPIO_InitTypeDef GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    ADC_CalibrationConfig(ADC1, 0x1FE);
    ADC_StructInit(&ADC_InitStruct);
    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStruct.ADC_Prescaler  = ADC_Prescaler_16;
    ADC_InitStruct.ADC_Mode       = ADC_Mode_Scan;
    ADC_InitStruct.ADC_DataAlign  = ADC_DataAlign_Right;
    ADC_Init(ADC1, &ADC_InitStruct);
    ADC_SampleTimeConfig(ADC1, ADC_Channel_1, ADC_SampleTime_240_5);
    ADC_SampleTimeConfig(ADC1, ADC_Channel_4, ADC_SampleTime_240_5);
    ADC_SampleTimeConfig(ADC1, ADC_Channel_5, ADC_SampleTime_240_5);
    ADC_InjectedChannelNumCfg(ADC1, 2);
    ADC_InjectedChannelSelect(ADC1, ADC_InjectedChannel_0, ADC_Channel_1);
    ADC_InjectedChannelSelect(ADC1, ADC_InjectedChannel_1, ADC_Channel_4);
    ADC_InjectedChannelSelect(ADC1, ADC_InjectedChannel_2, ADC_Channel_5);
    ADC_InjectedConvCmd(ADC1, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    /* PA1(RV1) PA4(RV2) PA5(RV3) */
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    ADC_Cmd(ADC1, ENABLE);
}
主程序:
        ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE);
        while (RESET == ADC_GetFlagStatus(ADC1, ADC_FLAG_INJEOS))
        {
        }
        ADC_ClearFlag(ADC1, ADC_FLAG_INJEOS);
        RVxVoltage[0] = (float)ADC_GetInjectedChannelConvertedValue(ADC1, ADC_InjectedChannel_0) * (float)3.3 / (float)4096.0;
        RVxVoltage[1] = (float)ADC_GetInjectedChannelConvertedValue(ADC1, ADC_InjectedChannel_1) * (float)3.3 / (float)4096.0;
        RVxVoltage[2] = (float)ADC_GetInjectedChannelConvertedValue(ADC1, ADC_InjectedChannel_2) * (float)3.3 / (float)4096.0;
        printf("\r\nRV1 Voltage = %0.2f  \tRV2 Voltage = %0.2f  \tRV3 Voltage = %0.2f", RVxVoltage[0], RVxVoltage[1], RVxVoltage[2]);
        PLATFORM_DelayMS(500);
试验结果截图:

---------------------
作者:聪聪哥哥
链接:https://bbs.21ic.com/icview-3389916-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值