[APM32E103]

【APM32E103xE测评】AD采集与串口输出

[复制链接]
451|15
手机看帖
扫描二维码
随时随地手机跟帖
sumoon_yao|  楼主 | 2022-5-22 14:28 | 显示全部楼层 |阅读模式
AD, ar, AC, AN
本帖最后由 sumoon_yao 于 2022-5-22 14:30 编辑

    APM32E103xCxE系列MCU的性能还是相当不错的,先来看看主要性能指标。
-   32位Arm®Cortex®-M3内核,最高120MHz工作频率
-   Flash:容量最高为512KB
-   SRAM:容量最高为128KB
-   支持睡眠、停机、待机三种低功耗模式
-   最多有112个I/O ,所有I/O都可以映射到外部中断向量,最多有87个容忍5V输入的I/O
-   丰富的通信外设:2个I2C,3个USART,2个UART,3个SPI,2个CAN,1个USBD,1个SDIO
-   模拟接口:3个12位ADC,2个12为DAC
-   2个7 通道PWM输出,4个16位通用定时器,2个16位基本定时器,2个看门狗定时器,1个24为自减型系统定时器
本次测评主要想测试下APM32E103 MCU的AD采集,并通过串口输出实时采集的AD值。
  从官网下载开发板相关资料,先安装固件包,安装完成后应该是这样的:

固件包.png

   官方提供的例程还是很丰富的,打开串口输出例程,然后在此基础上,增加AD采集功能。数据手册中PC4是AD输入通道之一,且该IO也在开发板上引出,就以该引脚作为AD输入口,修改后的程序如下:

/*!
* @file       main.c
*
* @brief      Main program body
*
* @version    V1.0.0
*
* @date       2021-07-26
*
*/
#include "main.h"
#include "apm32e10x_adc.h"
volatile uint32_t tick = 0;
uint8_t txBuf[] = "HelloUSART1    \r\n";
void Delay(void);
voidGPIO_Configuration(void);
/*!
* @brief      Main program   
*
* @param      None
*
* @retval     None
*
*/
int main(void)
{
    uint8_t i;
    uint16_t ad_value;
   
    GPIO_Config_T GPIO_ConfigStruct;
    USART_Config_T USART_ConfigStruct;
    ADC_Config_T ADC_configStruct;
   
    /* GPIO configuration------------------------------------------------------*/
    GPIO_Configuration();
      APM_MINI_LEDInit(LED2);
    APM_MINI_LEDOff(LED2);
   
   RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);
   RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA |RCM_APB2_PERIPH_USART1));
   
    GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
    GPIO_ConfigStruct.pin = GPIO_PIN_9;
    GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOA, &GPIO_ConfigStruct);
   
    USART_ConfigStruct.baudRate = 115200;
    USART_ConfigStruct.hardwareFlow =USART_HARDWARE_FLOW_NONE;
    USART_ConfigStruct.mode = USART_MODE_TX;
    USART_ConfigStruct.parity =USART_PARITY_NONE;
    USART_ConfigStruct.stopBits =USART_STOP_BIT_1;
    USART_ConfigStruct.wordLength =USART_WORD_LEN_8B;
    USART_Config(USART1,&USART_ConfigStruct);
   
    USART_Enable(USART1);
   
    SysTick_Config(SystemCoreClock / 1000);
    /* ADC1 Configuration------------------------------------------------------*/
    ADC_configStruct.mode =ADC_MODE_INDEPENDENT;
    ADC_configStruct.scanConvMode = DISABLE;
    ADC_configStruct.continuosConvMode =ENABLE;
    ADC_configStruct.externalTrigConv =ADC_EXT_TRIG_CONV_None;
    ADC_configStruct.dataAlign =ADC_DATA_ALIGN_RIGHT;
    ADC_configStruct.nbrOfChannel = 14;
    ADC_Config(ADC1, &ADC_configStruct);
    /* ADC1 regular channel14 configuration */
    ADC_ConfigRegularChannel(ADC1,ADC_CHANNEL_14, 1, ADC_SAMPLE_TIME_13_5);
    /* Enable ADC1 */
    ADC_Enable(ADC1);
    /* Enable ADC1 reset calibration register*/   
    ADC_ResetCalibration(ADC1);
    /* Check the end of ADC1 reset calibrationregister */
   while(ADC_ReadResetCalibrationStatus(ADC1));
    /* Start ADC1 calibration */
    ADC_StartCalibration(ADC1);
    /* Check the end of ADC1 calibration */
    while(ADC_ReadCalibrationStartFlag(ADC1));
    /* Start ADC1 Software Conversion */
    ADC_EnableSoftwareStartConv(ADC1);
    while(1)
    {
        Delay();
        ad_value =ADC_ReadConversionValue(ADC1);
            sprintf(txBuf,"ADC Value = %d \r\n",ad_value);
             for(i = 0; i < sizeof(txBuf); i++)
        {
          while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);
          USART_TxData(USART1, txBuf);
        }
        
        APM_MINI_LEDToggle(LED2);
    }
}
/*!
* @brief      Configures the differentsystem clocks  
*
* @param      None
*
* @retval     None
*
* @note
*/
void GPIO_Configuration(void)
{
    GPIO_Config_T configStruct;
   
    configStruct.pin = GPIO_PIN_4;
    configStruct.mode = GPIO_MODE_ANALOG;
    GPIO_Config(GPIOC, &configStruct);
}
/*!
* @brief      Delay
*
* @param      None
*
* @retval     None
*
*/
void Delay(void)
{
    tick = 0;
   
    while(tick < 1000);
}

    编译,无报错,下一步就是将编译好的程序下载到开发板上,由于该系列芯片和ST的兼容,直接使用手头的ST-LINK/V2下载。点击“Download”后居然报错:

