STM32 Mbed系列-ADC參考電壓設置

stm32l4x5/4x6 Mbed系統ADC內外部參考電壓修改

ADC參考電壓

ADC採樣的參考電壓可以分爲內部參考電壓和外部參考電壓,參考電壓爲VREF+,
參考電壓可以是外部或者內部

mbed系統ADC驅動

Mbed系統封裝了一層驅動,使得開發簡單很多,拿來就用;好用,但確實不利於學習。mbed封裝驅動如DigitalOut/AnalogIn/UartSerial等,其中ADC採樣的驅動是AnalogIn。

好了,不廢話了,直接進入主題。
Mbed系統默認用的是外部參考電壓,如果硬件上是內部參考電壓的話,ADC採集值是不準的。

查看芯片手冊
Voltage reference buffer (VREFBUF)章節

在這裏插入圖片描述
寄存器bit位ENVR和HIZ控制參考電壓的選擇,0,1爲外部參考電壓,1,0爲內部參考電壓。所以我們找到這兩個寄存器

在這裏插入圖片描述
在analogin_device.c的analogin_init函數中增加參考電壓設置,切換爲內部參考電壓,HAL庫爲我們提供了VREFBUF registers相關寄存器的讀寫操作

void analogin_init(analogin_t *obj, PinName pin)
{
   __HAL_RCC_SYSCFG_CLK_ENABLE(); // 需要打開SYSCFG的操作時鐘
	HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE);
	HAL_SYSCFG_VREFBUF_VoltageScalingConfig(SYSCFG_VREFBUF_VOLTAGE_SCALE1);
	if (HAL_SYSCFG_EnableVREFBUF() != HAL_OK)
	{
		error("Set failed!\r\n");
	}
}

打開SYSCFG的操作時鐘

#define __HAL_RCC_SYSCFG_CLK_ENABLE()          do { \
                                                 __IO uint32_t tmpreg; \
                                                 SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN); \
                                                 /* Delay after an RCC peripheral clock enabling */ \
                                                 tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN); \
                                                 UNUSED(tmpreg); \
                                               } while(0)

在芯片手冊中找到RCC對應的APB2ENR就清楚了

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章