[AT32 WorkBench] AT32 WorkBench常用功能44--AT32F403A2 ADC普通组同时模式配置

[复制链接]
1700|1
 楼主| ArterySW 发表于 2025-4-16 17:13 | 显示全部楼层 |阅读模式
AT32 WorkBench常用功能44--AT32F403A2 ADC普通组同时模式配置
本文主要介绍如何基于AT32 WorkBench配置ADC的普通组同时模式
本次例程采用2 ADC普通同时模式,在此模式下,当触发事件来了之后,2个ADC将会同时转换,当每个通道转换完成了之后,DMA将数据搬到内存,需要注意的是在此模式下,ADC通道采样时间、个数需要配成一致
转换时序
dda0f10d10a0fe4d3ec722b32f470f29
硬件环境
  • AT-START-F403A

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


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

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

2.2 打开时钟配置
0d7d0c2e3af0ee24961b4eacdd389eac

3配置普通组转换
3.1配置ADC2,通道转换顺序为ADC CH2、ADC CH3、ADC CH1
6c208c2543fe48c3ffcf24182436de62

3.2配置ADC1,通道转换顺序为ADC CH1、ADC CH2、ADC CH3
37ec1af2578c88235099fee11c305945

4 配置DMA通道
8f679ed6176a0b6605ae9058c14a6f66

5配置串口打印
5.1配置USART1
bb491bfc85ec1021a085219db5c9f1c0

5.2 USART1引脚配置成PA9
cc73553c160f8881a4578da8b27cef0f

5.3 开启串口打印
00119aaca7e3516a6c8968e58eac632b

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

  1. int main(void)
  2. {
  3.   /* add user code begin 1 */
  4.   uint32_t buf[3];
  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.                         3);
  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.   /* add user code end 2 */

  32.   while(1)
  33.   {
  34.     /* add user code begin 3 */
  35.     adc_ordinary_software_trigger_enable(ADC1, TRUE);
  36.    
  37.     while(dma_flag_get(DMA1_FDT1_FLAG) == RESET);
  38.     dma_flag_clear(DMA1_FDT1_FLAG);
  39.    
  40.     printf("adc data  ADC1 ch1:%4d  ch2:%4d  ch3:%4d\r\n",  buf[0] & 0xFFFF, buf[1] & 0xFFFF, buf[2] & 0xFFFF);
  41.     printf("          ADC2 ch1:%4d  ch2:%4d  ch3:%4d\r\n", (buf[0] >> 16) & 0xFFFF, (buf[1] >> 16) & 0xFFFF, (buf[2] >> 16) & 0xFFFF);

  42.     wk_delay_ms(1000);
  43.     /* add user code end 3 */
  44.   }
  45. }

8将ADC引脚接以下电压,
ADC CH1(PA1引脚)接3.3V
ADC CH2(PA2引脚)接1.6V
ADC CH3(PA3引脚)接0V

9在MDK5上编译,并下载代码到AT32F403A MCU 上

10复位运行AT32F403A MCU,用串口助手观看打印信息,ADC数据每1秒钟转换一次
dceb215ab93c62c0247708bfc8e42c79

AT32 WorkBench常用功能44--AT32F403A 2 ADC普通组同时模式配置.zip

771.16 KB, 下载次数: 0

ShimmeringDawn 发表于 2025-6-20 13:31 | 显示全部楼层
AT32F403A2,AT32F403A他们的ADC相关操作是不是大同小异?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

304

帖子

17

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