[AT32 WorkBench] AT32 WorkBench常用功能45--AT32F403A3 ADC普通组同时采样配置

[复制链接]
 楼主| 发表于 2025-4-16 17:17 | 显示全部楼层 |阅读模式
AT32 WorkBench常用功能45--AT32F403A3 ADC普通组同时采样配置

本文主要介绍如何基于AT32 WorkBench配置3ADC普通组同时采样
在AT32F403A上共有3个ADC,但是只有ADC1、ADC2有组合模式可以选择,ADC3运行在独立模式下,要实现3个ADC同时采样,可以将ADC1、ADC2配置普通组同时模式,ADC3配置在独立模式,ADC1和ADC3触发事件选择同一个事件,例如在此例程中,我们选用TMR1_CH1事件触发ADC1和ADC3
在此模式下,当触发事件来了之后,3个ADC将会同时转换,当每个通道转换完成了之后,DMA_CH1将ADC1、ADC2数据搬到内存,DMA_CH2将ADC3数据搬到内存(DMA通道可以自由选择)
需要注意的是在此模式下,ADC通道采样时间、个数需要配成一致
转换时序
e2ee58b96c16e4eb880b65079497ce6f
硬件环境
  • AT-START-F403A

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


配置步骤
1打开AT32 WorkBench新建AT32F403A工程
a736844a90ba4706fa86a8979d073234

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

2.2 打开时钟配置
e3fab2d0e77b157d0af987d34816e80c

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

3.2配置ADC1,通道转换顺序为ADC CH1、ADC CH2、ADC CH3,触发源为TMR_CH1
9597dcc9e610821db14e75654adc192e

3.3配置ADC3,通道转换顺序为ADC CH3、ADC CH1、ADC CH2,触发源为TMR_CH1
f9f0adeb83f1afc8154a270945b04d11

4 配置DMA通道
4.1配置ADC1、ADC2 DMA通道,本例程选择DMA1_CH1
4b54b13fefaeed94073e6c1692283e20

4.3配置ADC3 DMA通道,本例程选择DMA1_CH2
19c50304d36a9a279c1561eb1f11fbfa

5 配置TMR
5.1开启TMR1_CH1
321be010cc7b7a32a881263d3861e7f1

5.2配置TMR1相关参数
d9ea043bb97b5bf026c34d51736a9f18

6配置串口打印
6.1配置USART1
feeed5f30eb170d3b26b5ca7b08789a2

6.2 USART1引脚配置成PA9
01e61c04b1b128ef47a8989a39fe119e

6.3 开启串口打印
1a812424b2b94d6802093cf778237cde

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

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

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

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

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

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

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

  24.   /* init dma1 channel2 */
  25.   wk_dma1_channel2_init();
  26.   /* config dma channel transfer parameter */
  27.   /* user need to modify define values DMAx_CHANNELy_XXX_BASE_ADDR and DMAx_CHANNELy_BUFFER_SIZE in at32xxx_wk_config.h */
  28.   wk_dma_channel_config(DMA1_CHANNEL2,
  29.                         (uint32_t)&ADC3->odt,
  30.                         (uint32_t)buf2,
  31.                         3);
  32.   dma_channel_enable(DMA1_CHANNEL2, TRUE);

  33.   /* usart1 already supports printf. */
  34.   /* init usart1 function. */
  35.   wk_usart1_init();

  36.   /* init adc2 function. */
  37.   wk_adc2_init();

  38.   /* init adc1 function. */
  39.   wk_adc1_init();

  40.   /* init adc3 function. */
  41.   wk_adc3_init();

  42.   /* init tmr1 function. */
  43.   wk_tmr1_init();

  44.   /* add user code begin 2 */
  45.   while(dma_flag_get(DMA1_FDT1_FLAG) == RESET);
  46.   /* add user code end 2 */

  47.   while(1)
  48.   {
  49.     /* add user code begin 3 */
  50.     printf("adc data  ADC1 ch1:%4d  ch2:%4d  ch3:%4d\r\n",  buf[0] & 0xFFFF, buf[1] & 0xFFFF, buf[2] & 0xFFFF);
  51.     printf("          ADC2 ch1:%4d  ch2:%4d  ch3:%4d\r\n", (buf[0] >> 16) & 0xFFFF, (buf[1] >> 16) & 0xFFFF, (buf[2] >> 16) & 0xFFFF);
  52.     printf("          ADC3 ch1:%4d  ch2:%4d  ch3:%4d\r\n",  buf2[0], buf2[1], buf2[2]);
  53.    
  54.     wk_delay_ms(1000);

  55.     /* add user code end 3 */
  56.   }
  57. }
9将ADC引脚接以下电压,
ADC CH1(PA1引脚)接3.3V
ADC CH2(PA2引脚)接1.6V
ADC CH3(PA3引脚)接0V

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

11复位运行AT32F403A MCU,用串口助手观看打印信息,ADC数据会每10ms通过TMR_CH1比较事件触发转换一次,AD值每1秒钟通过串口打印一次
4edd54f6f45a48e31426dbe45a921a2f

AT32 WorkBench常用功能45--AT32F403A 3 ADC普通组同时采样配置 .zip

1.09 MB, 下载次数: 1

发表于 2025-6-20 11:37 | 显示全部楼层
分享的很详细,先mark一下ADC普通组同时采样配置后续肯定会用到的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

304

帖子

17

粉丝
快速回复 返回顶部 返回列表