灵动微电子MM32G0001 ADC采集测试

分享作者:user202203134711
作者昵称:user202203134711
评测品牌:灵动微电子
评测型号:FTHR-G0001
发布时间:2025-12-31 09:22:48
1
概要
MM32G0001 ADC采集测试,验证ADC功能
开源口碑分享内容

灵动微电子(MindMotion)生产的 MM32G0001 系列单片机模块,这是一款针对轻量级嵌入式应用市场的低成本 MCU。

测试的核心是 ADC 外设采集能力,即将模拟信号输入 ADC 引脚,并读取数字转换结果。

  • ADC 输入端设备或信号源连接
  • MCU 配置 ADC 寄存器与触发机制
  • 实时读取 ADC 采样结果

代码:

ADC配置程序:

void ADC_Configure(void)

{

   ADC_InitTypeDef  ADC_InitStruct;

   GPIO_InitTypeDef GPIO_InitStruct;


   RCC_APB1PeriphClockCmd(RCC_APB1ENR_ADC1, ENABLE);


   ADC_StructInit(&ADC_InitStruct);

   ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;

   ADC_InitStruct.ADC_PRESCARE   = ADC_PCLK1_PRESCARE_16;

   ADC_InitStruct.ADC_Mode       = ADC_Mode_Scan;

   ADC_InitStruct.ADC_DataAlign  = ADC_DataAlign_Right;

   ADC_Init(ADC1, &ADC_InitStruct);


   ADC_SampleTimeConfig(ADC1, ADC_Samctl_240_5);


   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE);


   /* PA12(RV1) PB0(RV2) PA7(RV3) */

   GPIO_StructInit(&GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_7 | GPIO_Pin_12;

   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AIN;

   GPIO_Init(GPIOA, &GPIO_InitStruct);


   GPIO_StructInit(&GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_0;

   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AIN;

   GPIO_Init(GPIOB, &GPIO_InitStruct);


   ADC_Cmd(ADC1, ENABLE);

}


/***********************************************************************************************************************

 * @brief

 * @note   none

 * @param  none

 * @retval none

 *********************************************************************************************************************/

float ADC_GetChannelVoltage(ADCCHANNEL_TypeDef Channel)

{

   uint16_t Value = 0;

   float Voltage;


   ADC_ANY_NUM_Config(ADC1, 0);

   ADC_ANY_CH_Config(ADC1, 0, Channel);

   ADC_ANY_Cmd(ADC1, ENABLE);


   ADC_SoftwareStartConvCmd(ADC1, ENABLE);


   while (RESET == ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC))

   {

   }


   ADC_ClearFlag(ADC1, ADC_FLAG_EOC);


   Value = ADC_GetConversionValue(ADC1);


   ADC_ANY_Cmd(ADC1, DISABLE);


   Voltage = (float)Value / (float)4096 * (float)3.3;


   return (Voltage);

}


/***********************************************************************************************************************

 * @brief

 * @note   none

 * @param  none

 * @retval none

 *********************************************************************************************************************/

float voltage[2];

void ADC_AnyChannel_SingleConversion_Polling_Sample(void)

{

   printf("\r\nTest %s", __FUNCTION__);


   ADC_Configure();


   while (1)

   {

       printf("\r\nRV1 Voltage = %0.2f  \tRV2 Voltage = %0.2f  \tRV3 Voltage = %0.2f",

              ADC_GetChannelVoltage(ADC_Channel_3),

              ADC_GetChannelVoltage(ADC_Channel_1),

              ADC_GetChannelVoltage(ADC_Channel_7));

voltage[0] = ADC_GetChannelVoltage(ADC_Channel_3);//PA12

voltage[1] = ADC_GetChannelVoltage(ADC_Channel_7);//PA7

       PLATFORM_DelayMS(500);

   }

}

主程序:

int main(void)

{

   PLATFORM_Init();


   ADC_AnyChannel_SingleConversion_Polling_Sample();


   while (1)

   {

   }

}


全部评论
暂无评论
0/144