單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來(lái)前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來(lái)說(shuō),一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、3個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN以及1個(gè)USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價(jià)比優(yōu)勢(shì)顯著,尤其適合網(wǎng)關(guān)模組等對(duì)空間布局要求較高的場(chǎng)景。緊湊的尺寸和精簡(jiǎn)化外設(shè)配置,使其能夠在有限空間內(nèi)實(shí)現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計(jì)算節(jié)點(diǎn)等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場(chǎng)景,軟件使用方法一致。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評(píng)估芯片性能。

第十四章 ADC(上篇)
1ADC簡(jiǎn)介
12 位 ADC 是一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有多達(dá) 18 個(gè)通道,可測(cè)量 16 個(gè)外部和 2 個(gè)內(nèi)部信號(hào)源。各通道的 A/D 轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC 的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在 16 位數(shù)據(jù)寄存器中。
模擬看門狗特性允許應(yīng)用程序檢測(cè)輸入電壓是否超出用戶定義的高/低閥值。ADC 的輸入時(shí)鐘不得超過(guò) 14MHz,它是由 PCLK2 經(jīng)分頻產(chǎn)生。
1.1 ADC主要特征
W55MH32的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ù)對(duì)齊
- ?采樣間隔可以按通道分別編程
- ?規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項(xiàng)
- ?間斷模式
- ?雙重模式(帶 2 個(gè)或以上 ADC 的器件)
- ?ADC 轉(zhuǎn)換時(shí)間:時(shí)鐘為 56MHz 時(shí)為 1μs(時(shí)鐘為 72MHz 為 1.17μs)
- ?ADC 供電要求:2.4V 到 3.6V
- ?ADC 輸入范圍:VREF-≤VIN≤VREF+
- ?規(guī)則通道轉(zhuǎn)換期間有 DMA 請(qǐng)求產(chǎn)生。下圖是 ADC 模塊的方框圖。
注意: 如果有 VREF-引腳,必須和 VSSA 相連接
1.2 ADC功能描述
ADC功能框圖如下:

