[AT32 WorkBench] AT32 WorkBench常用功能33--AT32F435ADC普通组转换多通道配置(软件切换通道,不用DMA)

[复制链接]
 楼主| ArterySW 发表于 2025-4-16 14:01 | 显示全部楼层 |阅读模式
本帖最后由 ArterySW 于 2025-4-16 14:03 编辑

AT32 WorkBench常用功能33--AT32F435ADC普通组转换多通道配置(软件切换通道,不用DMA)

ADC普通组转换多个通道(使用软件切换不同的通道)
本文主要介绍如何基于AT32 WorkBench配置ADC的普通组,转换多个通道,并读取转换的数据
转换时序
dfe82c6151fd5d97fa0403c5f82723f7
硬件环境
  • AT-START-F435

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


配置步骤
1打开AT32WorkBench新建AT32F435工程
0c8150565ba5b4bcd1509a5120a5c527

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

2.2 打开时钟配置
48870b777366ee9de6d4045b8c244712

3 配置ADC模式和分频
e703881a1453806e707229c634d271d5

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

5配置串口打印
5.1配置USART1
97fa0b5b2ce0328d89f4188b046d39f7

5.2 USART1引脚配置成PA9
dff9484a2046a44d0afc451898dfeab8

5.3 开启串口打印
9bfd95451d9d326040f6ade7df90d62a

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

7 配置ADC普通通道转换相关应用代码
main.c的mian函数写法如下, 可以直接替换这部分代码
  1. int main(void)
  2. {
  3.   /* add user code begin 1 */

  4.   /* add user code end 1 */

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

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

  9.   /* nvic config. */
  10.   wk_nvic_config();

  11.   /* timebase config. */
  12.   wk_timebase_init();

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

  16.   /* init adc-common function. */
  17.   wk_adc_common_init();

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

  20.   /* add user code begin 2 */

  21.   /* add user code end 2 */

  22.   while(1)
  23.   {
  24.     /* add user code begin 3 */
  25.    
  26.     adc_ordinary_channel_set(ADC1, ADC_CHANNEL_1, 1, ADC_SAMPLETIME_640_5);
  27.    
  28.     adc_ordinary_software_trigger_enable(ADC1, TRUE);
  29.    
  30.     while(adc_flag_get(ADC1, ADC_OCCE_FLAG) == RESET);
  31.    
  32.     printf("adc data pa1:%d\r\n", adc_ordinary_conversion_data_get(ADC1));
  33.    
  34.    
  35.     adc_ordinary_channel_set(ADC1, ADC_CHANNEL_2, 1, ADC_SAMPLETIME_640_5);
  36.    
  37.     adc_ordinary_software_trigger_enable(ADC1, TRUE);
  38.    
  39.     while(adc_flag_get(ADC1, ADC_OCCE_FLAG) == RESET);
  40.    
  41.     printf("adc data pa2:%d\r\n", adc_ordinary_conversion_data_get(ADC1));
  42.    
  43.    
  44.     adc_ordinary_channel_set(ADC1, ADC_CHANNEL_3, 1, ADC_SAMPLETIME_640_5);
  45.    
  46.     adc_ordinary_software_trigger_enable(ADC1, TRUE);
  47.    
  48.     while(adc_flag_get(ADC1, ADC_OCCE_FLAG) == RESET);
  49.    
  50.     printf("adc data pa3:%d\r\n", adc_ordinary_conversion_data_get(ADC1));
  51.    
  52.     wk_delay_ms(1000);
  53.     /* add user code end 3 */
  54.   }
  55. }

8将ADC引脚接以下电压,

ADC CH1(PA1引脚)接3.3V
ADC CH2(PA2引脚)接1.6V
ADC CH3(PA3引脚)接0V

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

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

AT32 WorkBench常用功能33--AT32F435 ADC普通组转换多通道配置(软件切换通道,不用DMA.zip

624.96 KB, 下载次数: 2

您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

304

帖子

17

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