OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2714|回复: 2

STM32F103板子AD12通道采样引脚悬空之后12个引脚采样各不相同且很稳定eu

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-11-13
在线时间
1 小时
发表于 2017-11-16 11:33:30 | 显示全部楼层 |阅读模式
1金钱
程序是论坛里现成的程序修改的,用的是F103min板,结了一个引脚PC0也就是value(6),value(6)的电压变化显示是二点几伏到三点几伏,应该是对的,但是其他引脚悬空接了以后数值如图,很稳定不会变化,求大神指点为什么?还有一个问题,这个程序是12路AD采样的,如果想改成16路采样的话,除了引脚多写几个,数组变一下,DMA通道变一下以外,还有什么要注意的吗?时钟周期啥的还要改吗?采样时钟周期这部分不太懂

捕获.PNG


/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"          
#include "stm32f10x_adc.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"         
#include "misc.h"               
#include  <stdarg.h>

#define N 50 //&#195;&#191;í¨μà2é50′&#206;
#define M 12 //&#206;a12&#184;&#246;í¨μà

vu16 AD_Value[N][M]; //ó&#195;à′′&#230;·&#197;ADC×a&#187;&#187;&#189;á1&#251;£&#172;ò2ê&#199;DMAμ&#196;&#196;&#191;±êμ&#216;&#214;·
vu16 After_filter[M]; //ó&#195;à′′&#230;·&#197;&#199;ó&#198;&#189;&#190;ù&#214;μ&#214;&#174;oóμ&#196;&#189;á1&#251;
int i;
unsigned char Clock1s;
vu32 TimingDelay=0;

void Usart2_Init(void);
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...);

void Delay(__IO uint32_t nTime);
void TimingDelay_Decrement(void);
void GPIO_Configuration(void);
void RCC_Configuration(void);
void ADC1_Configuration(void);
void DMA_Configuration(void);
void Init_All_Periph(void);
u16 GetVolt(u16 advalue);
void filter(void);

void Delay(__IO uint32_t nTime)
{
  TimingDelay = nTime;

  while(TimingDelay != 0);
}


void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}

void GPIO_Configuration(void)
{
                GPIO_InitTypeDef GPIO_InitStructure;

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //òò&#206;aUSART11ü&#189;&#197;ê&#199;ò&#212;&#184;′ó&#195;μ&#196;D&#206;ê&#189;&#189;óμ&#189;GPIO&#191;úé&#207;μ&#196;£&#172;&#203;ùò&#212;ê1ó&#195;&#184;′ó&#195;í&#198;íìê&#189;ê&#228;3&#246;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);


                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                GPIO_Init(GPIOA, &GPIO_InitStructure);



                //PA0/1/2/3 ×÷&#206;a&#196;£&#196;aí¨μàê&#228;è&#235;òy&#189;&#197;
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //&#196;£&#196;aê&#228;è&#235;òy&#189;&#197;
                GPIO_Init(GPIOA, &GPIO_InitStructure);

                //PB0/1 ×÷&#206;a&#196;£&#196;aí¨μàê&#228;è&#235;òy&#189;&#197;
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //&#196;£&#196;aê&#228;è&#235;òy&#189;&#197;
                GPIO_Init(GPIOB, &GPIO_InitStructure);

                //PC0/1/2/3/4/5 ×÷&#206;a&#196;£&#196;aí¨μàê&#228;è&#235;òy&#189;&#197;
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //&#196;£&#196;aê&#228;è&#235;òy&#189;&#197;
                GPIO_Init(GPIOC, &GPIO_InitStructure);
        }

