HK32F103x/C/D/E是深圳市航順芯片技術(shù)研發(fā)有限公司推出的中大容量的103系列芯片。作為32位MCU常用ADC模塊,在各類產(chǎn)品中有諸多應(yīng)用,比如節(jié)省I/O引腳的按鍵檢測應(yīng)用,以及各類傳感器,比如光傳感器、濕度傳感器、溫度傳感器等,把各種各樣的模擬信號(hào)轉(zhuǎn)換為電壓、電流信號(hào),ADC模塊通過對該電壓、電流信號(hào)的精確測量,實(shí)現(xiàn)MCU對外部世界的精確感知,從而實(shí)現(xiàn)對應(yīng)用的精準(zhǔn)控制。
HK32F103x/C/D/E的ADC的功能描述:
12 位 ADC 是一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有多達(dá) 18 個(gè)通道,可測量 16 個(gè)外部和 2 個(gè)內(nèi)部信號(hào)源。各通道的 A/D 轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC 的結(jié)果可以左對齊或右對齊方式存儲(chǔ)在 16 位數(shù)據(jù)寄存器中。
模擬看門狗特性允許應(yīng)用程序檢測輸入電壓是否超出用戶定義的高/低閥值。
ADC 的輸入時(shí)鐘不得超過 14MHz,它是由 PCLK2 經(jīng)分頻產(chǎn)生。
HK32F103x/C/D/E的ADC的主要特征:
● 12 位分辨率
● 轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時(shí)產(chǎn)生中斷
● 單次和連續(xù)轉(zhuǎn)換模式
● 從通道 0 到通道 n 的自動(dòng)掃描模式
● 自校準(zhǔn)
● 帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對齊
● 采樣間隔可以按通道分別編程
● 規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項(xiàng)
● 間斷模式
● 雙重模式(帶 2 個(gè)或以上 ADC 的器件)
● ADC 轉(zhuǎn)換時(shí)間:
─ HK32F103xx 增強(qiáng)型產(chǎn)品:時(shí)鐘為 56MHz 時(shí)為 1μs(時(shí)鐘為 72MHz 為 1.17μs)
● ADC 供電要求:2V 到 5.5V
● ADC 輸入范圍:VREF- ≤ VIN ≤ VREF+
● 規(guī)則通道轉(zhuǎn)換期間有 DMA 請求產(chǎn)生。
注意:如果有 VREF-引腳(取決于封裝),必須和 VSSA 相連接
外部觸發(fā)轉(zhuǎn)換
轉(zhuǎn)換可以由外部事件觸發(fā)(例如定時(shí)器捕獲,EXTI 線)。如果設(shè)置了 EXTTRIG 控制位,則外部事件就能夠觸發(fā)轉(zhuǎn)換。EXTSEL[2:0]和 JEXTSEL2:0]控制位允許應(yīng)用程序選擇 8 個(gè)可能的事件中的某一個(gè),可以觸發(fā)規(guī)則和注入組的采樣。
注意:當(dāng)外部觸發(fā)信號(hào)被選為 ADC 規(guī)則或注入轉(zhuǎn)換時(shí),只有它的上升沿可以啟動(dòng)轉(zhuǎn)換。
表 43 ADC1 和 ADC2 用于規(guī)則通道的外部觸發(fā)
表 44 ADC1 和 ADC2 用于注入通道的外部觸發(fā)
表 45 ADC3 用于規(guī)則通道的外部觸發(fā)
表 46 ADC3 用于注入通道的外部觸發(fā)
軟件觸發(fā)事件可以通過對寄存器 ADC_CR2 的 SWSTART 或 JSWSTART 位置“1”產(chǎn)生。規(guī)則組的轉(zhuǎn)換可以被注入觸發(fā)打斷。
以下是HK32F103系列的功能框圖:
HK32F103x/C/D/E在ADC使用過程中需要注意的地方:
問題描述:
[1]當(dāng) ADC 在常規(guī)通道采樣時(shí),使用并配置一個(gè)通道進(jìn)行采樣,軟件啟動(dòng)采樣,然后利用判斷EOC的方式來讀取采樣數(shù)據(jù),讀到的數(shù)據(jù)是上一次采樣的結(jié)果。
[2]當(dāng) ADC 在常規(guī)通道采樣時(shí),使用并配置多個(gè)通道采樣,軟件啟動(dòng)采樣,然后利用判斷EOC的方式去讀取采樣數(shù)據(jù),讀到的數(shù)據(jù)是上一個(gè)通道采樣的結(jié)果。
根本原因:
在常規(guī)通道采樣時(shí),由于 EOC 標(biāo)志置位后,數(shù)據(jù)寄存器 ADC_DR 沒有被及時(shí)正確更新。ADC_DR寄存器要么是上一個(gè)采樣的數(shù)據(jù)(對應(yīng)上述[1]),要么是上一個(gè)通道的采樣數(shù)據(jù)(對應(yīng)上述)。
解決方案:
在讀取 ADC_DR 數(shù)據(jù)寄存器之前,增加 3 個(gè) NOP 指令。示例代碼如下:
參考應(yīng)用代碼如下: