打印
[MM32软件]

EVBoard 之 MM32F3270系列 - ADC通道采集和内部温度传感器

[复制链接]
212|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2025-4-11 08:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
MB039 EVBoard 为灵动 MM32 新一代通用高性能 F 系列 MM32F3270 硬件评估测试板。本文主要讲解 MB039 板载ADC通道采集以及内部温度传感器采集。

硬件
MB039 拥有三个电位调节器,具体接口图如下:
其中,RV1、RV2、RV3 电路图如下:



A1、A2、A3 信号与 MM32F3270 引脚对应关系如下:







经查阅数据手册,ADC通道与引脚、电位器对应关系如下所示:






准备就绪后,开始编写程序

软件
配置流程:

开启ADC时钟、GPIOA时钟、DMA1时钟
ADC结构体初始化:
数值转换分辨率
12 bit
11 bit
10 bit
9 bit
8 bit
预分频系数:/16
循环模式:
单次扫描
单周期扫描
连续扫描
数据对齐:
右对齐
左对齐
触发条件:
定时器1通道1捕获比较事件(default)
DMA 通道配置



配置通道:
DMA_CH1
DMA搬运 - 源配置:
ADC1_DR 寄存器
地址不递增
16bit
DMA搬运 - 目标配置:
ADC1Value[4] 数组
地址递增
16bit
DMA搬运循环:

ADC任意通道配置:
任意通道数量配置:
0~3通道
依次配置 ADC1_CH5 \ ADC1_CH4 \ ADC_CH1 以及内部温度传感器通道(ADC_CH14) 顺序
使能任意配置模式
任意通道模式 覆盖 MM32F0010 及之后的新产品

内部温度传感器使能、使能 EOC 中断、DMA功能
使能 DMA通道1
使能 ADC
代码如下:


void initADC()
{
    ADC_InitTypeDef     ADC_InitStructure;
    GPIO_InitTypeDef    GPIO_InitStructure;
    DMA_InitTypeDef     DMA_InitStructure;

    COMMON_EnableIpClock(emCLOCK_ADC1);
    COMMON_EnableIpClock(emCLOCK_DMA1);
    COMMON_EnableIpClock(emCLOCK_GPIOA);

    ADC_StructInit(&ADC_InitStructure);
    ADC_InitStructure.ADC_Resolution        = ADC_Resolution_12b;
    ADC_InitStructure.ADC_PRESCARE          = ADC_PCLK2_PRESCARE_16;
    ADC_InitStructure.ADC_Mode              = ADC_Mode_Continue;
    ADC_InitStructure.ADC_DataAlign         = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_ExternalTrigConv  = ADC1_ExternalTrigConv_T1_CC1;
    ADC_Init(ADC1, &ADC_InitStructure);

    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    DMA_DeInit(DMA1_ch1);
    DMA_InitStructure.PeripheralBaseAddr    = (u32)&(ADC1->DR);
    DMA_InitStructure.MemoryBaseAddr        = (u32)&ADC1Value[0];
    DMA_InitStructure.DIR                   = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.BufferSize            = 4;
    DMA_InitStructure.PeripheralInc         = DMA_PeripheralInc_Disable;
    DMA_InitStructure.MemoryInc             = DMA_MemoryInc_Enable;
    DMA_InitStructure.PeripheralDataSize    = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.MemoryDataSize        = DMA_MemoryDataSize_Word;
    DMA_InitStructure.Mode                  = DMA_Mode_Circular;
    DMA_InitStructure.Priority              = DMA_Priority_High;
    DMA_InitStructure.M2M                   = DMA_M2M_Disable;
    DMA_Init(DMA1_ch1, &DMA_InitStructure);  

    ADC_ANY_Cmd(ADC1, DISABLE);
    ADC_ANY_NUM_Config(ADC1, 3);
    ADC_ANY_CH_Config(ADC1, 0, ADC_Channel_5);
    ADC_ANY_CH_Config(ADC1, 1, ADC_Channel_4);
    ADC_ANY_CH_Config(ADC1, 2, ADC_Channel_1);
    ADC_ANY_CH_Config(ADC1, 3, ADC_Channel_TempSensor);
    ADC_ANY_Cmd(ADC1, ENABLE);

    ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
    ADC_TempSensorVrefintCmd(ENABLE);
    ADC_DMACmd(ADC1, ENABLE);
    DMA_Cmd(DMA1_ch1, ENABLE);
        ADC_Cmd(ADC1, ENABLE);

        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}



ADC转化结果如下:、



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/chendu103/article/details/112989270

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2201

主题

16568

帖子

17

粉丝