void RCC_Configuration(void)
{
                        ErrorStatus HSEStartUpStatus;

                        RCC_DeInit(); //RCC &#207;μí3&#184;′&#206;&#187;
                        RCC_HSEConfig(RCC_HSE_ON); //&#191;a&#198;&#244;HSE
                        HSEStartUpStatus = RCC_WaitForHSEStartUp(); //μè′yHSE×&#188;±&#184;o&#195;
                if(HSEStartUpStatus == SUCCESS)
                {
        //                FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
        //                FLASH_SetLatency(FLASH_Latency_2); //Set 2 Latency cycles
                        RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB clock = SYSCLK
                        RCC_PCLK2Config(RCC_HCLK_Div1); //APB2 clock = HCLK
                        RCC_PCLK1Config(RCC_HCLK_Div2); //APB1 clock = HCLK/2
                        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); //PLLCLK = 12MHz * 6 = 72 MHz
                        RCC_PLLCmd(ENABLE); //Enable PLL
                        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLL is ready
                        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock source
                        while(RCC_GetSYSCLKSource() != 0x08); //Wait till PLL is used as system clock source

                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB
                        | RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1 | RCC_APB2Periph_AFIO |RCC_APB2Periph_USART1, ENABLE ); //ê1&#196;üADC1í¨μàê±&#214;ó£&#172;&#184;÷&#184;&#246;1ü&#189;&#197;ê±&#214;ó

                        RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC×&#238;′óê±&#188;&#228;2&#187;&#196;ü3&#172;1y14M
                        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //ê1&#196;üDMA′&#171;ê&#228;
                }
               
        }

void ADC1_Configuration(void)
{
                ADC_InitTypeDef ADC_InitStructure;

                ADC_DeInit(ADC1); //&#189;&#171;íaéè ADC1 μ&#196;è&#171;2&#191;&#188;&#196;′&#230;&#198;÷&#214;&#216;éè&#206;aè±ê&#161;&#214;μ


                ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1¤×÷&#196;£ê&#189;:ADC1oíADC21¤×÷&#212;ú&#182;àá¢&#196;£ê&#189;
                ADC_InitStructure.ADC_ScanConvMode = ENABLE; //&#196;£êy×a&#187;&#187;1¤×÷&#212;úé¨&#195;è&#196;£ê&#189;
                ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //&#196;£êy×a&#187;&#187;1¤×÷&#212;úá&#172;D&#248;×a&#187;&#187;&#196;£ê&#189;
                ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ía2&#191;′¥·¢×a&#187;&#187;1&#216;±&#213;
                ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADCêy&#190;Yóò&#182;&#212;&#198;&#235;
                ADC_InitStructure.ADC_NbrOfChannel = M; //&#203;3Dò&#189;&#248;DD1&#230;&#212;ò×a&#187;&#187;μ&#196;ADCí¨μàμ&#196;êy&#196;&#191;
                ADC_Init(ADC1, &ADC_InitStructure); //&#184;ù&#190;YADC_InitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉíaéèADCxμ&#196;&#188;&#196;′&#230;&#198;÷


                //éè&#214;&#195;&#214;&#184;&#182;¨ADCμ&#196;1&#230;&#212;ò×éí¨μà£&#172;éè&#214;&#195;&#203;ü&#195;&#199;μ&#196;×a&#187;ˉ&#203;3Dòoí2é&#209;ùê±&#188;&#228;
                //ADC1,ADCí¨μàx,1&#230;&#212;ò2é&#209;ù&#203;3Dò&#214;μ&#206;ay,2é&#209;ùê±&#188;&#228;&#206;a239.5&#214;ü&#198;ú
                ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 5, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 6, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 7, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 8, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 9, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 10, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 11, ADC_SampleTime_239Cycles5 );
                ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 12, ADC_SampleTime_239Cycles5 );

                // &#191;a&#198;&#244;ADCμ&#196;DMA&#214;§3&#214;£¨òaêμ&#207;&#214;DMA1|&#196;ü£&#172;&#187;1Dè&#182;àá¢&#197;&#228;&#214;&#195;DMAí¨μàμè2&#206;êy£&#169;
                ADC_DMACmd(ADC1, ENABLE);


                ADC_Cmd(ADC1, ENABLE); //ê1&#196;ü&#214;&#184;&#182;¨μ&#196;ADC1

                ADC_ResetCalibration(ADC1); //&#184;′&#206;&#187;&#214;&#184;&#182;¨μ&#196;ADC1μ&#196;D£×&#188;&#188;&#196;′&#230;&#198;÷

                while(ADC_GetResetCalibrationStatus(ADC1)); //&#187;&#241;è&#161;ADC1&#184;′&#206;&#187;D£×&#188;&#188;&#196;′&#230;&#198;÷μ&#196;×′ì&#172;,éè&#214;&#195;×′ì&#172;&#212;òμè′y


                ADC_StartCalibration(ADC1); //&#191;aê&#188;&#214;&#184;&#182;¨ADC1μ&#196;D£×&#188;×′ì&#172;

                while(ADC_GetCalibrationStatus(ADC1)); //&#187;&#241;è&#161;&#214;&#184;&#182;¨ADC1μ&#196;D£×&#188;3ìDò,éè&#214;&#195;×′ì&#172;&#212;òμè′y

}

