熟悉GD32的小伙伴都知道,ADC除了可以采集IO口上的电压外,还有两个内部通道,分别为内部温度传感器通道(ADC0_CH16)和Vrefint通道(ADC0_CH17),其中内部温度传感器通道可以采集芯片周围的温度(注意,这个温度通道适用于采集相对温度,如果用来测试绝对温度,是有一定的误差哦),Vrefint是一个稳定的带隙基准电压,典型值为1.2V。
有的小伙伴反馈使用这两个内部通道时,始终得不到转换数据,那么可能的原因有哪些呢?
原因一:
使用ADC的外部通道即IO电压时,将IO口配置为模拟模式,
然后配置ADC就可以正常工作了,而由于内部通道不需要配置IO口,所有有的小伙伴就直接将IO口的配置去除,但此时发现内部通道始终没有数据。
这是因为ADC的配置中少了一个关键的函数,那就是adc_tempsensor_vrefint_enable:
这个函数是用来打开ADC内部通道的,需要在ADC使能前调用,否则就没办法正常使用内部通道哦。
原因二:
我们知道同一个IO口可以给多个ADC单元来使用,比如PA0,从datasheet中可以看出可以用于ADC0、ADC1或ADC2的通道0
所以很多小伙伴想当然的认为内部通道也可以给ADC1或ADC2来使用,但其实GD32的用户手册中已经明确的指出内部通道只能用于ADC0:
所以你用ADC1或ADC2去转换,当然是不行的啦。


点赞(0)

评论列表 共有 0 条评论

暂无评论