日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32-独立模式单通道ADC采集

發布時間:2023/12/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32-独立模式单通道ADC采集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1. ADC介紹

2. 硬件設計

?3. 軟件設計

3.1. CubeMX設置

?3.2. KEIL開發

4. 實驗現象


1. ADC介紹

12位ADC是一種逐次逼近型模擬數字轉換器。它有多達18個通道,可測量16個外部和2個內部信號源。各通道的A/D轉換可以單次、連續、掃描或間斷模式執行。ADC的結果可以左對齊或右對齊方式存儲在16位數據寄存器中。 模擬看門狗特性允許應用程序檢測輸入電壓是否超出用戶定義的高/低閥值。?

有16個多路通道。可以把轉換組織成兩組:規則組和注入組。在任意多個通道上以任意順序進行的一系列轉換構成成組轉換。例如,可以如下順序完成轉換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 ● 規則組由多達16個轉換組成。規則通道和它們的轉換順序在ADC_SQRx寄存器中選擇。規則組中轉換的總數應寫入ADC_SQR1寄存器的L[3:0]位中。 ● 注入組由多達4個轉換組成。注入通道和它們的轉換順序在ADC_JSQR寄存器中選擇。注入組里的轉換總數目應寫入ADC_JSQR寄存器的L[1:0]位中。 如果ADC_SQRx或ADC_JSQR寄存器在轉換期間被更改,當前的轉換被清除,一個新的啟動脈沖將發送到ADC以轉換新選擇的組。 溫度傳感器/ VREFINT內部通道溫度傳感器和通道ADC1_IN16相連接,內部參照電壓VREFINT和ADC1_IN17相連接。可以按注入或規則通道對這兩個內部通道進行轉換。 注意: 溫度傳感器和VREFINT只能出現在主ADC1中。

ADC使用若干個ADC_CLK周期對輸入電壓采樣,采樣周期數目可以通過ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每個通道可以分別用不同的時間采樣。 總轉換時間如下計算: TCONV = 采樣時間+ 12.5個周期

例如: 當ADCCLK=14MHz,采樣時間為1.5周期 TCONV = 1.5 + 12.5 = 14周期 = 1μs

單次轉換模式下,ADC只執行一次轉換。該模式既可通過設置ADC_CR2寄存器的ADON位(只適用于規則通道)啟動也可通過外部觸發啟動(適用于規則通道或注入通道),這時CONT位為0。?

在連續轉換模式中,當前面ADC轉換一結束馬上就啟動另一次轉換。此模式可通過外部觸發啟動或通過設置ADC_CR2寄存器上的ADON位啟動,此時CONT位是1。

2. 硬件設計

ADC1的通道11連接滑動變阻:

?

?3. 軟件設計

3.1. CubeMX設置

選擇ADC通道IN11,獨立模式,連續轉換,采樣周期41.5,開啟NVIC:

8分頻,即9MHz的時鐘,TCONV = 41.5 + 12.5 = 54周期*(1/9)?= 6μs,點擊生成代碼:

?3.2. KEIL開發

?ADC中斷回調函數接收轉換后的值:

//adc.c /* USER CODE BEGIN 0 */ uint32_t convValve; /* USER CODE END 0 *//* USER CODE BEGIN 1 */ /*** @brief Conversion complete callback in non blocking mode * @param hadc: ADC handle* @retval None*/ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {convValve=HAL_ADC_GetValue(hadc);} /* USER CODE END 1 */

main函數接收并打印電壓采樣值:

//main.c/* USER CODE BEGIN 2 */printf("ADC轉換實驗:\n");HAL_ADCEx_Calibration_Start(&hadc1);HAL_ADC_Start_IT(&hadc1);/* USER CODE END 2 *//* USER CODE BEGIN WHILE */while (1){static float convValveVoltage;convValveVoltage=(float)(convValve*(3.3/4096));printf("ADC值為:%d\n",convValve);printf("ADC轉換為電壓后的值為:%f\n\n",convValveVoltage);HAL_Delay(2000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

4. 實驗現象

調動電壓值,可以看到電壓值在0~3.3V之間變化:

?

總結

以上是生活随笔為你收集整理的STM32-独立模式单通道ADC采集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。