void DMA_Configuration(void)
{

        DMA_InitTypeDef DMA_InitStructure;
        DMA_DeInit(DMA1_Channel1); //&#189;&#171;DMAμ&#196;í¨μà1&#188;&#196;′&#230;&#198;÷&#214;&#216;éè&#206;aè±ê&#161;&#214;μ
        DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMAíaéèADC&#187;ùμ&#216;&#214;·
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //DMA&#196;ú′&#230;&#187;ùμ&#216;&#214;·
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //&#196;ú′&#230;×÷&#206;aêy&#190;Y′&#171;ê&#228;μ&#196;&#196;&#191;μ&#196;μ&#216;
        DMA_InitStructure.DMA_BufferSize = N*M; //DMAí¨μàμ&#196;DMA&#187;o′&#230;μ&#196;′óD&#161;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμ&#216;&#214;·&#188;&#196;′&#230;&#198;÷2&#187;±&#228;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //&#196;ú′&#230;μ&#216;&#214;·&#188;&#196;′&#230;&#198;÷μY&#212;&#246;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //êy&#190;Y&#191;í&#182;è&#206;a16&#206;&#187;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //êy&#190;Y&#191;í&#182;è&#206;a16&#206;&#187;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //1¤×÷&#212;ú&#209;-&#187;·&#187;o′&#230;&#196;£ê&#189;
        DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMAí¨μà xóμóD&#184;&#223;ó&#197;&#207;è&#188;&#182;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMAí¨μàx&#195;&#187;óDéè&#214;&#195;&#206;a&#196;ú′&#230;μ&#189;&#196;ú′&#230;′&#171;ê&#228;
        DMA_Init(DMA1_Channel1, &DMA_InitStructure); //&#184;ù&#190;YDMA_InitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉDMAμ&#196;í¨μà

}


u16 GetVolt(u16 advalue)

{
   return (u16)(advalue * 330 / 4096); //&#199;óμ&#196;&#189;á1&#251;à&#169;′óá&#203;100±&#182;£&#172;·&#189;±&#227;&#207;&#194;&#195;&#230;&#199;ó3&#246;D&#161;êy
}

void filter(void)
{
        int sum = 0;
        u8 count;
        for(i=0;i<12;i++)
        {
          for ( count=0;count<N;count++)
                {
                        sum += AD_Value[count];
                }
  After_filter=sum/N;
  sum=0;
        }
}
/****************************************************************************
* &#195;&#251;    3&#198;£ovoid Usart2_Init(void)
* 1|    &#196;ü£o′&#174;&#191;ú13&#245;ê&#188;&#187;ˉoˉêy
* è&#235;&#191;ú2&#206;êy£o&#206;T
* 3&#246;&#191;ú2&#206;êy£o&#206;T
* &#203;μ    &#195;÷£o
* μ÷ó&#195;·&#189;·¨£o&#206;T
****************************************************************************/
void Usart2_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;

  RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 , ENABLE);         //ê1&#196;ü′&#174;&#191;ú2ê±&#214;ó



  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                  //USART2 TX
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                     //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOA, &GPIO_InitStructure);                                     //A&#182;&#203;&#191;ú

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                              //USART2 RX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;            //&#184;′ó&#195;&#191;a&#194;&#169;ê&#228;è&#235;
  GPIO_Init(GPIOA, &GPIO_InitStructure);                                  //A&#182;&#203;&#191;ú

  USART_InitStructure.USART_BaudRate = 115200;                                                //&#203;ù&#194;ê115200bps
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;                //êy&#190;Y&#206;&#187;8&#206;&#187;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;                        //í£&#214;1&#206;&#187;1&#206;&#187;
  USART_InitStructure.USART_Parity = USART_Parity_No;                                //&#206;TD£&#209;é&#206;&#187;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   //&#206;Tó2&#188;tá÷&#191;&#216;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                                        //ê&#213;·¢&#196;£ê&#189;

  /* Configure USART1 */
  USART_Init(USART2, &USART_InitStructure);                                                        //&#197;&#228;&#214;&#195;′&#174;&#191;ú2&#206;êyoˉêy   
   /* Enable the USART1 */
  USART_Cmd(USART2, ENABLE);       

}

