[开发板与模块] 【HT32F52352 Starter Kit测评】+ADC的使用

[复制链接]
 楼主| jinglixixi 发表于 2022-4-22 00:13 | 显示全部楼层 |阅读模式
本帖最后由 eltonchang2001 于 2022-11-9 11:30 编辑

HT32F52352芯片内部配有一个 12-bit 多通道 A/D 转换器,并提供了 14 个通道,其中包括 12 个提供模拟信号的外部通道和2 个内部通道。另外,A/D 转换器有3种工作模式,即单次转换、连续转换及非连续转换模式。
在外部模拟信号连接PA6的情况下,若采用连续转换模式,则输出的结果如图1至图3所示。
1.jpg
图1 接入3.3V
2.jpg
图2 悬空状态
3.jpg
图3 接地状态

测试的主程序为:
  1. #include "ht32.h"
  2. #include "ht32_board.h"
  3. #include "ht32_board_config.h"
  4. void ADC_Configuration(void);
  5. volatile bool gADC_SingleEndOfConversion;
  6. vu32 gPotentiometerLevel;
  7. int main(void)
  8. {
  9.     RETARGET_Configuration();
  10.     ADC_Configuration();
  11.     ADC_Cmd(HTCFG_ADC_PORT, ENABLE);
  12.     ADC_SoftwareStartConvCmd(HTCFG_ADC_PORT, ENABLE);
  13.     while (1)
  14.     {
  15.         if (gADC_SingleEndOfConversion)
  16.         {
  17.             printf("\rPotentiometer level is %04d", (int)gPotentiometerLevel);
  18. __Delay(1000000);
  19.         }
  20.     }
  21. }

所添加的ADC配置函数为:
  1. void ADC_Configuration(void)
  2. {
  3.   {
  4.     CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
  5.     CKCUClock.Bit.AFIO = 1;
  6.     CKCUClock.Bit.HTCFG_ADC_IPN = 1;
  7.     CKCU_PeripClockConfig(CKCUClock, ENABLE);
  8.   }
  9. AFIO_GPxConfig(HTCFG_VR_GPIO_ID, HTCFG_VR_AFIO_PIN, HTCFG_ADC_AFIO_MODE);
  10.   {
  11.     CKCU_SetADCnPrescaler(HTCFG_ADC_CKCU_ADCPRE, CKCU_ADCPRE_DIV64);
  12.     ADC_RegularGroupConfig(HTCFG_ADC_PORT, CONTINUOUS_MODE, 1, 0);
  13.     #if (LIBCFG_ADC_SAMPLE_TIME_BY_CH)
  14.     // The sampling time is set by the last parameter of the function "ADC_RegularChannelConfig()".
  15.     #else
  16.     ADC_SamplingTimeConfig(HTCFG_ADC_PORT, 0);
  17.     #endif
  18.     ADC_RegularChannelConfig(HTCFG_ADC_PORT, HTCFG_VR_ADC_CH, 0, 0);
  19.     ADC_RegularTrigConfig(HTCFG_ADC_PORT, ADC_TRIG_SOFTWARE);
  20.   }
  21.   ADC_IntConfig(HTCFG_ADC_PORT, ADC_INT_SINGLE_EOC, ENABLE);
  22.   NVIC_EnableIRQ(HTCFG_ADC_IRQn);
  23. }

进行ADC中断处理的函数为:
  1. void HTCFG_ADC_IRQHandler(void)
  2. {
  3.   extern vu32 gPotentiometerLevel;
  4.   extern volatile bool gADC_SingleEndOfConversion;
  5.   ADC_ClearIntPendingBit(HTCFG_ADC_PORT, ADC_FLAG_SINGLE_EOC);
  6.   gPotentiometerLevel = (HTCFG_ADC_PORT->DR[0] & 0x0FFF);
  7.   gADC_SingleEndOfConversion = TRUE;
  8. }

