[AT32 WorkBench] AT32 WorkBench常用功能50--AT32F435 TMR比较事件触发ADC普通组转换配置

[复制链接]
 楼主| 发表于 2025-4-16 17:31 | 显示全部楼层 |阅读模式
AT32 WorkBench常用功能50--AT32F435 TMR比较事件触发ADC普通组转换配置

本文主要介绍如何基于AT32 WorkBench配置TMR比较事件触发ADC普通组转换,转换多个通道,并通过DMA读取转换的数据
转换时序
45a31745f9e69fccfa6d5789a1741026
硬件环境
  • AT-START-F435

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


配置步骤
1打开AT32 WorkBench新建AT32F435工程
0d149bdfd9bd4200d93ada2653eb511a

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

2.2 打开时钟配置
01cf43050b4513b1c250155b84ceca62

3 配置ADC模式和分频
ca1c401ebeaf351a00f0706e290aefa4

4配置普通组转换ADC CH1(PA1引脚)、ADC CH2(PA2引脚)、ADC CH3(PA3引脚)
ff9ad58acc56dc2e42fabed75c54f91d

5 配置DMA通道
4b1e98053dfd946347341119d3d1fe15

6 配置TMR1
6.1开启TMR1_CH1
233ef7879b9c403ab5d6676b5cbbcea0

6.2配置TMR1相关参数
8314e053ca7458ecfff4397809c22466

7配置串口打印
7.1配置USART1
3c7f548f239cafe5a5db3f6676a115c7

7.2 USART1引脚配置成PA9
49344e46cc16c5609ba7b0c95c4b1a57

7.3 配置串口打印
4fe6f9e19ac1fbbb8ede16d7353944a7

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

  1. int main(void)
  2. {
  3.   /* add user code begin 1 */
  4.   uint16_t adc_odt[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)adc_odt,
  21.                         3);
  22.   dma_channel_enable(DMA1_CHANNEL1, TRUE);

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

  26.   /* init adc-common function. */
  27.   wk_adc_common_init();

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

  30.   /* init tmr1 function. */
  31.   wk_tmr1_init();

  32.   /* add user code begin 2 */
  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  pa1:%d  pa2:%d  pa3:%d\r\n", adc_odt[0], adc_odt[1], adc_odt[2]);

  39.     wk_delay_ms(1000);
  40.     /* add user code end 3 */
  41.   }
  42. }

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

11在MDK5上编译,并下载代码到AT32F435 MCU 上

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

AT32 WorkBench常用功能50--AT32F435 TMR比较事件触发ADC普通组转换配置.zip

877.61 KB, 下载次数: 2

发表于 2025-6-19 16:21 | 显示全部楼层
例程收下了,之后开发过程中肯定会用到的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

304

帖子

17

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