單個(gè) ADC 框圖
1.ADC3 的規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換觸發(fā)與 ADC1 和 ADC2 的不同。
| 名稱 | 信號(hào)類型 | 注解 |
| VREF+ | 輸入,模擬參考正極 | ADC 使用的高端 / 正極參考電壓,2.4V ≤ VREF+ ≤ VDDA |
| VDDA(*) | 輸入,模擬電源 | 等效于 VDO 的模擬電源:2.4V ≤ VDDA ≤ VDD (3.6V) |
| VREF- | 輸入,模擬參考負(fù)極 | ADC 使用的低端 / 負(fù)極參考電壓,VREF- ≈ VSSA |
| VSSA(*) | 輸入,模擬電源地 | 等效于 VSS 的模擬電源地 |
| ADC_IN[15:0] | 模擬輸入 | 16 個(gè) ADC 模擬通道 |
1.VDDA 和 VSSA 應(yīng)該分別連接到 VDD 和 VSS。
1.3 ADC開關(guān)控制
通過(guò)設(shè)置 ADC_CR2 寄存器的 ADON 位可給 ADC 上電。當(dāng)?shù)谝淮卧O(shè)置 ADON 位時(shí),它將 ADC 從斷電狀態(tài)下喚醒。ADC 上電延遲一段時(shí)間后(tSTAB),再次設(shè)置 ADON 位時(shí)開始進(jìn)行轉(zhuǎn)換。
通過(guò)清除 ADON 位可以停止轉(zhuǎn)換,并將 ADC 置于斷電模式。在這個(gè)模式中,ADC 幾乎不耗電(僅幾個(gè)μA)。
1.4 ADC時(shí)鐘
由時(shí)鐘控制器提供的 ADCCLK 時(shí)鐘和 PCLK2(APB2 時(shí)鐘)同步。RCC 控制器為 ADC 時(shí)鐘提供一個(gè)專用的可編程預(yù)分頻器,詳見第 6 節(jié)-復(fù)位和時(shí)鐘控制(RCC)。
2 模式選擇
2.1 通道選擇
有 16 個(gè)多路通道。可以把轉(zhuǎn)換組織成兩組:規(guī)則組和注入組。在任意多個(gè)通道上以任意順序進(jìn)行的一系列轉(zhuǎn)換構(gòu)成成組轉(zhuǎn)換。例如,可以如下順序完成轉(zhuǎn)換:通道 3、通道 8、通道 2、通道 2、通道 0、通道 2、通道 2、通道 15。
規(guī)則組由多達(dá) 16 個(gè)轉(zhuǎn)換組成。規(guī)則通道和它們的轉(zhuǎn)換順序在 ADC_SQRx 寄存器中選擇。規(guī)則組中轉(zhuǎn)換的總數(shù)應(yīng)寫入 ADC_SQR1 寄存器的 L[3:0]位中。
注入組由多達(dá) 4 個(gè)轉(zhuǎn)換組成。注入通道和它們的轉(zhuǎn)換順序在 ADC_JSQR 寄存器中選擇。注入組里的轉(zhuǎn)換總數(shù)目應(yīng)寫入 ADC_JSQR 寄存器的 L[1:0]位中。
如果 ADC_SQRx 或 ADC_JSQR 寄存器在轉(zhuǎn)換期間被更改,當(dāng)前的轉(zhuǎn)換被清除,一個(gè)新的啟動(dòng)脈沖將發(fā)送到 ADC 以轉(zhuǎn)換新選擇的組。
溫度傳感器/VREFINT 內(nèi)部通道
溫度傳感器和通道 ADC1_IN16 相連接,內(nèi)部參照電壓 VREFINT 和 ADC1_IN17 相連接。可以按注入或規(guī)則通道對(duì)這兩個(gè)內(nèi)部通道進(jìn)行轉(zhuǎn)換。
注意:溫度傳感器和 VREFINT 只能出現(xiàn)在主 ADC1 中。
2.2 單次轉(zhuǎn)換模式
單次轉(zhuǎn)換模式下,ADC 只執(zhí)行一次轉(zhuǎn)換。該模式既可通過(guò)設(shè)置 ADC_CR2 寄存器的 ADON 位(只適用于規(guī)則通道)啟動(dòng)也可通過(guò)外部觸發(fā)啟動(dòng)(適用于規(guī)則通道或注入通道),這時(shí) CONT 位為 0。一旦選擇通道的轉(zhuǎn)換完成:
如果一個(gè)規(guī)則通道被轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù)被儲(chǔ)存在 16 位 ADC_DR 寄存器中EOC(轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置如果設(shè)置了 EOCIE,則產(chǎn)生中斷。
如果一個(gè)注入通道被轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù)被儲(chǔ)存在 16 位的 ADC_DRJ1 寄存器中JEOC(注入轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置如果設(shè)置了 JEOCIE 位,則產(chǎn)生中斷。然后 ADC 停止。
2.3 連續(xù)轉(zhuǎn)換模式
在連續(xù)轉(zhuǎn)換模式中,當(dāng)前面 ADC 轉(zhuǎn)換一結(jié)束馬上就啟動(dòng)另一次轉(zhuǎn)換。此模式可通過(guò)外部觸發(fā)啟動(dòng)或通過(guò)設(shè)置 ADC_CR2 寄存器上的 ADON 位啟動(dòng),此時(shí) CONT 位是 1。
每個(gè)轉(zhuǎn)換后:如果一個(gè)規(guī)則通道被轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù)被儲(chǔ)存在 16 位的 ADC_DR 寄存器中EOC(轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置如果設(shè)置了 EOCIE,則產(chǎn)生中斷。
如果設(shè)置了 JEOCIE 位,則產(chǎn)生中斷。
2.4 時(shí)序圖
如下圖所示,ADC 在開始精確轉(zhuǎn)換前需要一個(gè)穩(wěn)定時(shí)間 tSTAB。在開始 ADC 轉(zhuǎn)換和 14 個(gè)時(shí)鐘周期后,EOC 標(biāo)志被設(shè)置,16 位 ADC 數(shù)據(jù)寄存器包含轉(zhuǎn)換的結(jié)果。

時(shí)序圖
2.5 模擬看門狗
如果被 ADC 轉(zhuǎn)換的模擬電壓低于低閥值或高于高閥值,AWD 模擬看門狗狀態(tài)位被設(shè)置。閥值位于ADC_HTR 和 ADC_LTR 寄存器的最低 12 個(gè)有效位中。通過(guò)設(shè)置 ADC_CR1 寄存器的 AWDIE 位以允許產(chǎn)生相應(yīng)中斷。
閥值獨(dú)立于由 ADC_CR2 寄存器上的 ALIGN 位選擇的數(shù)據(jù)對(duì)齊模式。通過(guò)配置 ADC_CR1 寄存器,模擬看門狗可以作用于 1 個(gè)或多個(gè)通道。

模擬看門狗警戒區(qū)
模擬看門狗通道選擇
| 模擬看門狗警戒的通道 | ADC_CR1 寄存器控制位 | ||
| AWDSGL 位 | AWDEN 位 | JAWDEN 位 | |
| 無(wú) | 任意值 | 0 | 0 |
| 所有注入通道 | 0 | 0 | 1 |
| 所有規(guī)則通道 | 0 | 1 | 0 |
| 所有注入和規(guī)則通道 | 0 | 1 | 1 |
| 單一的 (1) 注入通道 | 1 | 0 | 1 |
| 單一的 (1) 規(guī)則通道 | 1 | 1 | 0 |
| 單一的 (1) 注入或規(guī)則通道 | 1 | 1 | 1 |
2.6 掃描模式
此模式用來(lái)掃描一組模擬通道。
掃描模式可通過(guò)設(shè)置 ADC_CR1 寄存器的 SCAN 位來(lái)選擇。一旦這個(gè)位被設(shè)置,ADC 掃描所有被ADC_SQRX 寄存器(對(duì)規(guī)則通道)或 ADC_JSQR(對(duì)注入通道)選中的所有通道。在每個(gè)組的每個(gè)通道上執(zhí)行單次轉(zhuǎn)換。在每個(gè)轉(zhuǎn)換結(jié)束時(shí),同一組的下一個(gè)通道被自動(dòng)轉(zhuǎn)換。如果設(shè)置了 CONT 位,轉(zhuǎn)換不會(huì)在選擇組的最后一個(gè)通道上停止,而是再次從選擇組的第一個(gè)通道繼續(xù)轉(zhuǎn)換。
如果設(shè)置了 DMA 位,在每次 EOC 后,DMA 控制器把規(guī)則組通道的轉(zhuǎn)換數(shù)據(jù)傳輸?shù)?SRAM 中。而注入通道轉(zhuǎn)換的數(shù)據(jù)總是存儲(chǔ)在 ADC_JDRx 寄存器中。
2.7 注入通道管理
觸發(fā)注入
清除 ADC_CR1 寄存器的 JAUTO 位,并且設(shè)置 SCAN 位,即可使用觸發(fā)注入功能。
1. 利用外部觸發(fā)或通過(guò)設(shè)置 ADC_CR2 寄存器的 ADON 位,啟動(dòng)一組規(guī)則通道的轉(zhuǎn)換。
2. 如果在規(guī)則通道轉(zhuǎn)換期間產(chǎn)生一外部注入觸發(fā),當(dāng)前轉(zhuǎn)換被復(fù)位,注入通道序列被以單次掃描方式進(jìn)行轉(zhuǎn)換。
3. 然后,恢復(fù)上次被中斷的規(guī)則組通道轉(zhuǎn)換。如果在注入轉(zhuǎn)換期間產(chǎn)生一規(guī)則事件,注入轉(zhuǎn)換不會(huì)被中斷,但是規(guī)則序列將在注入序列結(jié)束后被執(zhí)行。
注: 當(dāng)使用觸發(fā)的注入轉(zhuǎn)換時(shí),必須保證觸發(fā)事件的間隔長(zhǎng)于注入序列。例如:序列長(zhǎng)度為 28 個(gè)ADC 時(shí)鐘周期(即 2 個(gè)具有 1.5 個(gè)時(shí)鐘間隔采樣時(shí)間的轉(zhuǎn)換),觸發(fā)之間最小的間隔必須是 29 個(gè)ADC 時(shí)鐘周期。
自動(dòng)注入
如果設(shè)置了 JAUTO 位,在規(guī)則組通道之后,注入組通道被自動(dòng)轉(zhuǎn)換。這可以用來(lái)轉(zhuǎn)換在ADC_SQRx 和 ADC_JSQR 寄存器中設(shè)置的多至 20 個(gè)轉(zhuǎn)換序列。
在此模式里,必須禁止注入通道的外部觸發(fā)。
如果除 JAUTO 位外還設(shè)置了 CONT 位,規(guī)則通道至注入通道的轉(zhuǎn)換序列被連續(xù)執(zhí)行。對(duì)于 ADC 時(shí)鐘預(yù)分頻系數(shù)為 4 至 8 時(shí),當(dāng)從規(guī)則轉(zhuǎn)換切換到注入序列或從注入轉(zhuǎn)換切換到規(guī)則序列時(shí),會(huì)自動(dòng)插入 1 個(gè) ADC 時(shí)鐘間隔;當(dāng) ADC 時(shí)鐘預(yù)分頻系數(shù)為 2 時(shí),則有 2 個(gè) ADC 時(shí)鐘間隔的延遲。
注意: 不可能同時(shí)使用自動(dòng)注入和間斷模式。