错误提示.png

记得以前调试其它开发板的时候也遇到过类似问题,可以通过修改下面的参数,再下载就不会报错了。

修改错误提示.png

打开串口终端,准备测试3个点,满量程,1/2量程,零点,看看采集到的AD值是否稳定。


先来看看满量程,直接用杜邦线把PC4引脚和VDD引脚短接,测得数值如下:

满量程输入.png

   再把PC4引脚和GNDD引脚短接,测得数值如下:

零点输入.png

   最后用2个10k电阻对VDD进行分压,再接入PC4引脚,如下图所示:

分压接线图.jpg

   测得AD值如下:

半压输入.png

   以上所有测得的AD数值均为单次采样值,未作任何处理,从测得的数值来看,APM32E103 MCU的AD采集还是相当不错的, 虽然只有12位精度,但应该可以满足大多数需要AD采集的应用。




使用特权

评论回复
WoodData| | 2022-5-23 14:27 | 显示全部楼层
可以可以,学习下

使用特权

评论回复
流水源| | 2022-5-23 21:13 | 显示全部楼层
看看

使用特权

评论回复
落花又见流水| | 2022-5-23 21:14 | 显示全部楼层
学习一下

使用特权

评论回复
WoodWang| | 2022-5-23 21:15 | 显示全部楼层
搞个电位器测下adc试试

使用特权

评论回复
belindagraham| | 2022-6-2 09:44 | 显示全部楼层
APM32E103怎么样?

使用特权

评论回复
touser| | 2022-6-2 09:53 | 显示全部楼层
AD采集使用dma了吗?

使用特权

评论回复
sumoon_yao|  楼主 | 2022-6-2 09:58 | 显示全部楼层
touser 发表于 2022-6-2 09:53
AD采集使用dma了吗?

没有使用DMA

使用特权

评论回复
dspmana| | 2022-6-2 10:47 | 显示全部楼层
AD采集可行  

使用特权

评论回复
mollylawrence| | 2022-6-2 11:44 | 显示全部楼层
AD是16个吗

使用特权

评论回复
selongli| | 2022-6-2 14:48 | 显示全部楼层
最大支持几个串口呢?

使用特权

评论回复
sumoon_yao|  楼主 | 2022-6-3 12:05 | 显示全部楼层

3个12位AD,21个通道

使用特权

评论回复
sumoon_yao|  楼主 | 2022-6-3 12:06 | 显示全部楼层
selongli 发表于 2022-6-2 14:48
最大支持几个串口呢?

5个串口:2个UART 3个USART

使用特权

评论回复
chenjun89| | 2022-6-6 18:51 | 显示全部楼层
单次测量值看来还是比较稳定

使用特权

评论回复
chenqianqian| | 2022-6-7 08:16 | 显示全部楼层
看来AD性能还是不错

使用特权

评论回复
E=MC2U| | 2022-7-6 13:57 | 显示全部楼层
这只能叫12位解析度,不叫12位精度,从贴图来看,10个LSB在跳,就是低于9位的有效精度。

使用特权

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

本版积分规则