在官方的例程中,提供了供用户学习和测试的A/D数据采集程序,它主要是通过串口来输出信息内容。

其主程序的内容为:

<pre>int main(void)
  • {
  •         //inital ADC pin
  •         PA0_INIT (PA0_ADC0);       
  •         PA1_INIT (PA1_ADC1);
  •         PA2_INIT (PA2_ADC2);       
  •         PA3_INIT (PA3_ADC3);
  •         PA4_INIT (PA4_ADC4);       
  •         PA5_INIT (PA5_ADC5);
  •         PA6_INIT (PA6_ADC6);               
  •         PA7_INIT (PA7_ADC7);       
  •         //initial ADC
  •         ADC_Init(200000,INTERNALADCVREFGND);
  •         ADC_SetTrigger(ADC_START_BY_SOFTWAER,0);
  •         ADC_SetupChannels(AD0|AD1|AD2|AD3|AD4|AD5|AD6|AD7,TRIGGERMODE);
  •         //init UART pin
  •         PA9_INIT(PA9_UART0_TX);
  •         PA10_INIT(PA10_UART0_RX);
  •         //initial UART
  •         UART_Open(UART0,115200,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);       
  •         UART_Send(UART0,"ADC Data\n",12);
  •         while (1)
  •         {
  •                 ADC_IssueSoftTrigger;
  •                 while(ADC->DR7_b .DONE ==0);
  •                 UART_PutHex (UART0, ADC->DR1_b.RESULT);
  •                 UART_PutHex (UART0, ADC->DR2_b.RESULT);
  •                 UART_PutHex (UART0, ADC->DR3_b.RESULT);
  •                 UART_PutHex (UART0, ADC->DR4_b.RESULT);
  •                 UART_PutHex (UART0, ADC->DR5_b.RESULT);
  •                 UART_PutHex (UART0, ADC->DR6_b.RESULT);
  •                 UART_PutHex (UART0, ADC->DR7_b.RESULT);
  •                 UART_PutString (UART0, "    ");
  •        }       
  • }</pre>
  • 复制代码

    由此可以看出,它是使用UART0来输出信息,采用的波特率为115200bps,无奇偶校验位。

    要使用UART0进行串口通讯,需使用PA9来连接外挂的USB转串口模块的RXD引脚。

    经程序的编译和下载,其运行结果如图1所示。

    image.png

    图1 测试结果


    通过对输出数据的分析可知,每次会输出7项数据,每个数据占4个字节。

    所输出的7项数据,依次对应AD1~AD7。

    若只对AD1进行采集和输出,则其输出结果如图2所示。

    image.png

    图2 单项数据采集


    在PA1分别接如VDD和GND的情况下,其检测结果见图3和图4所示,说明其检测值可达到满量程。

    image.png

    图3 检测VDD输出值


    image.png

    图4 检测GND输出值


    为便于更直观地显示检测结果,可配合前面介绍的OLED屏来显示检测结果,其主程序为:

    <pre>int main(void)
  • {
  •         //inital ADC pin
  •         PA0_INIT (PA0_ADC0);       
  •         PA1_INIT (PA1_ADC1);
  •         PA2_INIT (PA2_ADC2);       
  •         PA3_INIT (PA3_ADC3);
  •         PA4_INIT (PA4_ADC4);       
  •         PA5_INIT (PA5_ADC5);
  •         PA6_INIT (PA6_ADC6);               
  •         PA7_INIT (PA7_ADC7);
  •         ADC_Init(200000,INTERNALADCVREFGND);
  •         ADC_SetTrigger(ADC_START_BY_SOFTWAER,0);
  •         ADC_SetupChannels(AD0|AD1|AD2|AD3|AD4|AD5|AD6|AD7,TRIGGERMODE);
  •        
  •         PC1_INIT(PC1_GPIO);
  •         PC2_INIT(PC2_GPIO);       
  •         PC->DIR_b.DIR1  = 0x1;       
  •        PC->DIR_b.DIR2  = 0x1;       
  •         OLED_Init();
  •         OLED_Clear();
  •         OLED_ShowString(0,0,"ME32G030 ",16);
  •         OLED_ShowString(0,2,"OLED & ADC TEST",16);
  •         OLED_ShowString(0,4,"AD1=",16);
  •         while (1)
  •         {
  •                 ADC_IssueSoftTrigger;
  •                 while(ADC->DR7_b .DONE ==0);
  •                 OLED_ShowNum(40,4,ADC->DR1_b.RESULT,4,16);
  •                 SYS_Delay(0x4FFFF);
  •         }               
  • }</pre>
  • 复制代码

    经程序的编译和下载,其测试效果如图5所示,若添加NTC温度感应器件,则可进行温度的测控处理。

    image.png

    图5 显示效果