| 本帖最后由 muyichuan2012 于 2025-9-28 09:57 编辑 
 
 AT32 WorkBench常用功能49--AT32F403A TMR比较事件触发ADC普通组转换配置
AT32 WorkBench官网使用教程链接: 本文主要介绍如何基于AT32 WorkBench配置TMR比较事件触发ADC普通组转换,转换多个通道,并通过DMA读取转换的数据
 转换时序
 
   硬件环境
 
 软件环境
 
 
 配置步骤
 1打开AT32WorkBench新建AT32F403A工程
 
   
 2配置系统时钟(如果使用默认内部HICK,跳过此步骤2)
 2.1 打开外设CRM配置HEXT为时钟振荡器,如下图
 
   
 2.2 打开时钟配置
 
   
 3配置普通组转换ADC CH1(PA1引脚)、ADC CH2(PA2引脚)、ADC CH3(PA3引脚)
 
   
 4 配置DMA通道
 
   
 5配置TMR1
 5.1开启TMR1_CH1
 
   
 5.2配置TMR1相关参数
 
   
 6配置串口打印
 6.1配置USART1
 
   
 6.2 USART1引脚配置成PA9
 
   
 6.3 开启串口打印
 
   
 7点击“生成代码”生成MDK5代码工程
 
   8配置ADC普通通道转换相关应用代码
 main.c的mian函数写法如下, 可以直接替换这部分代码
 
 
 9将ADC引脚接以下电压,int main(void)
{
  /* add user code begin 1 */
  uint16_t adc_odt[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)adc_odt, 
                        3);
  dma_channel_enable(DMA1_CHANNEL1, TRUE);
  /* usart1 already supports printf. */
  /* init usart1 function. */
  wk_usart1_init();
  /* init adc1 function. */
  wk_adc1_init();
  /* init tmr1 function. */
  wk_tmr1_init();
  /* add user code begin 2 */
  while(dma_flag_get(DMA1_FDT1_FLAG) == RESET);
  /* add user code end 2 */
  while(1)
  {
    /* add user code begin 3 */
    printf("adc data  pa1:%d  pa2:%d  pa3:%d\r\n", adc_odt[0], adc_odt[1], adc_odt[2]);
    wk_delay_ms(1000);
    /* add user code end 3 */
  }
}
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秒钟通过串口打印一次
 
   
 
 |