使用例程2301_adc_dc中的代码,安装其xml文件配置,在e2下也进行相同的adc配置,代码也只是直接复制过来,为什么在e2中的程序adc读取不到值?而在keil中的程序可以正常读取值
该图为在e2结合lvgl项目编译的程序串口输出。尝试过重新创建一个e2项目,并将代码复制到该项目中,将keil的adc项目的adc配置复制到该新项目中,也是这样的输出
该图为keil编译的程序串口输出
上传keil、e2的这2个文件:ra_gen\hal_data.c
简单地说,我还是怀疑你没配置对。
我尝试将keil的adc配置替换掉e2中的adc配置,结果还是一样。下面是keil和e2的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 };
#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); }
是这样的,非常感谢!!