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

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

這是因?yàn)锳DC的配置中少了一個(gè)關(guān)鍵的函數(shù),那就是adc_tempsensor_vrefint_enable:

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

所以很多小伙伴想當(dāng)然的認(rèn)為內(nèi)部通道也可以給ADC1或ADC2來使用,但其實(shí)GD32的用戶手冊(cè)中已經(jīng)明確的指出內(nèi)部通道只能用于ADC0:

所以你用ADC1或ADC2去轉(zhuǎn)換,當(dāng)然是不行的啦。