注入轉(zhuǎn)換延時(shí)
2.8 間斷模式
規(guī)則組
此模式通過(guò)設(shè)置 ADC_CR1 寄存器上的 DISCEN 位激活。它可以用來(lái)執(zhí)行一個(gè)短序列的 n 次轉(zhuǎn)換(n<=8),此轉(zhuǎn)換是 ADC_SQRx 寄存器所選擇的轉(zhuǎn)換序列的一部分。數(shù)值 n 由 ADC_CR1 寄存器的DISCNUM[2:0]位給出。
一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng) ADC_SQRx 寄存器中描述的下一輪 n 次轉(zhuǎn)換,直到此序列所有的轉(zhuǎn)換完成為止。總的序列長(zhǎng)度由 ADC_SQR1 寄存器的 L[3:0]定義。
舉例:
n=3,被轉(zhuǎn)換的通道=0、1、2、3、6、7、9、10
第一次觸發(fā):轉(zhuǎn)換的序列為 0、1、2
第二次觸發(fā):轉(zhuǎn)換的序列為 3、6、7
第三次觸發(fā):轉(zhuǎn)換的序列為 9、10,并產(chǎn)生 EOC 事件
第四次觸發(fā):轉(zhuǎn)換的序列 0、1、2
注意: 當(dāng)以間斷模式轉(zhuǎn)換一個(gè)規(guī)則組時(shí),轉(zhuǎn)換序列結(jié)束后不自動(dòng)從頭開始。當(dāng)所有子組被轉(zhuǎn)換完成,下一次觸發(fā)啟動(dòng)第一個(gè)子組的轉(zhuǎn)換。在上面的例子中,第四次觸發(fā)重新轉(zhuǎn)換第一子組的通道 0、1 和 2。
注入組
此模式通過(guò)設(shè)置 ADC_CR1 寄存器的 JDISCEN 位激活。在一個(gè)外部觸發(fā)事件后,該模式按通道順序逐個(gè)轉(zhuǎn)換 ADC_JSQR 寄存器中選擇的序列。一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng) ADC_JSQR 寄存器選擇的下一個(gè)通道序列的轉(zhuǎn)換,直到序列中所有的轉(zhuǎn)換完成為止。總的序列長(zhǎng)度由 ADC_JSQR 寄存器的 JL[1:0]位定義。
舉例:
n=1,被轉(zhuǎn)換的通道=1、2、3
第一次觸發(fā):通道 1 被轉(zhuǎn)換
第二次觸發(fā):通道 2 被轉(zhuǎn)換
第三次觸發(fā):通道 3 被轉(zhuǎn)換,并且產(chǎn)生 EOC 和 JEOC 事件
第四次觸發(fā):通道 1 被轉(zhuǎn)換
注意: 1.當(dāng)完成所有注入通道轉(zhuǎn)換,下個(gè)觸發(fā)啟動(dòng)第 1 個(gè)注入通道的轉(zhuǎn)換。在上述例子中,第四個(gè)觸發(fā)重新轉(zhuǎn)換第 1 個(gè)注入通道 1。
2.不能同時(shí)使用自動(dòng)注入和間斷模式。
3.必須避免同時(shí)為規(guī)則和注入組設(shè)置間斷模式。間斷模式只能作用于一組轉(zhuǎn)換。
3 校準(zhǔn)
ADC 有一個(gè)內(nèi)置自校準(zhǔn)模式。校準(zhǔn)可大幅減小因內(nèi)部電容器組的變化而造成的準(zhǔn)精度誤差。在校準(zhǔn)期間,在每個(gè)電容器上都會(huì)計(jì)算出一個(gè)誤差修正碼(數(shù)字值),這個(gè)碼用于消除在隨后的轉(zhuǎn)換中每個(gè)電容器上產(chǎn)生的誤差。
通過(guò)設(shè)置 ADC_CR2 寄存器的 CAL 位啟動(dòng)校準(zhǔn)。一旦校準(zhǔn)結(jié)束,CAL 位被硬件復(fù)位,可以開始正常轉(zhuǎn)換。建議在上電時(shí)執(zhí)行一次 ADC 校準(zhǔn)。校準(zhǔn)階段結(jié)束后,校準(zhǔn)碼儲(chǔ)存在 ADC_DR 中。
注意:1.建議在每次上電后執(zhí)行一次校準(zhǔn)。
2.啟動(dòng)校準(zhǔn)前,ADC 必須處于關(guān)電狀態(tài)(ADON='0')超過(guò)至少兩個(gè) ADC 時(shí)鐘周期。

校準(zhǔn)時(shí)序圖
3.1 數(shù)據(jù)對(duì)齊
ADC_CR2 寄存器中的 ALIGN 位選擇轉(zhuǎn)換后數(shù)據(jù)儲(chǔ)存的對(duì)齊方式。數(shù)據(jù)可以左對(duì)齊或右對(duì)齊,如


注入組通道轉(zhuǎn)換的數(shù)據(jù)值已經(jīng)減去了在 ADC_JOFRx 寄存器中定義的偏移量,因此結(jié)果可以是一個(gè)負(fù)值。SEXT 位是擴(kuò)展的符號(hào)值。
對(duì)于規(guī)則組通道,不需減去偏移值,因此只有 12 個(gè)位有效。

