熟悉GD32的小伙伴都知道,ADC除了可以采集IO口上的電壓外,還有兩個內部通道,分別為內部溫度傳感器通道(ADC0_CH16)和Vrefint通道(ADC0_CH17),其中內部溫度傳感器通道可以采集芯片周圍的溫度(注意,這個溫度通道適用于采集相對溫度,如果用來測試絕對溫度,是有一定的誤差哦),Vrefint是一個穩(wěn)定的帶隙基準電壓,典型值為1.2V。
有的小伙伴反饋使用這兩個內部通道時,始終得不到轉換數據,那么可能的原因有哪些呢?
原因一:
使用ADC的外部通道即IO電壓時,將IO口配置為模擬模式,

然后配置ADC就可以正常工作了,而由于內部通道不需要配置IO口,所有有的小伙伴就直接將IO口的配置去除,但此時發(fā)現內部通道始終沒有數據。

這是因為ADC的配置中少了一個關鍵的函數,那就是adc_tempsensor_vrefint_enable:

這個函數是用來打開ADC內部通道的,需要在ADC使能前調用,否則就沒辦法正常使用內部通道哦。
原因二:
我們知道同一個IO口可以給多個ADC單元來使用,比如PA0,從datasheet中可以看出可以用于ADC0、ADC1或ADC2的通道0

所以很多小伙伴想當然的認為內部通道也可以給ADC1或ADC2來使用,但其實GD32的用戶手冊中已經明確的指出內部通道只能用于ADC0:

所以你用ADC1或ADC2去轉換,當然是不行的啦。