[AT32 WorkBench] AT32 WorkBench常用功能40--AT32F403A ADC普通组位移模式配置

[复制链接]
3068|4
 楼主| ArterySW 发表于 2025-4-16 16:47 | 显示全部楼层 |阅读模式
本帖最后由 muyichuan2012 于 2025-9-28 10:00 编辑

AT32 WorkBench常用功能40--AT32F403A ADC普通组位移模式配置


AT32 WorkBench官网使用教程链接:
https://www.arterytek.com/cn/support/tools.jsp?index=0

本文主要介绍如何基于AT32 WorkBench配置ADC普通组短位移模式,当使用普通位移模式时,通过使用多ADC采集同一通道,可以提高ADC对这个通道的采样频率,以AT32F403A为例,如果使用2个ADC采集同一通道,可将此通道的采样率从最大2M,提升到2×2 = 4M,所以位移模式适合用在需要对单一通道高速采样的应用场景
转换时序
509453bed384a65f659bb0634f0f0547
硬件环境
  • AT-START-F403A

软件环境
  • AT32 Workbench
  • MDK5
  • 串口助手


配置步骤
1打开AT32WorkBench新建AT32F403A工程
90b2bb5107a694aa0b6833843b1628c1

2配置系统时钟(如果使用默认内部HICK,跳过此步骤2)
2.1 打开外设CRM配置HEXT为时钟振荡器,如下图
bc6c7ff51089afeb87fa51775a515ab6

2.2 打开时钟配置
cd899563868016baff47b922ac08aa78

3配置普通组转换
3.1 配置ADC2普通组转换ADC CH1(PA1引脚),开启反复模式
0eaf8f06f41888512791339f137a9079

3.2 配置ADC1普通组转换ADC CH1(PA1引脚),开启反复模式、开启短位移模式
b681a4428a2f67077f748abf2310ea1c

4 配置ADC1 DMA
56fbc815adb96d8d6dca2a272afab16b

5配置串口打印
5.1配置USART1
83e59a6f89933ff14f9b88255e3a3d94

5.2 USART1引脚配置成PA9
ad7624480f22a1a4067d16af68045af9

5.3 开启串口打印
39cf463f6295ac098bb152b7ed13479f

6点击“生成代码”生成MDK5代码工程
5039268bef4e74d905d31086c71e74f8
7配置ADC普通通道转换相关应用代码
main.c的mian函数写法如下, 可以直接替换这部分代码

  1. int main(void)
  2. {
  3.   /* add user code begin 1 */
  4.   uint32_t buf[1];
  5.   /* add user code end 1 */

  6.   /* system clock config. */
  7.   wk_system_clock_config();

  8.   /* config periph clock. */
  9.   wk_periph_clock_config();

  10.   /* nvic config. */
  11.   wk_nvic_config();

  12.   /* timebase config. */
  13.   wk_timebase_init();

  14.   /* init dma1 channel1 */
  15.   wk_dma1_channel1_init();
  16.   /* config dma channel transfer parameter */
  17.   /* user need to modify define values DMAx_CHANNELy_XXX_BASE_ADDR and DMAx_CHANNELy_BUFFER_SIZE in at32xxx_wk_config.h */
  18.   wk_dma_channel_config(DMA1_CHANNEL1,
  19.                         (uint32_t)&ADC1->odt,
  20.                         (uint32_t)buf,
  21.                         1);
  22.   dma_channel_enable(DMA1_CHANNEL1, TRUE);

  23.   /* usart1 already supports printf. */
  24.   /* init usart1 function. */
  25.   wk_usart1_init();

  26.   /* init adc2 function. */
  27.   wk_adc2_init();

  28.   /* init adc1 function. */
  29.   wk_adc1_init();

  30.   /* add user code begin 2 */
  31.   adc_ordinary_software_trigger_enable(ADC1, TRUE);
  32.   
  33.   while(dma_flag_get(DMA1_FDT1_FLAG) == RESET);
  34.   /* add user code end 2 */

  35.   while(1)
  36.   {
  37.     /* add user code begin 3 */
  38.     printf("adc data  adc1:%d  adc2:%d\r\n", buf[0] & 0xFFFF, (buf[0] >> 16) & 0xFFFF);

  39.     wk_delay_ms(1000);
  40.     /* add user code end 3 */
  41.   }
  42. }
8在MDK5上编译,并下载代码到AT32F403A MCU 上

9复位运行AT32F403A MCU,用串口助手观看打印信息,2个ADC会在位移模式下一直转换数据,ADC1数据通过DMA存储到buf[0]低16位、ADC2数据通过DMA存储到buf[0]高16位,每1秒钟通过串口打印一次2个ADC的转换数据
b57457f7ff5066e67e08dae25c267ca4

AT32 WorkBench常用功能40--AT32F403A ADC普通组位移模式配置.zip

804.46 KB, 下载次数: 0

暗夜幽灵骑士 发表于 2025-4-17 19:24 | 显示全部楼层
这个教程很详细,对于需要高速采样的应用来说,位移模式确实是个不错的选择。
我是一颗胖蘑菇 发表于 2025-4-22 21:59 | 显示全部楼层
这个教程很详细,特别是对于需要提高ADC采样频率的应用来说,位移模式确实是个不错的选择。
WhisperingTrees 发表于 2025-7-15 17:29 | 显示全部楼层
感觉雅特力这个自研的IDE很好用的样子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

304

帖子

17

粉丝
快速回复 在线客服 返回列表 返回顶部