數(shù)據(jù)右對(duì)齊

數(shù)據(jù)左對(duì)齊
3.2 可編程的通道采樣時(shí)間
ADC 使用若干個(gè) ADC_CLK 周期對(duì)輸入電壓采樣,采樣周期數(shù)目可以通過(guò) ADC_SMPR1 和ADC_SMPR2 寄存器SMP[2:0]位更改。每個(gè)通道可以分別用不同的時(shí)間采樣。
總轉(zhuǎn)換時(shí)間如下計(jì)算:
TCONV=采樣時(shí)間+12.5 個(gè)周期
例如:
當(dāng) ADCCLK=14MHz,采樣時(shí)間為 1.5 周期
TCONV=1.5+12.5=14 周期=1μs
3.3 外部觸發(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)換。
表 ADC1 和 ADC2 用于規(guī)則通道的外部觸發(fā)
| 觸發(fā)源 | 類型 | EXTSSEL[2:0] |
| TIM1_CC1 事件 | 來(lái)自片上定時(shí)器的內(nèi)部信號(hào) | 000 |
| TIM1_CC2 事件 | 001 | |
| TIM1_CC3 事件 | 010 | |
| TIM2_CC2 事件 | 011 | |
| TIM3_TRGO 事件 | 100 | |
| TIM4_CC4 事件 | 101 | |
| EXTI 線 11/TIM8_TRGO事件(1) | 外部引腳/來(lái)自片上定時(shí)器的內(nèi)部信號(hào) | 110 |
| SWSTART | 軟件控制位 | 111 |
(1)對(duì)于規(guī)則通道,選中 EXTI 線路 11 或 TIM8_TRGO 作為外部觸發(fā)事件,可以分別通過(guò)設(shè)置 ADC1和 ADC2 的 ADC1_ETRGREG_REMAP 位和 ADC2_ETRGREG_REMAP 位實(shí)現(xiàn)。
表 ADC1 和 ADC2 用于注入通道的外部觸發(fā)
| 觸發(fā)源 | 連接類型 | JEXTSE[2:0] |
| TIM1_TRGO 事件 | 來(lái)自片上定時(shí)器的內(nèi)部信號(hào) | 000 |
| TIM1_CC4 事件 | 001 | |
| TIM2_TRGO 事件 | 010 | |
| TIM2_CC1 事件 | 011 | |
| TIM3_CC4 事件 | 100 | |
| TIM4_TRGO 事件 | 101 | |
| EXTI 線 15/TIM8_CC4 事件(1) | 外部引腳 / 來(lái)自片上定時(shí)器的內(nèi)部信號(hào) | 110 |
| SWSTART | 軟件控制位 | 111 |
(2)為注入信道選擇外部觸發(fā)器 EXTIline15 或 TIM8-CC4 事件是通過(guò)分別為 ADC1 和 ADC2 配置ADC1ETRGINJREMAP 和 ADC2 ETRGINJ·REMAP 來(lái)完成的。
表 ADC3 用于規(guī)則通道的外部觸發(fā)
| 觸發(fā)源 | 連接類型 | EXTSSEL[2:0] |
| TIM3_CC1 事件 | 來(lái)自片上定時(shí)器的內(nèi)部信號(hào) | 000 |
| TIM2_CC3 事件 | 001 | |
| TIM1_CC3 事件 | 010 | |
| TIM8_CC1 事件 | 011 | |
| TIM8_TRGO 事件 | 100 | |
| TIM5_CC1 事件 | 101 | |
| TIM5_CC3 事件 | 110 | |
| SWSTART | 軟件控制位 | 111 |
表 ADC3 用于注入通道的外部觸發(fā)
| 觸發(fā)源 | 連接類型 | JEXTSE[2:0] |
| TIM1_TRGO 事件 | 來(lái)自片上定時(shí)器的內(nèi)部信號(hào) | 000 |
| TIM1_CC4 事件 | 001 | |
| TIM4_CC3 事件 | 010 | |
| TIM8_CC2 事件 | 011 | |
| TIM8_CC4 事件 | 100 | |
| TIM5_TRGO 事件 | 101 | |
| TIM5_CC4 事件 | 110 | |
| JSWSTART | 軟件控制位 | 111 |
軟件觸發(fā)事件可以通過(guò)對(duì)寄存器 ADC_CR2 的 SWSTART 或 JSWSTART 位置'1'產(chǎn)生。規(guī)則組的轉(zhuǎn)換可以被注入觸發(fā)打斷。
3.4 DMA請(qǐng)求
因?yàn)橐?guī)則通道轉(zhuǎn)換的值儲(chǔ)存在一個(gè)僅有的數(shù)據(jù)寄存器中,所以當(dāng)轉(zhuǎn)換多個(gè)規(guī)則通道時(shí)需要使用DMA,這可以避免丟失已經(jīng)存儲(chǔ)在 ADC_DR 寄存器中的數(shù)據(jù)。只有在規(guī)則通道的轉(zhuǎn)換結(jié)束時(shí)才產(chǎn)生 DMA 請(qǐng)求,并將轉(zhuǎn)換的數(shù)據(jù)從 ADC_DR 寄存器傳輸?shù)接脩糁付ǖ哪康牡刂贰?/p>
注: 只有 ADC1 和 ADC3 擁有 DMA 功能。由 ADC2 轉(zhuǎn)化的數(shù)據(jù)可以通過(guò)雙 ADC 模式,利用 ADC1 的DMA 功能傳輸。
4 雙ADC模式
在有 2 個(gè)或以上 ADC 模塊的產(chǎn)品中,可以使用雙 ADC 模式。在雙 ADC 模式里,根據(jù) ADC1_CR1 寄存器中 DUALMOD[2:0]位所選的模式,轉(zhuǎn)換的啟動(dòng)可以是ADC1 主和 ADC2 從的交替觸發(fā)或同步觸發(fā)。
注意: 在雙 ADC 模式里,當(dāng)轉(zhuǎn)換配置成由外部事件觸發(fā)時(shí),用戶必須將其設(shè)置成僅觸發(fā)主 ADC,從 ADC設(shè)置成軟件觸發(fā),這樣可以防止意外的觸發(fā)從轉(zhuǎn)換。但是,主和從 ADC 的外部觸發(fā)必須同時(shí)被激活。
共有 6 種可能的模式:
- ?同步注入模式
- ?同步規(guī)則模式
- ?快速交叉模式
- ?慢速交叉模式
- ?交替觸發(fā)模式
- ?獨(dú)立模式
還有可以用下列方式組合使用上面的模式:
- ?同步注入模式+同步規(guī)則模式
- ?同步規(guī)則模式+交替觸發(fā)模式
- ?同步注入模式+交叉模式
注意: 在雙 ADC 模式里,為了在主數(shù)據(jù)寄存器上讀取從轉(zhuǎn)換數(shù)據(jù),必須使能 DMA 位,即使不使用 DMA傳輸規(guī)則通道數(shù)據(jù)。