此外,在ht32_board_config.h文件中需添加如下内容:
  1. #if (LIBCFG_NO_ADC)
  2.   #error "This example code does not apply to the chip you selected."
  3. #endif
  4.   #define HTCFG_ADC_IPN          ADC0
  5. #if defined(USE_HT32F52352_SK)
  6.   #define _HTCFG_VR_GPIOX        A
  7.   #define _HTCFG_VR_GPION        6
  8.   #define _HTCFG_VR_ADC_CHN     6
  9. #endif
  10. #define HTCFG_VR_GPIO_ID         STRCAT2(GPIO_P,         _HTCFG_VR_GPIOX)
  11. #define HTCFG_VR_AFIO_PIN        STRCAT2(AFIO_PIN_,      _HTCFG_VR_GPION)
  12. #define HTCFG_VR_ADC_CH         STRCAT2(ADC_CH_,        _HTCFG_VR_ADC_CHN)
  13. #define HTCFG_ADC_PORT          STRCAT2(HT_,            HTCFG_ADC_IPN)
  14. #define HTCFG_ADC_AFIO_MODE    STRCAT2(AFIO_FUN_,      HTCFG_ADC_IPN)
  15. #define HTCFG_ADC_CKCU_ADCPRE  STRCAT2(CKCU_ADCPRE_,   HTCFG_ADC_IPN)
  16. #define HTCFG_ADC_IRQn          STRCAT2(HTCFG_ADC_IPN, _IRQn)



dzfansman 发表于 2022-6-20 15:49 | 显示全部楼层
16通道的ADC转换吗
wwppd 发表于 2022-6-20 17:12 | 显示全部楼层
这个是多少位的ADC?
xietingfeng 发表于 2022-9-3 19:20 | 显示全部楼层
HT32F52352不同通道之间的有影响吗
 楼主| jinglixixi 发表于 2022-9-3 20:45 | 显示全部楼层
xietingfeng 发表于 2022-9-3 19:20
HT32F52352不同通道之间的有影响吗

在非悬空状态下,应该没有什么影响。
suzhanhua 发表于 2022-9-5 13:36 | 显示全部楼层
可以dma直接转换吗?   
 楼主| jinglixixi 发表于 2022-9-5 15:53 | 显示全部楼层
wwppd 发表于 2022-6-20 17:12
这个是多少位的ADC?

12位
macpherson 发表于 2022-9-7 16:47 | 显示全部楼层
HT32F52352 最大转换速度是多少
hudi008 发表于 2022-11-3 21:17 | 显示全部楼层
可以使用DMA+ADC实现转换吗?
 楼主| jinglixixi 发表于 2022-11-3 21:36 | 显示全部楼层
hudi008 发表于 2022-11-3 21:17
可以使用DMA+ADC实现转换吗?

好像例程中有
pixhw 发表于 2022-11-3 21:50 | 显示全部楼层
这个多通道之间是如何切换的?              
 楼主| jinglixixi 发表于 2022-11-3 22:00 | 显示全部楼层
pixhw 发表于 2022-11-3 21:50
这个多通道之间是如何切换的?

控制内部的寄存器
pl202 发表于 2022-11-5 09:50 | 显示全部楼层
HT32F52352 的ADC不同引脚之间存在干扰吗
cemaj 发表于 2022-11-5 10:18 | 显示全部楼层
连续转换方式是经常使用的,这个HT32F52352 转换时间最短是多少?
bartonalfred 发表于 2022-12-2 21:21 | 显示全部楼层
定时器触发ADC怎么配置               
iyoum 发表于 2022-12-2 21:30 | 显示全部楼层
如何用HT32F52352 的ADC采集0到120V的直流电压?   
 楼主| jinglixixi 发表于 2022-12-3 00:32 | 显示全部楼层
iyoum 发表于 2022-12-2 21:30
如何用HT32F52352 的ADC采集0到120V的直流电压?

成比例的分压
tifmill 发表于 2022-12-3 12:53 | 显示全部楼层
ADC的通道与引脚是如何对应的  
primojones 发表于 2022-12-3 14:01 | 显示全部楼层
HT32F52352  adc用什么校准?  
 楼主| jinglixixi 发表于 2022-12-3 23:09 | 显示全部楼层
tifmill 发表于 2022-12-3 12:53
ADC的通道与引脚是如何对应的

查技术手册
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

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