前言
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
|