雙 ADC 框圖
1.外部觸發(fā)信號(hào)作用于 ADC2,但在本圖中沒有顯示。
2.在某些雙 ADC 模式中,在完整的 ADC1 數(shù)據(jù)寄存器(ADC1_DR)中包含了 ADC1 和 ADC2 的規(guī)則轉(zhuǎn)換數(shù)據(jù)。
4.1 同步注入模式
此模式轉(zhuǎn)換一個(gè)注入通道組。外部觸發(fā)來(lái)自 ADC1 的注入組多路開關(guān)(由 ADC1_CR2 寄存器的JEXTSEL[2:0]選擇),它同時(shí)給 ADC2 提供同步觸發(fā)。
注意: 不要在 2 個(gè) ADC 上轉(zhuǎn)換相同的通道(兩個(gè) ADC 在同一個(gè)通道上的采樣時(shí)間不能重疊)。在 ADC1 或 ADC2 的轉(zhuǎn)換結(jié)束時(shí):
轉(zhuǎn)換的數(shù)據(jù)存儲(chǔ)在每個(gè) ADC 接口的 ADC_JDRx 寄存器中。
當(dāng)所有 ADC1/ADC2 注入通道都被轉(zhuǎn)換時(shí),產(chǎn)生 JEOC 中斷(若任一 ADC 接口開放了中斷)。
注: 在同步模式中,必須轉(zhuǎn)換具有相同時(shí)間長(zhǎng)度的序列,或保證觸發(fā)的間隔比 2 個(gè)序列中較長(zhǎng)的序列長(zhǎng),否則當(dāng)較長(zhǎng)序列的轉(zhuǎn)換還未完成時(shí),具有較短序列的 ADC 轉(zhuǎn)換可能會(huì)被重啟。

在 4 個(gè)通道上的同步注入模式
4.2 同步規(guī)則模式
此模式在規(guī)則通道組上執(zhí)行。外部觸發(fā)來(lái)自 ADC1 的規(guī)則組多路開關(guān)(由 ADC1_CR2 寄存器的EXTSEL[2:0]選擇),它同時(shí)給 ADC2 提供同步觸發(fā)。
注意: 不要在 2 個(gè) ADC 上轉(zhuǎn)換相同的通道((兩個(gè) ADC 在同一個(gè)通道上的采樣時(shí)間不能重疊)。在 ADC1 或 ADC2 的轉(zhuǎn)換結(jié)束時(shí):
產(chǎn)生一個(gè) 32 位 DMA 傳輸請(qǐng)求(如果設(shè)置了 DMA 位),32 位的 ADC1_DR 寄存器內(nèi)容傳輸?shù)絊RAM 中,它上半個(gè)字包含 ADC2 的轉(zhuǎn)換數(shù)據(jù),低半個(gè)字包含 ADC1 的轉(zhuǎn)換數(shù)據(jù)。
當(dāng)所有 ADC1/ADC2 規(guī)則通道都被轉(zhuǎn)換完時(shí),產(chǎn)生 EOC 中斷(若任一 ADC 接口開放了中斷)。
注: 在同步規(guī)則模式中,必須轉(zhuǎn)換具有相同時(shí)間長(zhǎng)度的序列,或保證觸發(fā)的間隔比 2 個(gè)序列中較長(zhǎng)的序列長(zhǎng),否則當(dāng)較長(zhǎng)序列的轉(zhuǎn)換還未完成時(shí),具有較短序列的 ADC 轉(zhuǎn)換可能會(huì)被重啟。

在 16 個(gè)通道上的同步規(guī)則模式
4.3 快速交叉模式
此模式只適用于規(guī)則通道組(通常為一個(gè)通道)。外部觸發(fā)來(lái)自 ADC1 的規(guī)則通道多路開關(guān)。外部觸發(fā)產(chǎn)生后:
ADC2 立即啟動(dòng)并且ADC1 在延遲 7 個(gè) ADC 時(shí)鐘周期后啟動(dòng)如果同時(shí)設(shè)置了 ADC1 和 ADC2 的 CONT 位,所選的兩個(gè) ADC 規(guī)則通道將被連續(xù)地轉(zhuǎn)換。ADC1產(chǎn)生一個(gè)EOC中斷后(由EOCIE使能),產(chǎn)生一個(gè)32位的DMA傳輸請(qǐng)求(如果設(shè)置了DMA位),ADC1_DR 寄存器的 32 位數(shù)據(jù)被傳輸?shù)?SRAM,ADC1_DR 的上半個(gè)字包含 ADC2 的轉(zhuǎn)換數(shù)據(jù),低半個(gè)字包含 ADC1 的轉(zhuǎn)換數(shù)據(jù)。
注意: 最大允許采樣時(shí)間<7 個(gè) ADCCLK 周期,避免 ADC1 和 ADC2 轉(zhuǎn)換相同通道時(shí)發(fā)生兩個(gè)采樣周期的重疊。

