问答

汇集网友智慧,解决技术难题

21ic问答首页 - Work_BenchMark创建工程遇到的问题

or Benchmark 遇到 AD AN dc

Work_BenchMark创建工程遇到的问题

zhjb12025-04-20
本帖最后由 zhjb1 于 2025-4-20 16:08 编辑

采用Work_BenchMark1.1.0.8————最新版遇到的问题仅仅以ADC为例,本工程需要4路ADC加上测温一共5路,简化操作仅用ADC1.也从工程SysClock开始:

采用外部晶振8MHz,sysClock=240MHz见图。
ADC的设置见下图:

设置了6个,实际只用5个,因为想用DAC1,2,所以ADC4实际指向IN6:IN1,IN2,IN3,IN6,这4个GPIO口作为ADC的4路输入。
DMA设置如下图:

为了防止出错,本设置除了XMC之外仅仅设置了ADC1的DMA,默认为DMA1_CHANNEL5通道。
主要代码如下(为了省事与ADC无关的都顺序集中到一行):
//main function.
int main(void){
//system clock config.
wk_system_clock_config(); wk_periph_clock_config(); wk_debug_config(); wk_nvic_config(); wk_timebase_init();

//init dma1 channel5
wk_dma1_channel5_init();
//config dma channel transfer parameter
//user need to modify define values DMAx_CHANNELy_XXX_BASE_ADDR and DMAx_CHANNELy_BUFFER_SIZE in at32xxx_wk_config.h
//wk_dma_channel_config(DMA1_CHANNEL5,(uint32_t)&ADC1->odt,DMA1_CHANNEL5_MEMORY_BASE_ADDR,DMA1_CHANNEL5_BUFFER_SIZE);
wk_dma_channel_config(DMA1_CHANNEL5,(uint32_t)&ADC1->odt,(uint32_t)adcx,6);
dma_channel_enable(DMA1_CHANNEL5, TRUE);

//init dma1 channel7
wk_dma1_channel7_init();
//config dma channel transfer parameter
//user need to modify define values DMAx_CHANNELy_XXX_BASE_ADDR and DMAx_CHANNELy_BUFFER_SIZE in at32xxx_wk_config.h
wk_dma_channel_config(DMA1_CHANNEL7,DMA1_CHANNEL7_PERIPHERAL_BASE_ADDR,DMA1_CHANNEL7_MEMORY_BASE_ADDR,DMA1_CHANNEL7_BUFFER_SIZE);
dma_channel_enable(DMA1_CHANNEL7, TRUE);
//init wk_xmc_gpio function.
wk_xmc_gpio_init(); wk_xmc_bank1_nor_sram1_init(); wk_usart1_init(); wk_spi2_init(); wk_i2c1_init(); wk_adc1_init(); wk_rtc_init(); wk_exint_config(); wk_tmr1_init(); wk_tmr2_init(); wk_tmr3_init(); wk_tmr4_init(); wk_acc_init(); wk_usbfs_init(); wk_dac_init(); wk_gpio_config();

printf("Test AT32F407VGT7 programes ...\n\r");
adc_enable(ADC1,TRUE);
adc_calibration_start(ADC1);

while(1){
  printf("ADC1:4%d ADC2=%d ADC3=%d ADC4=%d ADC5=%d \r\n",adcx[0],adcx[1],adcx[2],adcx[3],adcx[4]);
}
}

上边两行加粗的如果没有,测出来所有的数值均为40?不知道为何。有了就正常监测到了,尽管数值有相当大的误差,但已经有了。但也是系统数值,不同的是后几位的变化。下图是串口截取的数据:

从数据上看ADC1-3大概其是数据,ADC4-5为0。
没有重新改工程为只有ADC1-3进行测试。
以上是参考了老师:ArterySW的几篇文章进行的设置。在设置过程中有些地方做过更改,最后最好的结果就是以上几张图片。
不清楚是哪里有问题?还是Work_BenchMark只能设置3个ADC————因为参考文章最多也只有3路ADC。
百忙之中不吝赐教万分感谢。
需要分或什么的尽管说,圣人敛财取之有道,我学您教受之无愧!

回答 +关注 0
594人浏览 4人回答问题 分享 举报
4 个回答
  • 非常感谢您的指导,昨天按照WB34,仅仅设置ADC1-3,复制成功。
    再次感谢
  • zhjb1 发表于 2025-4-22 10:28
    实际上在采用网上老师的实例配置出不来结果的原因不知是否是如下:
    1. 在at32f403a_407_wk_config.c这个函 ...

    首先
    严格按照下面这个帖子,配置一下,不要加入自己的东西,先把ADC和DMA正常跑起来,保证运行效果和帖子展示的效果一致

    AT32 WorkBench常用功能34--AT32F403A ADC普通组转换多通道配置(序列模式,用DMA)
    https://bbs.21ic.com/icview-3446700-1-1.html

    第二
    ADC和DMA正常跑起来后,在你这个模式只用DMA中断就行,不需要ADC中断,如果你需要DMA中断,需要调用这个函数dma_interrupt_enable(DMA1_CHANNEL1,DMA_FDT_INT,TRUE)开启
    然后你需要自己建一个中断函数void DMA1_Channel1_IRQHandler(void)
    {
      if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET)
      {
        dma_flag_clear(DMA1_FDT1_FLAG);
      }
    }

    第三
    建议网上学习一下32单片机使用的基础,比如中断如何使用,如何配置中断函数,如何设置中断优先级等,先学习一下基础,会对后面的开发事半功倍


  • 实际上在采用网上老师的实例配置出不来结果的原因不知是否是如下:
    1. 在at32f403a_407_wk_config.c这个函数中的ADC初始化语句中有一条注释:
    /**
       * Users need to configure ADC1 interrupt functions according to the actual application.
       * 1. Call the below function to enable the corresponding ADC1 interrupt.
       *     --adc_interrupt_enable(...)
       * 2. Add the user's interrupt handler code into the below function in the at32f403a_407_int.c file.
       *     --void ADC1_2_IRQHandler(void)
       */需要配置两条函数
    adc_interrupt_enable(...)
    void ADC1_2_IRQHandler(void)
    遍历工程找不到此函数,而在STM生成的工程中可以搜到对应的函数。
    2.还是此函数的DMA配置中也有:
    /**
       * Users need to configure DMA1 interrupt functions according to the actual application.
       * 1. Call the below function to enable the corresponding DMA1 interrupt.
       *     --dma_interrupt_enable(...)
       * 2. Add the user's interrupt handler code into the below function in the at32f403a_407_int.c file.
       *     --void DMA1_Channel5_IRQHandler(void)
       */

    针对DMA的中断允许和中断向量声明。
    前者在main中已有了,后者没有。
    我想是否缺少这两个 声明!
    但网上的案例也没有这2个声明。
    能否解惑答疑一下呢?
    谢谢
  • 可以参照这个帖子配置,功能和你需求的功能一样的

    AT32 WorkBench常用功能34--AT32F403A ADC普通组转换多通道配置(序列模式,用DMA)
    https://bbs.21ic.com/icview-3446700-1-1.html

您需要登录后才可以回复 登录 | 注册