这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [AT32WorkBench]AT32WorkBench常用功能44--AT32

共1条 1/1 1 跳转至

[AT32WorkBench]AT32WorkBench常用功能44--AT32F403A2ADC普通组同时模式配置

菜鸟
2025-04-21 15:02:20     打赏
AT32 WorkBench常用功能44--AT32F403A2 ADC普通组同时模式配置本文主要介绍如何基于AT32 WorkBench配置ADC的普通组同时模式
本次例程采用2 ADC普通同时模式,在此模式下,当触发事件来了之后,2个ADC将会同时转换,当每个通道转换完成了之后,DMA将数据搬到内存,需要注意的是在此模式下,ADC通道采样时间、个数需要配成一致
转换时序

硬件环境
AT-START-F403A

软件环境
AT32 WorkbenchMDK5串口助手


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


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


2.2 打开时钟配置


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


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


4 配置DMA通道


5配置串口打印
5.1配置USART1


5.2 USART1引脚配置成PA9


5.3 开启串口打印


6点击“生成代码”生成MDK5代码工程

7配置ADC普通通道转换相关应用代码
main.c的mian函数写法如下, 可以直接替换这部分代码

复制
int main(void)
{
  /* add user code begin 1 */
  uint32_t buf[3];
  /* add user code end 1 */

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

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

  /* nvic config. */
  wk_nvic_config();

  /* timebase config. */
  wk_timebase_init();

  /* init dma1 channel1 */
  wk_dma1_channel1_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_CHANNEL1,
                        (uint32_t)&ADC1->odt,
                        (uint32_t)buf,
                        3);
  dma_channel_enable(DMA1_CHANNEL1, TRUE);

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

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

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

  /* add user code begin 2 */

  /* add user code end 2 */

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

    wk_delay_ms(1000);
    /* add user code end 3 */
  }
}

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秒钟转换一次






关键词: AT32MCU    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]