在 1 個(gè)通道上連續(xù)轉(zhuǎn)換模式下的快速交叉模式
4.4 慢速交叉模式
此模式只適用于規(guī)則通道組(只能為一個(gè)通道)。外部觸發(fā)來(lái)自 ADC1 的規(guī)則通道多路開關(guān)。外部觸發(fā)產(chǎn)生后:
ADC2 立即啟動(dòng)并且 ADC1 在延遲 14 個(gè) ADC 時(shí)鐘周期后啟動(dòng)在延遲第二次 14 個(gè) ADC 周期后 ADC2 再次啟動(dòng),如此循環(huán)。
注意: 最大允許采樣時(shí)間<14 個(gè) ADCCLK 周期,以避免和下個(gè)轉(zhuǎn)換重疊。ADC1產(chǎn)生一個(gè)EOC中斷后(由EOCIE使能),產(chǎn)生一個(gè)32位的DMA傳輸請(qǐng)求(如果設(shè)置了DMA位),ADC1_DR 寄存器的 32 位數(shù)據(jù)被傳輸?shù)?SRAM,ADC1_DR 的上半個(gè)字包含 ADC2 的轉(zhuǎn)換數(shù)據(jù),低半個(gè)字包含 ADC1 的轉(zhuǎn)換數(shù)據(jù)。在 28 個(gè) ADC 時(shí)鐘周期后自動(dòng)啟動(dòng)新的 ADC2 轉(zhuǎn)換。在這個(gè)模式下不能設(shè)置 CONT 位,因?yàn)樗鼘⑦B續(xù)轉(zhuǎn)換所選擇的規(guī)則通道。
注意: 應(yīng)用程序必須確保當(dāng)使用交叉模式時(shí),不能有注入通道的外部觸發(fā)產(chǎn)生。

在 1 個(gè)通道上的慢速交叉模式
4.5 交替觸發(fā)模式
此模式只適用于注入通道組。外部觸發(fā)源來(lái)自 ADC1 的注入通道多路開關(guān)。
當(dāng)?shù)谝粋€(gè)觸發(fā)產(chǎn)生時(shí),ADC1 上的所有注入組通道被轉(zhuǎn)換。
當(dāng)?shù)诙€(gè)觸發(fā)到達(dá)時(shí),ADC2 上的所有注入組通道被轉(zhuǎn)換。
如此循環(huán)……
如果允許產(chǎn)生 JEOC 中斷,在所有 ADC1 注入組通道轉(zhuǎn)換后產(chǎn)生一個(gè) JEOC 中斷。如果允許產(chǎn)生JEOC 中斷,在所有 ADC2 注入組通道轉(zhuǎn)換后產(chǎn)生一個(gè) JEOC 中斷。當(dāng)所有注入組通道都轉(zhuǎn)換完后,如果又有另一個(gè)外部觸發(fā),交替觸發(fā)處理從轉(zhuǎn)換 ADC1 注入組通道重新開始。

交替觸發(fā):每個(gè) ADC1 的注入通道組
如果 ADC1 和 ADC2 上同時(shí)使用了注入間斷模式:
當(dāng)?shù)谝粋€(gè)觸發(fā)產(chǎn)生時(shí),ADC1 上的第一個(gè)注入通道被轉(zhuǎn)換。
當(dāng)?shù)诙€(gè)觸發(fā)到達(dá)時(shí),ADC2 上的第一個(gè)注入通道被轉(zhuǎn)換。
如此循環(huán)……
如果允許產(chǎn)生 JEOC 中斷,在所有 ADC1 注入組通道轉(zhuǎn)換后產(chǎn)生一個(gè) JEOC 中斷。如果允許產(chǎn)生JEOC 中斷,在所有 ADC2 注入組通道轉(zhuǎn)換后產(chǎn)生一個(gè) JEOC 中斷。
當(dāng)所有注入組通道都轉(zhuǎn)換完后,如果又有另一個(gè)外部觸發(fā),則重新開始交替觸發(fā)過(guò)程。

交替觸發(fā):在間斷模式下每個(gè) ADC 上的 4 個(gè)注入通道
4.6 獨(dú)立模式
此模式里,雙 ADC 同步不工作,每個(gè) ADC 接口獨(dú)立工作。
5 混合的規(guī)則
5.1 混合的規(guī)則/注入同步模式
規(guī)則組同步轉(zhuǎn)換可以被中斷,以啟動(dòng)注入組的同步轉(zhuǎn)換。
注: 在混合的規(guī)則/注入同步模式中,必須轉(zhuǎn)換具有相同時(shí)間長(zhǎng)度的序列,或保證觸發(fā)的間隔比 2 個(gè)序列中較長(zhǎng)的序列長(zhǎng),否則當(dāng)較長(zhǎng)序列的轉(zhuǎn)換還未完成時(shí),具有較短序列的 ADC 轉(zhuǎn)換可能會(huì)被重啟。
5.2 混合的同步規(guī)則+交替觸發(fā)模式
規(guī)則組同步轉(zhuǎn)換可以被中斷,以啟動(dòng)注入組交替觸發(fā)轉(zhuǎn)換。圖 顯示了一個(gè)規(guī)則同步轉(zhuǎn)換被交替觸發(fā)所中斷。注入交替轉(zhuǎn)換在注入事件到達(dá)后立即啟動(dòng)。如果規(guī)則轉(zhuǎn)換已經(jīng)在運(yùn)行,為了在注入轉(zhuǎn)換后確保同步,所有的 ADC(主和從)的規(guī)則轉(zhuǎn)換被停止,并在注入轉(zhuǎn)換結(jié)束時(shí)同步恢復(fù)。
注: 在混合的同步規(guī)則+交替觸發(fā)模式中,必須轉(zhuǎn)換具有相同時(shí)間長(zhǎng)度的序列,或保證觸發(fā)的間隔比 2個(gè)序列中較長(zhǎng)的序列長(zhǎng),否則當(dāng)較長(zhǎng)序列的轉(zhuǎn)換還未完成時(shí),具有較短序列的 ADC 轉(zhuǎn)換可能會(huì)被重啟。

交替+規(guī)則同步
如果觸發(fā)事件發(fā)生在一個(gè)中斷了規(guī)則轉(zhuǎn)換的注入轉(zhuǎn)換期間,這個(gè)觸發(fā)事件將被忽略。下圖示出了這種情況的操作(第 2 個(gè)觸發(fā)被忽略)。

觸發(fā)事件發(fā)生在注入轉(zhuǎn)換期間
5.3 混合同步注入+交叉模式
一個(gè)注入事件可以中斷一個(gè)交叉轉(zhuǎn)換。這種情況下,交叉轉(zhuǎn)換被中斷,注入轉(zhuǎn)換被啟動(dòng),在注入序列轉(zhuǎn)換結(jié)束時(shí),交叉轉(zhuǎn)換被恢復(fù)。下圖是這種情況的一個(gè)例子。
注: 當(dāng) ADC 時(shí)鐘預(yù)分頻系數(shù)設(shè)置為 4 時(shí),交叉模式恢復(fù)后不會(huì)均勻地分配采樣時(shí)間,采樣間隔是 8 個(gè)ADC 時(shí)鐘周期與 6 個(gè) ADC 時(shí)鐘周期輪替,而不是均勻的 7 個(gè) ADC 時(shí)鐘周期。