void uart_init(u32 bound){
  //GPIO&#182;&#203;&#191;úéè&#214;&#195;
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //ê1&#196;üUSART1£&#172;GPIOAê±&#214;ó

        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.9

  //USART1_RX          GPIOA.103&#245;ê&#188;&#187;ˉ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//&#184;&#161;&#191;&#213;ê&#228;è&#235;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.10  

  //Usart1 NVIC &#197;&#228;&#214;&#195;
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×óó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷

   //USART 3&#245;ê&#188;&#187;ˉéè&#214;&#195;

        USART_InitStructure.USART_BaudRate = bound;//′&#174;&#191;ú2¨ì&#216;&#194;ê
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;

  USART_Init(USART1, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óêü&#214;D&#182;&#207;
  USART_Cmd(USART1, ENABLE);                    //ê1&#196;ü′&#174;&#191;ú1

}


//&#197;&#228;&#214;&#195;&#203;ùóDíaéè
void Init_All_Periph(void)
{

        RCC_Configuration();

        GPIO_Configuration();

        ADC1_Configuration();

        DMA_Configuration();

//        Usart2_Init();
        uart_init(9600);         //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a9600
}

/******************************************************
                &#213;&#251;D&#206;êy&#190;Y×a×&#214;·&#251;′&#174;oˉêy
        char *itoa(int value, char *string, int radix)
                radix=10 ±êê&#190;ê&#199;10&#189;&#248;&#214;&#198;        ·&#199;ê&#174;&#189;&#248;&#214;&#198;£&#172;×a&#187;&#187;&#189;á1&#251;&#206;a0;  

            ày£od=-379;
                &#214;′DD        itoa(d, buf, 10); oó
               
                buf="-379"                                                                                     
**********************************************************/
char *itoa(int value, char *string, int radix)
{
    int     i, d;
    int     flag = 0;
    char    *ptr = string;

    /* This implementation only works for decimal numbers. */
    if (radix != 10)
    {
        *ptr = 0;
        return string;
    }

    if (!value)
    {
        *ptr++ = 0x30;
        *ptr = 0;
        return string;
    }

    /* if this is a negative value insert the minus sign. */
    if (value < 0)
    {
        *ptr++ = '-';

        /* Make the value positive. */
        value *= -1;
    }

    for (i = 10000; i > 0; i /= 10)
    {
        d = value / i;

        if (d || flag)
        {
            *ptr++ = (char)(d + 0x30);
            value -= (d * i);
            flag = 1;
        }
    }

    /* Null terminate the string. */
    *ptr = 0;

    return string;

} /* NCL_Itoa */
/****************************************************************************
* &#195;&#251;    3&#198;£ovoid USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...)
* 1|    &#196;ü£o&#184;&#241;ê&#189;&#187;ˉ′&#174;&#191;úê&#228;3&#246;oˉêy
* è&#235;&#191;ú2&#206;êy£oUSARTx:  &#214;&#184;&#182;¨′&#174;&#191;ú
                        Data£o   ·¢&#203;íêy×é
                        ...:     2&#187;&#182;¨2&#206;êy
* 3&#246;&#191;ú2&#206;êy£o&#206;T
* &#203;μ    &#195;÷£o&#184;&#241;ê&#189;&#187;ˉ′&#174;&#191;úê&#228;3&#246;oˉêy
                "\r"        &#187;&#216;3μ·&#251;           USART_OUT(USART1, "abcdefg\r")   
                        "\n"        &#187;&#187;DD·&#251;           USART_OUT(USART1, "abcdefg\r\n")
                        "%s"        ×&#214;·&#251;′&#174;           USART_OUT(USART1, "×&#214;·&#251;′&#174;ê&#199;£o%s","abcdefg")
                        "%d"        ê&#174;&#189;&#248;&#214;&#198;           USART_OUT(USART1, "a=%d",10)
* μ÷ó&#195;·&#189;·¨£o&#206;T
****************************************************************************/
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...){

        const char *s;
    int d;

    char buf[16];
    va_list ap;
    va_start(ap, Data);

        while(*Data!=0){                                                          //&#197;D&#182;&#207;ê&#199;·&#241;μ&#189;′&#239;×&#214;·&#251;′&#174;&#189;áê&#248;·&#251;
                if(*Data==0x5c){                                                                          //'\'
                        switch (*++Data){
                                case 'r':                                                                  //&#187;&#216;3μ·&#251;
                                        USART_SendData(USARTx, 0x0d);          

                                        Data++;
                                        break;
                                case 'n':                                                                  //&#187;&#187;DD·&#251;
                                        USART_SendData(USARTx, 0x0a);       
                                        Data++;
                                        break;
                               
                                default:
                                        Data++;
                                    break;
                        }
                       
                         
                }
                else if(*Data=='%'){                                                                          //
                        switch (*++Data){                               
                                case 's':                                                                                  //×&#214;·&#251;′&#174;
                        s = va_arg(ap, const char *);
                        for ( ; *s; s++) {
                            USART_SendData(USARTx,*s);
                                                while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
                        }
                                        Data++;
                        break;
                    case 'd':                                                                                  //ê&#174;&#189;&#248;&#214;&#198;
                        d = va_arg(ap, int);
                        itoa(d, buf, 10);
                        for (s = buf; *s; s++) {
                            USART_SendData(USARTx,*s);
                                                while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
                        }
                                        Data++;
                        break;
                                default:
                                        Data++;
                                    break;
                        }                 
                }
                else USART_SendData(USARTx, *Data++);
                while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
        }
}

