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

前言

MB039 EVBoard 为灵动 MM32 新一代通用高性能 F 系列 MM32F3270 硬件评估测试板。本文主要讲解 MB039 板载ADC通道采集以及内部温度传感器采集。

硬件

MB039 拥有三个电位调节器,具体接口图如下:在这里插入图片描述
其中,RV1、RV2、RV3 电路图如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
A1、A2、A3 信号与 MM32F3270 引脚对应关系如下:
在这里插入图片描述
经查阅数据手册,ADC通道与引脚、电位器对应关系如下所示:

引脚ADC通道原理图
PA1ADC1_CH1RV3
PA4ADC1_CH4RV2
PA5ADC1_CH5RV1

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

软件

配置流程:

  • 开启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转化结果如下:
在这里插入图片描述
(数据处理,未完待续)

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值