交叉的單通道轉(zhuǎn)換被注入序列 CH11 和 CH12 中斷
6 溫度傳感器
溫度傳感器可以用來(lái)測(cè)量器件周圍的溫度(TA)。
溫度傳感器在內(nèi)部和 ADC1_IN16 輸入通道相連接,此通道把傳感器輸出的電壓轉(zhuǎn)換成數(shù)字值。溫度傳感器模擬輸入推薦采樣時(shí)間是 17.1μs。當(dāng)沒有被使用時(shí),傳感器可以置于關(guān)電模式。
注意: 必須設(shè)置 TSVREFE 位激活內(nèi)部通道:ADC1_IN16(溫度傳感器)和 ADC1_IN17(VREFINT)的轉(zhuǎn)換。溫度傳感器輸出電壓隨溫度線性變化,由于生產(chǎn)過(guò)程的變化,溫度變化曲線的偏移在不同芯片上會(huì)有不同(最多相差 45°C)。
內(nèi)部溫度傳感器更適合于檢測(cè)溫度的變化,而不是測(cè)量絕對(duì)的溫度。如果需要測(cè)量精確的溫度,應(yīng)該使用一個(gè)外置的溫度傳感器。

溫度傳感器和 VREFINT 通道框圖
讀溫度
為使用傳感器:
1. 選擇 ADC1_IN16 輸入通道
2. 選擇采樣時(shí)間為 17.1μs
3. 設(shè)置 ADC 控制寄存器 2(ADC_CR2)的 TSVREFE 位,以喚醒關(guān)電模式下的溫度傳感器
4. 通過(guò)設(shè)置 ADON 位啟動(dòng) ADC 轉(zhuǎn)換(或用外部觸發(fā))
5. 讀 ADC 數(shù)據(jù)寄存器上的 VSENSE 數(shù)據(jù)結(jié)果
6. 利用下列公式得出溫度
溫度(°C)={(V25-VSENSE)/Avg_Slope}+25
這里:
V25=VSENSE 在 25°C 時(shí)的數(shù)值
Avg_Slope=溫度與 VSENSE 曲線的平均斜率(單位為 mV/°C 或μV/°C)參考數(shù)據(jù)手冊(cè)的電氣
特性章節(jié)中 V25 和 Avg_Slope 的實(shí)際值。
注意: 傳感器從關(guān)電模式喚醒后到可以輸出正確水平的 VSENSE 前,有一個(gè)建立時(shí)間。ADC 在上電后也有一個(gè)建立時(shí)間,因此為了縮短延時(shí),應(yīng)該同時(shí)設(shè)置 ADON 和 TSVREFE 位
7 ADC中斷
規(guī)則和注入組轉(zhuǎn)換結(jié)束時(shí)能產(chǎn)生中斷,當(dāng)模擬看門狗狀態(tài)位被設(shè)置時(shí)也能產(chǎn)生中斷。它們都有獨(dú)立的中斷使能位。
注: ADC1 和 ADC2 的中斷映射在同一個(gè)中斷向量上,而 ADC3 的中斷有自己的中斷向量
ADC_SR 寄存器中有 2 個(gè)其他標(biāo)志,但是它們沒有相關(guān)聯(lián)的中斷:
JSTRT(注入組通道轉(zhuǎn)換的啟動(dòng))
STRT(規(guī)則組通道轉(zhuǎn)換的啟動(dòng))
| 中斷事件 | 事件標(biāo)志 | 使能控制位 |
| 規(guī)則組轉(zhuǎn)換結(jié)束 | EOC | EOCIE |
| 注入組轉(zhuǎn)換結(jié)束 | JEOC | JEOCIE |
| 設(shè)置了模擬看門狗狀態(tài)位 | AWD | AWDIE |
8 例程設(shè)計(jì)
8.1 ADC_AnalogWatchdog例程
1.初始化部分
// 延時(shí)函數(shù)初始化(由delay.h提供)
delay_init();
// UART配置函數(shù)
void UART_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// 使能USART1和GPIOA時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
// 配置TX引腳(PA9)為復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置RX引腳(PA10)為浮空輸入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置串口參數(shù):115200bps, 8位數(shù)據(jù), 1位停止位, 無(wú)校驗(yàn)
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
// ADC配置函數(shù)
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 使能GPIOA和ADC1時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div8); // ADC時(shí)鐘=PCLK2/8(假設(shè)PCLK2=72MHz,ADC時(shí)鐘=9MHz)
ADC_DeInit(ADC1); // 復(fù)位ADC1配置
// 配置ADC為獨(dú)立模式,單通道單次轉(zhuǎn)換
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 非掃描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 單次轉(zhuǎn)換模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 軟件觸發(fā)
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 右對(duì)齊
ADC_InitStructure.ADC_NbrOfChannel = 1; // 轉(zhuǎn)換通道數(shù)1
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE); // 使能ADC1
// 配置NVIC中斷優(yōu)先級(jí)
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 最高搶占優(yōu)先級(jí)
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 配置ADC通道10(PA0),采樣時(shí)間239.5周期
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5);
// 配置模擬看門狗:監(jiān)測(cè)通道10,閾值范圍1024~2048(對(duì)應(yīng)電壓0.825V~1.65V,假設(shè)VREF=3.3V)
ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_10);
ADC_AnalogWatchdogThresholdsConfig(ADC1, 2048, 1024);
ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_SingleRegEnable); // 使能單通道看門狗
ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE); // 使能模擬看門狗中斷
// ADC校準(zhǔn)(關(guān)鍵步驟,確保轉(zhuǎn)換精度)
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
}
- ?延時(shí)函數(shù)初始化:調(diào)用delay_init()函數(shù),為后續(xù)的延時(shí)操作做準(zhǔn)備。
- ?UART 配置:UART_Configuration()函數(shù)用于配置 USART1,包含使能時(shí)鐘、設(shè)置 GPIO 引腳、初始化串口參數(shù)(如波特率、數(shù)據(jù)位、停止位等),并且使能串口。
- ?ADC 配置:ADC_Configuration()函數(shù)對(duì) ADC1 進(jìn)行配置,具體操作有使能時(shí)鐘、設(shè)置 ADC 時(shí)鐘分頻、初始化 ADC 參數(shù)(如工作模式、轉(zhuǎn)換模式等)、配置模擬看門狗(設(shè)定監(jiān)測(cè)通道和閾值)、使能模擬看門狗中斷以及進(jìn)行 ADC 校準(zhǔn)。
2.主循環(huán)部分
int main(void)
{
RCC_ClocksTypeDef clocks;
delay_init();
UART_Configuration();
ADC_Configuration();
RCC_GetClocksFreq(&clocks);
// 打印系統(tǒng)時(shí)鐘信息
printf("n");
printf("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhzn",
(float)clocks.SYSCLK_Frequency / 1000000, (float)clocks.HCLK_Frequency / 1000000,
(float)clocks.PCLK1_Frequency / 1000000, (float)clocks.PCLK2_Frequency / 1000000, (float)clocks.ADCCLK_Frequency / 1000000);
printf("ADC Analog Watchdog Testn");
printf("LTR: 1024, HTR: 2048n");
// 主循環(huán):周期性觸發(fā)ADC轉(zhuǎn)換
while (1)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 軟件觸發(fā)ADC轉(zhuǎn)換
delay_ms(200); // 等待轉(zhuǎn)換完成并延時(shí)200ms
}
}
在main函數(shù)的無(wú)限循環(huán)里,每隔 200ms 啟動(dòng)一次 ADC 轉(zhuǎn)換。這樣做的目的是周期性地對(duì) ADC 通道進(jìn)行采樣。
3.中斷處理部分
// 模擬看門狗中斷處理函數(shù)
void ADC1_2_IRQHandler(void)
{
ADC_ITConfig(ADC1, ADC_IT_AWD, DISABLE); // 臨時(shí)禁用中斷,避免重復(fù)觸發(fā)
if (SET == ADC_GetFlagStatus(ADC1, ADC_FLAG_AWD)) // 檢查模擬看門狗標(biāo)志
{
ADC_ClearFlag(ADC1, ADC_FLAG_AWD); // 清除中斷標(biāo)志
ADC_ClearITPendingBit(ADC1, ADC_IT_AWD); // 清除中斷掛起位
// 打印觸發(fā)中斷的ADC值(12位精度,范圍0~4095)
printf("ADC Awd is Happened. Code Value = %d rn", ADC1->DR);
}
ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE); // 重新使能中斷
}
ADC1_2_IRQHandler函數(shù)作為模擬看門狗中斷的處理函數(shù)。當(dāng) ADC 值超出預(yù)設(shè)的閾值范圍時(shí),會(huì)觸發(fā)該中斷。在中斷處理過(guò)程中,先禁用中斷,接著清除中斷標(biāo)志和掛起位,然后打印出觸發(fā)中斷時(shí)的 ADC 值,最后重新使能中斷。
9 下載驗(yàn)證
9.1 ADC_AnalogWatchdog例程
實(shí)驗(yàn)現(xiàn)象分析
系統(tǒng)啟動(dòng)信息: 系統(tǒng)啟動(dòng)后,會(huì)在串口輸出系統(tǒng)時(shí)鐘頻率信息,同時(shí)顯示正在進(jìn)行 ADC 模擬看門狗測(cè)試以及預(yù)設(shè)的下限和上限。
ADC 轉(zhuǎn)換: 系統(tǒng)會(huì)每隔 200ms 啟動(dòng)一次 ADC 轉(zhuǎn)換。若輸入到 ADC 通道 10 的電壓值處于 1024 - 2048 的范圍內(nèi),不會(huì)有額外信息輸出。
模擬看門狗觸發(fā):當(dāng)輸入到 ADC 通道 10 的電壓值超出 1024 - 2048 的范圍時(shí),會(huì)觸發(fā)模擬看門狗中斷,在串口輸出觸發(fā)中斷時(shí)的 ADC 值。
持續(xù)運(yùn)行: 系統(tǒng)會(huì)持續(xù)運(yùn)行,不斷進(jìn)行 ADC 轉(zhuǎn)換,并在需要時(shí)觸發(fā)模擬看門狗中斷。

