| 本帖最后由 nvjwiciw659 于 2020-5-5 23:20 编辑 
 接下来试试ADC采集
 static rt_thread_t adc_thread = RT_NULL;
static rt_thread_t printf_thread = RT_NULL;
#define DISABLE_ALL_CHANNEL     9
__IO uint16_t ADCVAL;
int fValue;
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);   
    
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_1|GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    /*将PA1配置为模拟输入*/
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/********************************************************************************************************
**函数信息 :void ADC1_SingleChannel(uint8_t ADC_Channel_x)      
**功能描述 :配置ADC1单次转换模式
**输入参数 :ADC_Channel_x , x为0~8
**输出参数 :无
**    备注 :
********************************************************************************************************/
void ADC1_SingleChannel(uint8_t ADC_Channel_x)
{
    ADC_InitTypeDef  ADC_InitStructure;
    
    GPIO_Configuration();
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    
    /* Initialize the ADC_PRESCARE values */
    ADC_InitStructure.ADC_PRESCARE = ADC_PCLK2_PRESCARE_16;
    /* Initialize the ADC_Mode member */
    ADC_InitStructure.ADC_Mode = ADC_Mode_Single;
    /* Initialize the ADC_ContinuousConvMode member */
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    /* Initialize the ADC_DataAlign member */
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    /* Initialize the ADC_ExternalTrigConv member */
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
    ADC_Init(ADC1, &ADC_InitStructure);
    
    /*屏蔽所有通道*/
    ADC_RegularChannelConfig(ADC1, DISABLE_ALL_CHANNEL , 0, 0); 
    /*使能选中通道,后面参数保留*/
    ADC_RegularChannelConfig(ADC1, ADC_Channel_x, 0, ADC_SampleTime_28_5Cycles); 
    
    ADC_Cmd(ADC1, ENABLE); 
}
/********************************************************************************************************
**函数信息 :ADC1_SingleChannel_Get()       
**功能描述 :获取ADC1转换数据
**输入参数 :ADC_Channel_x , x为0~8
*puiADData ,ADC1实际转换数据
**输出参数 :ucStatus ,0 表示数据获取失败,1 表示成功
********************************************************************************************************/
u16 ADC1_SingleChannel_Get(uint8_t ADC_Channel_x)
{ 
    u16 puiADData;
    /*ADCR寄存器的ADST位使能,软件启动转换*/
    ADC_SoftwareStartConvCmd(ADC1, ENABLE); 
    while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==0);
    ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
    puiADData=ADC_GetConversionValue(ADC1);
    return puiADData;
}
/********************************************************************************************************
**函数信息 :Get_Adc_Average(uint8_t ADC_Channel_x,uint8_t times)     
**功能描述 :获取几次ADC1采样值的平均值
**输入参数 :ADC_Channel_x , x为0~8
**输出参数 :puiADData为ADC读到的值
********************************************************************************************************/
u16 Get_Adc_Average(uint8_t ADC_Channel_x,uint8_t times)
{
    u32 temp_val=0;
    u8 t;
    u8 delay;
    for(t=0;t<times;t++)
    {
        temp_val+=ADC1_SingleChannel_Get(ADC_Channel_x);
        for(delay=0;delay<100;delay++);
    }
    return temp_val/times;
}         
/********************************************************************************************************
* led_init(void)
********************************************************************************************************/
void led_init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void ADC_thread_entry(void* parameter)
{
        while(1)
        {
                ADCVAL=Get_Adc_Average(ADC_Channel_1,5);
    fValue = (int) (ADCVAL * 825) >> 10; 
                rt_thread_delay(500);   /* 延时500个tick */ 
        }
}
void PRINTF_thread_entry(void* parameter)
{
        while(1)
        {
                rt_kprintf("\r\nADC1_CH_1=0x%04X\r\n",ADCVAL);
                rt_kprintf("ADC1_CH_1=%dmV\r\n",fValue);
                rt_thread_delay(500);   /* 延时500个tick */                                                 
        }
}
/********************************************************************************************************
* adc_task(void)adc任务
********************************************************************************************************/
void adc_task(void)
{
        adc_thread =                          /* 线程控制块指针 */
    rt_thread_create( "adc",              /* 线程名字 */
                      ADC_thread_entry,   /* 线程入口函数 */
                      RT_NULL,             /* 线程入口函数参数 */
                      512,                 /* 线程栈大小 */
                      2,                   /* 线程的优先级 */
                      20);                 /* 线程时间片 */
                   
    /* 启动线程,开启调度 */
   if (adc_thread != RT_NULL)
        rt_thread_startup(adc_thread);
}
/********************************************************************************************************
* adc_task(void)adc任务
********************************************************************************************************/
void printf_task(void)
{
        printf_thread =                          /* 线程控制块指针 */
    rt_thread_create( "printf",              /* 线程名字 */
                      PRINTF_thread_entry,   /* 线程入口函数 */
                      RT_NULL,             /* 线程入口函数参数 */
                      512,                 /* 线程栈大小 */
                      3,                   /* 线程的优先级 */
                      20);                 /* 线程时间片 */
                   
    /* 启动线程,开启调度 */
   if (printf_thread != RT_NULL)
        rt_thread_startup(printf_thread);
}
void mmrtt_init(void)
{
        ADC1_SingleChannel( ADC_Channel_1);
        adc_task();
        printf_task();
}
int main(void)
{
    led_init();
                mmrtt_init();
    while (1)
    {
    }
}
  
 |