stm32ADC得到的数据用串口打印无结果,求大家指点

2019-10-15 04:44发布

本帖最后由 超级歪 于 2017-2-5 23:46 编辑

在学到ADC一节,想用串口把DAC得到的数据打印出来,结果没有反应,串口的配置用的是原子例程中自带的,并未作出修改,请大家帮我找一下原因 谢谢各位~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
超级歪
2019-10-15 14:16
本帖最后由 超级歪 于 2017-2-5 23:40 编辑

代码如下:

main函数部分:


#include "adc.h"
#include "delay.h"
#include "sys.h"

int main(void)
{         int test=0;
        delay_init();                     //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级                 
        
        uart_init(115200);         //串口初始化为115200
        adc_init();

          while(1)
        {               
                test=get_adc(ADC_Channel_1);
                printf("the number is ");
               
                        USART_SendData(USART1, test);//向串口1发送数据
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束               
                delay_ms(1000);

        }
}


ADC配置部分:

#include"adc.h"
#include"delay.h"

void adc_init(void)//adc初始化
{
        GPIO_InitTypeDef GPIO_InitStruct;
        ADC_InitTypeDef  ADC_InitStruct;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE);
        
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStruct);
        
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);
        
        ADC_DeInit(ADC1);
        
        ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
        ADC_InitStruct.ADC_ScanConvMode=DISABLE;
        ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
        ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
        ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
        ADC_InitStruct.ADC_NbrOfChannel=1;
        
        ADC_Init(ADC1,&ADC_InitStruct);
        
        
        ADC_ResetCalibration(ADC1);//使能复位校准  
        while(ADC_GetResetCalibrationStatus(ADC1));        //等待复位校准结束
        
        ADC_StartCalibration(ADC1);         //开启AD校准

        while(ADC_GetCalibrationStatus(ADC1));         //等待校准结束
        
}
        
u16 get_adc(u8 ch)//获取某一个通道转化结果
{
        ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);
        
        while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
        
        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;



}

一周热门 更多>