WIZnet 是一家無(wú)晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。
-
傳感器
+關(guān)注
關(guān)注
2576文章
55040瀏覽量
791277 -
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45495瀏覽量
670320 -
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
5998瀏覽量
180815 -
adc
+關(guān)注
關(guān)注
100文章
7511瀏覽量
555947 -
數(shù)字轉(zhuǎn)換器
+關(guān)注
關(guān)注
0文章
347瀏覽量
28763
發(fā)布評(píng)論請(qǐng)先 登錄
第十四章 USART——串口通訊
基于AVR高性能單片機(jī)的以太網(wǎng)接口設(shè)計(jì)
WIZnet高性能以太網(wǎng)單片機(jī)W55MH32重磅發(fā)布!
即刻啟程,踏上W55MH32高性能以太網(wǎng)單片機(jī)學(xué)習(xí)之路!
第一章 W55MH32 高性能以太網(wǎng)單片機(jī)的學(xué)習(xí)方法概述
第二章 開發(fā)板與芯片介紹 詳解W55MH32芯片及開發(fā)板
W55MH32高性能以太網(wǎng)單片機(jī)教程 第九章 窗口看門狗(WWDG)
WIZnet W55MH32以太網(wǎng)單片機(jī)開發(fā)教程 第十一章 通用定時(shí)器(上篇)
WIZnet W55MH32以太網(wǎng)單片機(jī)開發(fā)教程第十一章 通用定時(shí)器(下篇)
第十四章 W55MH32 TFTP示例
第十五章 W55MH32 SNMP示例
第十六章 W55MH32 PING示例
第二十六章 W55MH32?上位機(jī)搜索和配置示例
一文讀懂:W55MH32 如何攜手微信小程序與 OneNET,實(shí)現(xiàn)以太網(wǎng)燈條調(diào)色自由(軟硬件開源)
W55MH32高性能以太網(wǎng)單片機(jī)開發(fā)課件 第十四章 ADC(上篇)
評(píng)論