上一章我們講了STM32CubeMx串口的配置,這一張我們來講一下ADC的配置。有些人以前知道ADC就是模數轉換器,具體的沒有去深究,那麼問題來啦,什麼是模數轉換器?他的精度是多少?怎麼計算?
下面我來給大家科普一下什麼叫做模數轉換器。顧名思義,模數轉換器就是把模擬信號轉換爲數字信號的工具。我們要想獲得電壓值,只能將模擬量轉換爲數字量計算。例如我們的例程使用的是STM32F103C8T6,該芯片內置的是一個12位的ADC,什麼是12位呢?12位意思就是採樣分辨率爲2^12 = 4096。ADC採集的電壓範圍是0~3.3V。每一份就是3.3V/4096的電壓值。所以我們後面採集到的電壓值是數字量,其中還牽涉補償,這裏就不細說了。
一、準備工作
1、使用第一章配置好的文件,這裏不多說了。大家也可以用自己配置好的工程文件。
2、準備一塊最小系統核心板。(杜邦線若干)
3、選取自己需要的ADC通道和ADC通道對應的IO口。
二、具體操作
1、在Pinout菜單欄下,ADC的選擇與配置。配置如圖
在外設欄裏選擇ADC1,IN0打鉤。右邊可視圖就看到ADC_IN0變成綠色表示IO配置成功。
2、在Configuration菜單欄下,點擊Analog下的ADC1彈出配置界面,配置如圖
這裏因爲ADC是查詢方式所以,基本配置都是默認的。
3、生成工程
點擊Project菜單欄選擇Generate code,工程生成完畢。
4、打開MDK工程,工程裏面配置
1)首先聲明一個變量用來存儲ADC採集回來的值。
unsigned int AD_Value;
2)在while循環裏面增加幾句話來不斷的獲取當前IO口的值。
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 50);
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
AD_Value = HAL_ADC_GetValue(&hadc1);
}
HAL_Delay(1000);
}
5、調試測試
1)編譯通過後仿真
①點擊運行。
②在watch窗口觀看變量AD_Value的值。
③這裏AD_Value值有三種情況,當PA0口接地時AD_Value爲0、當PA0口接3.3.VCC時AD_Value本來應該是4095但是這裏有了一些偏差可能因素有很多(轉換時間、ADC參考電源、或輸入電源本身),還有當ADC口浮空的情況下,ADC的值是不斷跳變的,所以當看到你的AD_Value值在跳變不用擔心,先接一個固定的電源試試,切記一定是3.3.V以內的直流電源,不然直接會燒芯片!
如有什麼不懂聯繫加QQ羣:1063618791歡迎大家學習交流!
QQ:1320300083