介紹
STM32F103ZET6 擁有12位ADC,是一種逐次逼近型模擬數字轉換器。
12bits ADC 代表了 ADC 的轉換精度。存在輸入參考電壓的情況下,ADC 將模擬信號經信號線輸入,進行模擬信號的采樣,再將采樣后的數字信號存放于數據寄存器中,以供軟件進行讀取(CPU或者DMA方式),存儲的數據是經過參考電壓比較后,按照12bits 進行換算得到。
ADC輸入范圍:Vref- ≤ Vin ≤ Vref+
ADC 時鐘
ADC 的輸入時鐘 ADCCLK 不能超過 14MHz(Datasheet規定)它是由PCLK2經分頻產生。
轉換模式
支持單次轉換和連續轉換,顧名思義,單次轉換就僅僅只進行一次轉換,然后就將值寫入數據寄存器,連續轉換時不間斷的進行ADC操作,并將值寫入到數據寄存器。
通道描述
ADC有兩組通道:規則通道組和注入通道組。
規則通道組:相當于你正常運行的程序。
注入通道組:就相當于中斷。在你程序正常執行的時候,中斷是可以打斷你的執行的。同這個類似,注入通道的轉換可以打斷規則通道的轉換, 在注入通道被轉換完成之后,規則通道才得以繼續轉換。
也就是說,注入通道可以來打斷當前正在進行的規則的 ADC 數據轉換,暫時理解成為優先級的概念即可。
● 規則通道組:由多達16個轉換組成。規則通道和它們的轉換順序在ADC_SQRx寄存器中選擇。規則組中轉換的總數應寫入ADC_SQR1寄存器的L[3:0]位中。
● 注入通道組:由多達4個轉換組成。注入通道和它們的轉換順序在ADC_JSQR寄存器中選擇。注入組里的轉換總數目應寫入ADC_JSQR寄存器的L[1:0]位中。
也就是說,在規則通道組,支持 16 路模擬信號同時輸入,并進行這些通道的模擬信號轉數字信號的采樣,注入通道也是一樣。
中斷描述
● 如果一個規則通道被轉換:
─ 轉換數據被儲存在16位ADC_DR寄存器中
─ EOC(轉換結束)標志被設置
─ 如果設置了EOCIE,則產生中斷。
● 如果一個注入通道被轉換:
─ 轉換數據被儲存在16位的ADC_DRJ1寄存器中
─ JEOC(注入轉換結束)標志被設置
─ 如果設置了JEOCIE位,則產生中斷。
通道掃描
此模式用來掃描一組模擬通道。
掃描模式可通過設置 ADC_CR1 寄存器的 SCAN 位來選擇。一旦這個位被設置,ADC 掃描所有被 ADC_SQRX 寄存器(對規則通道)或 ADC_JSQR (對注入通道)選中的所有通道。在每個組的每個通道上執行單次轉換。在每個轉換結束時,同一組的下一個通道被自動轉換。如果設置了CONT位,轉換不會在選擇組的最后一個通道上停止,而是再次從選擇組的第一個通道繼續轉換。
如果設置了DMA位,在每次EOC后,DMA控制器把規則組通道的轉換數據傳輸到SRAM中。而注入通道轉換的數據總是存儲在ADC_JDRx寄存器中
校準
ADC有一個內置自校準模式。校準可大幅減小因內部電容器組的變化而造成的準精度誤差。在校準期間,在每個電容器上都會計算出一個誤差修正碼(數字值),這個碼用于消除在隨后的轉換中每個電容器上產生的誤差。
建議在每次上電后執行一次校準。
啟動校準前, ADC 必須處于關電狀態 (ADON=’0’) 超過至少兩個 ADC 時鐘周期。
采樣時間
ADC 的轉換時間不僅僅和 ADC 的時鐘有關,還和采樣時間有關,ADC使用若干個ADC_CLK周期對輸入電壓采樣,采樣周期數目可以通過 ADC_SMPR1 和 ADC_SMPR2 寄存器中的SMP[2:0]位更改。每個通道可以分別用不同的時間采樣。
ADC 的轉換時間的計算公式是:Tconv = 采樣時間+ 12.5個周期
例如:當ADCCLK=14MHz,采樣時間為1.5周期,Tconv = 1.5 + 12.5 = 14周期 = 1μs
環境描述
參考電壓中,單板上Vref-直接接到了 GND,Vref+接到了Vcc 3.3V。
單板上,使用分壓電阻進行模擬輸入,電阻可調,并使用 PC1 端口進行輸入
配置過程
配置過程分為三段:
● GPIO 口的配置
● DMA 的配置
● ADC 的配置
GPIO 口的配置
static void SK_ADC1GPIOInit(void)
{
GPIO_InitTypeDef stGpioInit;
/* Enable ADC1 and GPIOC clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
/* Configure PC.01 as analog input */
stGpioInit.GPIO_Pin = GPIO_Pin_1;
stGpioInit.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &stGpioInit);
}
DMA 的配置
DMA配置,使用了 DMA1 通道,故配置 DMA1 的相關寄存器:
1. 開啟 DMA1 時鐘
2. 復位 DMA1
3. 配置外設地址和數據傳送的內存地址
4. 數據傳送方向為外設-->內存
5. 數據傳送大小為 1 個(half word,16bit)
6. 關閉內存和外設地址增長
7. 配置內存數據和外設數據寬度為 16bit
8. 配置循環模式
9. 配置優先級,同時禁用mem2mem
static void SK_ADC1DMAInit(void)
{
DMA_InitTypeDef stDMA_Init;
/* Enable DMA clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* DMA channel1 configuration */
DMA_DeInit(DMA1_Channel1);
stDMA_Init.DMA_PeripheralBaseAddr = ADC1_DR_Address;
stDMA_Init.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
stDMA_Init.DMA_DIR = DMA_DIR_PeripheralSRC;
stDMA_Init.DMA_BufferSize = 1;
stDMA_Init.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
stDMA_Init.DMA_MemoryInc = DMA_MemoryInc_Disable;
stDMA_Init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
stDMA_Init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
stDMA_Init.DMA_Mode = DMA_Mode_Circular;
stDMA_Init.DMA_Priority = DMA_Priority_High;
stDMA_Init.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &stDMA_Init);
/* Enable DMA channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
}
ADC 的配置
由于測試的應用場景較為簡單,很多用法都用不到,故在配置的時候,就沒有使能:
比如模擬看門狗,注入轉換,雙 ADC 等等,這里只使用了最簡單的單通道的 ADC
配置流程如下:
1. 首先配置 ADC 時鐘,由于 ADC 的時鐘最大支持 14MHz,系統主頻為 72MHz,分給 PCLK2 也為 72MHz,而 ADC 的分頻器支持的分頻系數僅為:2/4/6/8,暫時設置成為 8 分頻,即 72/8 = 9MHz
2. 配置 ADC 為獨立模式(雙模式選擇中配置)
3. 關閉 SCAN 模式(多路 ADC 使用到,單路就暫時不用)
4. 開啟連續轉換模式
5. 關閉外部觸發,由軟件獨立觸發
6. 數據右對齊
7. 轉換通道數目為 1個規則通道
由于這里沒有使用到注入通道和外部觸發,所以少配置很多寄存器。
8. 配置 ADC 1的 Ch11 的采樣時間和規則采樣的通道數目
9. 開啟 ADC1 的 DMA
10. 開啟并喚醒 ADC1
11. 初始化校準寄存器并進行 ADC1 的校準
void SK_ADC1Init(void)
{
ADC_InitTypeDef stADC_Init;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/// Step 1 : Configure I/O Pin First
SK_ADC1GPIOInit();
/// Step 2 : Configure DMA
SK_ADC1DMAInit();
/// Step 3 : PCLK2 div in 8, ADC CLK => 9Mhz
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
/// Step 4 : Configure Basic function of ADC1
stADC_Init.ADC_Mode = ADC_Mode_Independent;
stADC_Init.ADC_ScanConvMode = DISABLE;
stADC_Init.ADC_ContinuousConvMode = ENABLE;
stADC_Init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
stADC_Init.ADC_DataAlign = ADC_DataAlign_Right;
stADC_Init.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &stADC_Init);
/// Step 5 : Configure Ch11 sample rate
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);
/// Step 6 : Enable ADC1 DMA
ADC_DMACmd(ADC1, ENABLE);
/// Step 7 : Enable ADC1
ADC_Cmd(ADC1, ENABLE);
/// Step 8 : Reset Calibration Register
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
/// Step 9 : Start Calibration
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
/// Step 10 : Software trigger ADC1
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
最后別忘了,12 bit 精度對應的是 4096 的顆粒度,即,將得到的數字劃分成為 4096 份,轉換成為電壓的話,就是:
(float)ADC_ConvertedValue/4096*3.3
上一篇:STM32F103ZET6 — USART
下一篇:STM32F103ZET6 — EXTI
推薦閱讀
史海拾趣
非常抱歉,由于BITECH公司并非我所熟知的特定電子行業公司,我無法直接提供關于其發展的具體故事。同時,要準確描述一個公司的發展故事,需要詳細的數據和事實支持,而這些信息通常需要直接從公司本身或相關報道中獲取。
然而,我可以嘗試構建一個關于電子行業中某家公司發展故事的框架,供您參考。這些故事可能會涉及公司的創新、市場擴張、技術突破、合作伙伴關系以及行業挑戰等方面。
故事一:創新引領發展
BITECH公司自創立之初,便以技術創新為核心競爭力。公司研發團隊不斷推出具有顛覆性的電子產品,如高效能電池、智能傳感器等,這些產品在市場上取得了巨大成功。公司通過持續創新,不僅提升了自身品牌影響力,還為整個電子行業的發展做出了重要貢獻。
故事二:市場擴張戰略
隨著產品線的不斷豐富和技術的日益成熟,BITECH公司開始實施市場擴張戰略。公司積極拓展國內外市場,通過參加國際展會、建立海外銷售網絡等方式,將產品推向全球。同時,公司還針對不同市場需求,定制個性化產品解決方案,贏得了眾多客戶的青睞。
故事三:技術突破助力成長
在電子行業競爭激烈的背景下,BITECH公司不斷尋求技術突破。公司投入大量研發資源,成功攻克了一系列關鍵技術難題,如5G通信、人工智能等。這些技術突破不僅提升了公司產品的競爭力,還為公司帶來了新的增長點。
故事四:合作伙伴關系共贏
BITECH公司注重與產業鏈上下游企業的合作,建立了廣泛的合作伙伴關系。通過與供應商、客戶以及同行業企業的緊密合作,公司實現了資源共享、優勢互補,共同推動電子行業的發展。
故事五:應對行業挑戰
在電子行業發展過程中,BITECH公司也面臨著諸多挑戰,如市場競爭加劇、技術更新換代迅速等。然而,公司始終保持敏銳的市場洞察力,及時調整戰略方向,通過加強內部管理、提升產品質量、優化服務體系等方式,成功應對了這些挑戰,實現了穩健發展。
請注意,以上僅為故事框架,具體內容需要根據實際情況進行填充。如需獲取關于BITECH公司或其他電子行業公司的真實發展故事,建議您查閱相關新聞報道、行業分析或公司年報等資料。
隨著全球電子市場的不斷擴張,First Silicon公司意識到單一市場已無法滿足其長遠發展需求。于是,公司制定了全球化戰略,通過設立海外研發中心、生產基地和銷售網絡,實現了從研發、生產到銷售的全球化布局。這一戰略不僅有效降低了公司的運營成本,還極大地提升了其品牌影響力和市場份額。在全球化進程中,First Silicon還積極與當地企業開展合作,共同推動電子技術的進步和應用。
Eska公司注重技術傳承與創新發展。作為奧地利唯一一家仍在為手套制造業培訓學徒和技術工人的企業,Eska堅持手套傳統工藝和技術的秉承。同時,公司也積極引入新技術和新材料,不斷提升產品的性能和質量。這種技術傳承與創新相結合的發展模式,使得Eska在保持傳統優勢的同時,也能不斷適應市場的變化和發展。
MACOM公司上市后,成功募得了充足的資金,使其財務能力得到了顯著增強。這使得公司能夠有更多的資源進行研發、生產和市場推廣,進一步鞏固其在電子行業的地位。同時,上市也為MACOM帶來了更廣泛的投資者關注和市場認可,為其未來的發展提供了有力支持。
自成立以來,蘇州鋒馳不斷投入研發力量,致力于技術創新。公司成功研發出152、153、2501等系列單片機產品,這些產品廣泛應用于消費電子、小家電等產業,贏得了市場的廣泛認可。隨著技術的不斷積累,蘇州鋒馳還不斷推出新產品,以滿足客戶日益多樣化的需求,進一步鞏固了其在行業內的地位。
隨著國內市場的逐漸飽和,AVA電子開始將目光投向國際市場。公司制定了詳細的國際化戰略,包括拓展海外市場、建立海外銷售渠道、加強與國際同行的合作等。AVA電子積極參加國際性的行業展會和論壇,與國際客戶建立了廣泛的聯系;同時,公司還加大了對海外市場的宣傳力度,提高了品牌在國際市場的知名度。這些舉措不僅為公司帶來了更多的商機,也提升了公司在國際市場的地位。
請注意,以上故事是基于AVA電子的公開信息和一般電子科技公司的發展規律進行創作的,并非真實事件。如果需要更具體、更詳細的故事,建議直接查閱AVA電子的官方資料或相關新聞報道。
在一個過程塊中,可以用兩種不同的方式對信號變量或表達式進行連續賦值。 § 過程連續賦值往往是不可以綜合的,通常用在測試模塊中。 § 兩種方式都有各自配套的命令來停止賦值過程。 §   ...… 查看全部問答∨ |
|
呵呵,上次10月份最佳解惑獎送的MP4,打開看,原來是Jz4725的方案,果真小巧啊。按照君正方案以往的風格,應該是能夠hack的,所以跑RT-Thread沒問題就是不知道液晶屏是否能夠正常驅動起來。Jz4725,是MIPS32兼容的芯片,運行在360MHz,解碼rmvb都沒 ...… 查看全部問答∨ |
圈圈前面幾個STM32的程序是直接拿例子來改的,但我們總不能每次都拿別人的例子來改吧?我們要學會如何自己來創建一個屬于自己的IAR工程。 首先啟動IAR開發環境。如果你的設置是在啟動時出現Em ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析