[AT32 WorkBench] AT32 WorkBench常用功能38--AT32F403A ADC电压监测器配置

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

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

本次例程使用电压监测器监测普通通道

转换时序
b14cbf31d0d990e5702eae7052336373
硬件环境
  • AT-START-F403A

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


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

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

2.2 打开时钟配置
513631d2f8028f3da254755d0fb69539

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

4 配置ADC中断
a3b8d3afb44704e0d270ce75c7890bc1

5配置串口打印
5.1配置USART1
09ee20c14d027cf702b8db5e76b66319

5.2 USART1引脚配置成PA9
03365406a9988f1f1f35deb28c3fe108

5.3 开启串口打印
b2ad5c12ab28a64b4e486c9bbe5b8c74

6点击“生成代码”生成MDK5代码工程
429776874e5ca96d4a6eb9530812932e
7配置ADC普通通道转换相关应用代码
7.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 adc1 function. */
  17.   wk_adc1_init();

  18.   /* add user code begin 2 */
  19.   adc_interrupt_enable(ADC1, ADC_VMOR_INT, TRUE);
  20.   /* add user code end 2 */

  21.   while(1)
  22.   {
  23.     /* add user code begin 3 */
  24.     adc_ordinary_software_trigger_enable(ADC1, TRUE);
  25.    
  26.     while(adc_flag_get(ADC1, ADC_CCE_FLAG) == RESET);
  27.    
  28.     printf("adc data:%d\r\n", adc_ordinary_conversion_data_get(ADC1));
  29.    
  30.     wk_delay_ms(1000);
  31.     /* add user code end 3 */
  32.   }
  33. }
7.2 at32f403a_407_int.c的ADC1_2_IRQHandler函数写法如下, 可以直接替换这部分代码
  1. void ADC1_2_IRQHandler(void)
  2. {
  3.   /* add user code begin ADC1_2_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_IRQ 0 */
  11.   /* add user code begin ADC1_2_IRQ 1 */

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

8在MDK5上编译,并下载代码到AT32F403A MCU 上

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

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

594.9 KB, 下载次数: 3

ShimmeringDawn 发表于 2025-6-20 13:05 | 显示全部楼层
问一下:开启电压监开启电压监测,监测所有普通组通道,是开启的所有通道还是不管开不开启?
HarmonySage 发表于 2025-7-11 23:43 | 显示全部楼层
ShimmeringDawn 发表于 2025-6-20 13:05
问一下:开启电压监开启电压监测,监测所有普通组通道,是开启的所有通道还是不管开不开启? ...

肯定是要开启你要检测的通道吧,不开启应该是不科学的
快乐制造机 发表于 2025-7-14 10:18 | 显示全部楼层
这个教程非常实用,对于需要实时监测电压的应用来说,ADC电压监测器是一个不错的选择。按照步骤操作,应该能够顺利实现电压监测功能。
幻想收藏家 发表于 2025-7-14 19:31 | 显示全部楼层
这个教程很详细,对于初学者来说非常友好。按照步骤来,一步步配置ADC电压监测器,很清晰。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

304

帖子

17

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