ADC使用

使用例程2301_adc_dc中的代码,安装其xml文件配置,在e2下也进行相同的adc配置,代码也只是直接复制过来,为什么在e2中的程序adc读取不到值?而在keil中的程序可以正常读取值

该图为在e2结合lvgl项目编译的程序串口输出。尝试过重新创建一个e2项目,并将代码复制到该项目中,将keil的adc项目的adc配置复制到该新项目中,也是这样的输出

该图为keil编译的程序串口输出

Parents Reply Children
  • 我尝试将keil的adc配置替换掉e2中的adc配置,结果还是一样。下面是keil和e2的adc配置

    这是keil文件的关于adc的配置

    
            adc_instance_ctrl_t g_adc5_ctrl;
    const adc_extended_cfg_t g_adc5_cfg_extend =
    {
        .add_average_count   = ADC_ADD_OFF,
        .clearing            = ADC_CLEAR_AFTER_READ_ON,
        .trigger_group_b     = ADC_TRIGGER_SYNC_ELC,
        .double_trigger_mode = ADC_DOUBLE_TRIGGER_DISABLED,
        .adc_vref_control    = ADC_VREF_CONTROL_VREFH,
        .enable_adbuf        = 0,
    #if defined(VECTOR_NUMBER_ADC0_WINDOW_A)
        .window_a_irq        = VECTOR_NUMBER_ADC0_WINDOW_A,
    #else
        .window_a_irq        = FSP_INVALID_VECTOR,
    #endif
        .window_a_ipl        = (BSP_IRQ_DISABLED),
    #if defined(VECTOR_NUMBER_ADC0_WINDOW_B)
        .window_b_irq      = VECTOR_NUMBER_ADC0_WINDOW_B,
    #else
        .window_b_irq      = FSP_INVALID_VECTOR,
    #endif
        .window_b_ipl      = (BSP_IRQ_DISABLED),
    };
    const adc_cfg_t g_adc5_cfg =
    {
        .unit                = 0,
        .mode                = ADC_MODE_SINGLE_SCAN,
        .resolution          = ADC_RESOLUTION_12_BIT,
        .alignment           = (adc_alignment_t) ADC_ALIGNMENT_RIGHT,
        .trigger             = ADC_TRIGGER_SOFTWARE,
        .p_callback          = NULL,
        /** If NULL then do not add & */
    #if defined(NULL)
        .p_context           = NULL,
    #else
        .p_context           = &NULL,
    #endif
        .p_extend            = &g_adc5_cfg_extend,
    #if defined(VECTOR_NUMBER_ADC0_SCAN_END)
        .scan_end_irq        = VECTOR_NUMBER_ADC0_SCAN_END,
    #else
        .scan_end_irq        = FSP_INVALID_VECTOR,
    #endif
        .scan_end_ipl        = (BSP_IRQ_DISABLED),
    #if defined(VECTOR_NUMBER_ADC0_SCAN_END_B)
        .scan_end_b_irq      = VECTOR_NUMBER_ADC0_SCAN_END_B,
    #else
        .scan_end_b_irq      = FSP_INVALID_VECTOR,
    #endif
        .scan_end_b_ipl      = (BSP_IRQ_DISABLED),
    };
    #if ((0) | (0))
    const adc_window_cfg_t g_adc5_window_cfg =
    {
        .compare_mask        =  0,
        .compare_mode_mask   =  0,
        .compare_cfg         = (0) | (0) | (0) | (ADC_COMPARE_CFG_EVENT_OUTPUT_OR),
        .compare_ref_low     = 0,
        .compare_ref_high    = 0,
        .compare_b_channel   = (ADC_WINDOW_B_CHANNEL_0),
        .compare_b_mode      = (ADC_WINDOW_B_MODE_LESS_THAN_OR_OUTSIDE),
        .compare_b_ref_low   = 0,
        .compare_b_ref_high  = 0,
    };
    #endif
    const adc_channel_cfg_t g_adc5_channel_cfg =
    {
        .scan_mask           = ADC_MASK_CHANNEL_5 |  0,
        .scan_mask_group_b   =  0,
        .priority_group_a    = ADC_GROUP_A_PRIORITY_OFF,
        .add_mask            =  0,
        .sample_hold_mask    =  0,
        .sample_hold_states  = 24,
    #if ((0) | (0))
        .p_window_cfg        = (adc_window_cfg_t *) &g_adc5_window_cfg,
    #else
        .p_window_cfg        = NULL,
    #endif
    };
    /* Instance structure to use this module. */
    const adc_instance_t g_adc5 =
    {
        .p_ctrl    = &g_adc5_ctrl,
        .p_cfg     = &g_adc5_cfg,
        .p_channel_cfg = &g_adc5_channel_cfg,
        .p_api     = &g_adc_on_adc
    };
        

    这是e2关于adc的配置

    
    #define ADC_TRIGGER_ADC0        ADC_TRIGGER_SYNC_ELC
    #define ADC_TRIGGER_ADC0_B      ADC_TRIGGER_SYNC_ELC
    #define ADC_TRIGGER_ADC1        ADC_TRIGGER_SYNC_ELC
    #define ADC_TRIGGER_ADC1_B      ADC_TRIGGER_SYNC_ELC
    
    adc_instance_ctrl_t g_adc5_ctrl;
    const adc_extended_cfg_t g_adc5_cfg_extend =
    { .add_average_count = ADC_ADD_OFF,
      .clearing = ADC_CLEAR_AFTER_READ_ON,
      .trigger_group_b = ADC_TRIGGER_SYNC_ELC,
      .double_trigger_mode = ADC_DOUBLE_TRIGGER_DISABLED,
      .adc_vref_control = ADC_VREF_CONTROL_VREFH,
      .enable_adbuf = 0,
    #if defined(VECTOR_NUMBER_ADC0_WINDOW_A)
        .window_a_irq        = VECTOR_NUMBER_ADC0_WINDOW_A,
    #else
      .window_a_irq = FSP_INVALID_VECTOR,
    #endif
      .window_a_ipl = (BSP_IRQ_DISABLED),
    #if defined(VECTOR_NUMBER_ADC0_WINDOW_B)
        .window_b_irq      = VECTOR_NUMBER_ADC0_WINDOW_B,
    #else
      .window_b_irq = FSP_INVALID_VECTOR,
    #endif
      .window_b_ipl = (BSP_IRQ_DISABLED), };
    const adc_cfg_t g_adc5_cfg =
    { .unit = 0, .mode = ADC_MODE_SINGLE_SCAN, .resolution = ADC_RESOLUTION_12_BIT, .alignment =
              (adc_alignment_t) ADC_ALIGNMENT_RIGHT,
      .trigger = ADC_TRIGGER_SOFTWARE, .p_callback = NULL,
      /** If NULL then do not add & */
    #if defined(NULL)
        .p_context           = NULL,
    #else
      .p_context = &NULL,
    #endif
      .p_extend = &g_adc5_cfg_extend,
    #if defined(VECTOR_NUMBER_ADC0_SCAN_END)
        .scan_end_irq        = VECTOR_NUMBER_ADC0_SCAN_END,
    #else
      .scan_end_irq = FSP_INVALID_VECTOR,
    #endif
      .scan_end_ipl = (BSP_IRQ_DISABLED),
    #if defined(VECTOR_NUMBER_ADC0_SCAN_END_B)
        .scan_end_b_irq      = VECTOR_NUMBER_ADC0_SCAN_END_B,
    #else
      .scan_end_b_irq = FSP_INVALID_VECTOR,
    #endif
      .scan_end_b_ipl = (BSP_IRQ_DISABLED), };
    #if ((0) | (0))
    const adc_window_cfg_t g_adc5_window_cfg =
    {
        .compare_mask        =  0,
        .compare_mode_mask   =  0,
        .compare_cfg         = (0) | (0) | (0) | (ADC_COMPARE_CFG_EVENT_OUTPUT_OR),
        .compare_ref_low     = 0,
        .compare_ref_high    = 0,
        .compare_b_channel   = (ADC_WINDOW_B_CHANNEL_0),
        .compare_b_mode      = (ADC_WINDOW_B_MODE_LESS_THAN_OR_OUTSIDE),
        .compare_b_ref_low   = 0,
        .compare_b_ref_high  = 0,
    };
    #endif
    const adc_channel_cfg_t g_adc5_channel_cfg =
    { .scan_mask = ADC_MASK_CHANNEL_5 | 0, .scan_mask_group_b = 0, .priority_group_a = ADC_GROUP_A_PRIORITY_OFF, .add_mask =
              0,
      .sample_hold_mask = 0, .sample_hold_states = 24,
    #if ((0) | (0))
        .p_window_cfg        = (adc_window_cfg_t *) &g_adc5_window_cfg,
    #else
      .p_window_cfg = NULL,
    #endif
            };
    /* Instance structure to use this module. */
    const adc_instance_t g_adc5 =
    { .p_ctrl = &g_adc5_ctrl, .p_cfg = &g_adc5_cfg, .p_channel_cfg = &g_adc5_channel_cfg, .p_api = &g_adc_on_adc };
        
  • 我也尝试过在fsp中导出adc的配置文件xml,然后再导入到e2项目中;为防止是个人问题,我也请小组别的成员来尝试配置,结果还是一致。不知道会不会是代码需要修改?拜托您看一下了,谢谢

  • 对比了你上传的代码,是一样的。

    上传你的e2工程吧

  • https://bucket-1355.oss-cn-beijing.aliyuncs.com/e2ADC.rar 我找不到上传文件的地方,我把项目上传到了我的oss中,麻烦您下载查看一下了,谢谢!

  • 估计是printf不支持打印浮点数,你试试:

    for(uint16_t i=0; i<4; i++)
    {
    float value = (float)(buf[i]*3.3/4096);

    int v = value * 10;
    printf("[%d] --> %d.%d\r\n\t", i+1, v/10, v%10);
    }

  • 是这样的,非常感谢!!