/****************************************************************************
* &#195;&#251;    3&#198;£oint main(void)
* 1|    &#196;ü£o&#214;÷oˉêy
* è&#235;&#191;ú2&#206;êy£o&#206;T
* 3&#246;&#191;ú2&#206;êy£o&#206;T
* &#203;μ    &#195;÷£o
* μ÷ó&#195;·&#189;·¨£o
****************************************************************************/
int main(void)
{       
        u16 value[M];
        Init_All_Periph();
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        DMA_Cmd(DMA1_Channel1, ENABLE); //&#198;&#244;&#182;ˉDMAí¨μà
        SysTick_Config(72000);//1ms
        while(1)
        {
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//μè′y′&#171;ê&#228;íê3é·&#241;&#212;òμúò&#187;&#206;&#187;êy&#190;YèYò×&#182;aê§
                filter();
                for(i=0;i<12;i++)
                {
                        value= GetVolt(After_filter);
                        if(i==11)
                        {
                                USART_OUT(USART1,"value[%d]=%d.%dv \r\n",i,value/100,value%100) ;
                        }
                        else
                        {
                                USART_OUT(USART1,"value[%d]=%d.%dv ,",i,value/100,value%100) ;
                        }
                        Delay(100);
         }       
         }
}
/******************* (C) COPYRIGHT 2013 ·ü&#182;·STM32 *****END OF FILE****/


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-11-16 22:09:13 | 显示全部楼层
改变输入电压的大小呢?数值也不变?
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-11-13
在线时间
1 小时
 楼主| 发表于 2017-11-17 15:32:39 | 显示全部楼层
正点原子 发表于 2017-11-16 22:09
改变输入电压的大小呢?数值也不变?

改变输入电压大小事会变的,我测了一个PWM波矩形的,0到3.3V的,但是测出来最低是2.1V左右,最高3点几伏,感觉电压差有点小,没测到1点几伏或者0伏,我主要是想问悬空状态为啥是稳定的电压值,如果我接0V的是不是就测不出来了呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 14:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表