新手帖 求助 如何将ADC采集的数据通过串口发给PC?不会写出程序

2019-07-21 05:17发布

void usart1_init(void)
{
        GPIO_InitTypeDef GPIO_InitStrue;//¶¨òåGPIO½á11ìå
        USART_InitTypeDef USART_InitStrue;
        NVIC_InitTypeDef NVIC_InitStrue;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ê1Äü
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
       
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//íÆíì¸′óà TX¶&#203A9
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStrue);
       
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë RX¶&#203A10
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStrue);
       
        USART_InitStrue.USART_BaudRate=115200;
        USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStrue.USART_Parity=USART_Parity_No;
        USART_InitStrue.USART_StopBits=USART_StopBits_1;
        USART_InitStrue.USART_WordLength=USART_WordLength_8b;
       
       

       
        USART_Init(USART1,&USART_InitStrue);
       
        USART_Cmd(USART1,ENABLE);
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//½óêü·Ç
       
        NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
       
        NVIC_Init(&NVIC_InitStrue);

       
       
       
}       


void Adc_INIT(void)
{
                GPIO_InitTypeDef  GPIO_InitStructure;
          ADC_InitTypeDef  ADC_InitStruct;
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//
       
       
               
                       
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                 //PA1 ¶Ë¿úÅäÖÃ
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                  //Ä£ÄaêäèëÄ£ê½
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿úËù¶èÎa50MHz
                GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOA1

          RCC_ADCCLKConfig(RCC_PCLK2_Div8);// APB2Îa72MHZ, ADC ×î′ó½óêü14MHZ 1ê·ÖÆμòa′óóú5.5       //12MHZê±Îa′ïμ½125HZ2éÑùÆμÂ꣬ó|Îa83.5ÖüÆú  μ«êÇÖ»óD142HZ
       
                                                                //9MHZê±Îa′ïμ½125HZ2éÑùÆμÂ꣬ó|Îa59.5ÖüÆú  μ«êÇ×î½ó½üÎa132hz
       
                ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;//

                ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Left;//
                ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//2»ê1óÃía2¿′¥·¢
                ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;//¶àá¢Ä£ê½
                ADC_InitStruct.ADC_NbrOfChannel=1;//쥶àí¨μà
                ADC_InitStruct.ADC_ScanConvMode=DISABLE;//é¨ÃèÄ£ê½1رÕ
          ADC_Init(ADC1, & ADC_InitStruct);//ADC1Ïà1ؽá11ì嶨òå
               
       
                ADC_Cmd(ADC1, ENABLE);//ê1ÄüADC

    ADC_ResetCalibration(ADC1);//ADC¸′λD£×¼ê1Äü
                while (ADC_GetResetCalibrationStatus(ADC1));//μè′y¸′λD£×¼½áêø
       
          ADC_StartCalibration(ADC1);//¿aÆôADD£×¼
                while  (ADC_GetCalibrationStatus(ADC1));//μè′yD£×¼½áêø


               

}


u16 Get_ADC(u8 ch)
{
                ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_55Cycles5);
                ADC_SoftwareStartConvCmd(ADC1, ENABLE);
                while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//»ñè¡Çé¿ö£¬μè′y×a»»½áêø
               
                return ADC_GetConversionValue(ADC1);//
       
}


u16 Get_ADC_average(u8 ch, u8 times)
{
                u32 temp_val=0;
                u8 t;
                for(t=0;t<times;t++)
                {
                        temp_val+=Get_ADC(ch);
                        delay_ms(5);
                }
                return temp_val/times;
                       
}

int main(void)
{               
        u16 adcx;
        u16 adcx1;
        float temp;
        u8 t=0;
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //éè&#214;&#195;NVIC&#214;D&#182;&#207;·&#214;×é2:2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        usart1_init();
        Adc_INIT();
         
       
        while(1){
        adcx=Get_ADC_average(ADC_Channel_1,10);
        temp=(float)adcx*(3.3/4096);//×a&#187;ˉ&#206;aμ&#231;&#209;1
        adcx1=(int)temp;
        USART_SendData(USART1,adcx1);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        }
}
主程序不知道怎么写 求教


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。