[AT32 WorkBench] AT32 WorkBench常用功能39--AT32F435ADC电压监测器配置

[复制链接]
 楼主| ArterySW 发表于 2025-4-16 14:48 | 显示全部楼层 |阅读模式
AT32 WorkBench常用功能39--AT32F435ADC电压监测器配置

本文主要介绍如何基于AT32 WorkBench配置ADC的电压监测器,通过电压监测器,可以实时监测通道电压有没有超出设定的阈值范围,当AD值超过阈值电压时,VMOR标志会被硬件置1,如果使能了VMORIEN,同时会产生中断

本次例程使用电压监测器监测普通通道
转换时序
86e2dbe8fca0da6098f382f5c5e44a0f
硬件环境
  • AT-START-F435

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


配置步骤
1打开AT32 WorkBench新建AT32F435工程
9520b1ea42ea8d6d9e8cacf5e1b4d176

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

2.2 打开时钟配置
dfad69d9be7c164c74b8153f3b3f90ce

3 配置ADC模式和分频
8926f3d51416b50a210992350a63a699

4配置普通组转换ADC CH1(PA1引脚),开启电压监测,监测所有普通组通道,低边界为1000,高边界为3000,只要ADC值超过这个范围,就会触发电压监测中断
0c53056b0d94a5671253fdeac39df7f7

5 配置ADC中断
8c048dbe8f556fd2ade9c159b9280860

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

6.2 USART1引脚配置成PA9
59bb6c7c94541c9ec8d767864b9bd011

6.3 开启串口打印
5e28a71455d725d43bc3e314e16c4e46

7点击“生成代码”生成MDK5代码工程
6cf5f7f7b2fb17a43e5ed68e2a529b89
8配置ADC普通通道转换相关应用代码
8.1 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.   adc_interrupt_enable(ADC1, ADC_VMOR_INT, TRUE);
  22.   /* add user code end 2 */

  23.   while(1)
  24.   {
  25.     /* add user code begin 3 */
  26.     adc_ordinary_software_trigger_enable(ADC1, TRUE);
  27.    
  28.     while(adc_flag_get(ADC1, ADC_OCCE_FLAG) == RESET);
  29.    
  30.     printf("adc data:%d\r\n", adc_ordinary_conversion_data_get(ADC1));
  31.    
  32.     wk_delay_ms(1000);

  33.     /* add user code end 3 */
  34.   }
  35. }

8.2 at32f435_437_int.c的ADC1_2_3_IRQHandler函数写法如下, 可以直接替换这部分代码
  1. void ADC1_2_3_IRQHandler(void)
  2. {
  3.   /* add user code begin ADC1_2_3_IRQ 0 */
  4.   if(adc_flag_get(ADC1, ADC_VMOR_FLAG) != RESET)
  5.   {
  6.     adc_flag_clear(ADC1, ADC_VMOR_FLAG);
  7.    
  8.     printf("VMOR FLAG = 1\r\n");
  9.   }
  10.   /* add user code end ADC1_2_3_IRQ 0 */
  11.   /* add user code begin ADC1_2_3_IRQ 1 */

  12.   /* add user code end ADC1_2_3_IRQ 1 */
  13. }


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

10复位运行AT32F435MCU,用串口助手观看打印信息,ADC数据每1秒钟转换一次,修改 PA1引脚电压为3.3V、1.6V、0V,即可看到在3.3V和0V下会产生电压监测中断,在1.6V不会产生电压监测中断
104cda222ab80ec942a326f27fbd01aa

AT32 WorkBench常用功能39--AT32F435 ADC电压监测器配置.zip

664.73 KB, 下载次数: 0

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

本版积分规则

198

主题

304

帖子

17

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