0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)戰(zhàn)經(jīng)驗(yàn) | STM32U5 ADC 自校準(zhǔn)不成功的問題分析

STM32單片機(jī) ? 來源:未知 ? 2023-12-10 16:45 ? 次閱讀

wKgZomV1e7qAZlHJAAHUHXdxAL4922.gif

關(guān)鍵詞:STM32U5,ADC

目錄預(yù)覽

1、引言

2、問題

3、問題解決

4、小結(jié)

01

引言

很多 STM32 系列中的 ADC 都帶有自校準(zhǔn)的功能。它提供了一個(gè)自動(dòng)校準(zhǔn)的過程,用于驅(qū)動(dòng)包括 ADC 上電/掉電序列在內(nèi)的所有校準(zhǔn)動(dòng)作。在這個(gè)過程中,ADC 計(jì)算出一個(gè)校準(zhǔn)因子,并在內(nèi)部應(yīng)用到此 ADC 模塊,直到下一次 ADC 掉電。在執(zhí)行任何 ADC 操作之前必須校準(zhǔn),以消除芯片之間 ADC 結(jié)果的偏差。

02

問題

2.1. 問題詳情

客戶使用 STM32U575ZIT6Q 驗(yàn)證 ADC4 時(shí),使用 STM32CubeMX 配置后生成工程項(xiàng)目。因?yàn)槭褂?ADC 進(jìn)行采樣轉(zhuǎn)換前,必須要做 ADC 的自校準(zhǔn)。于是在 main 函數(shù)中加入自校準(zhǔn)代碼,如圖 1 所示。

wKgZomV1e7qAY1wgAABT0CW0xu8134.jpg

圖1.代碼:ADC 自校準(zhǔn)

然而,在運(yùn)行代碼的情況下,發(fā)現(xiàn) PC 指針最后跑到這個(gè) Calibration Error 的Error_Handler()里。也就是說,執(zhí)行自校準(zhǔn)失敗了!

再檢查進(jìn)入 Error_Handler()發(fā)生的問題,發(fā)現(xiàn)在執(zhí)行HAL_ADCEx_Calibration_Start()時(shí)陷在了下面這個(gè) Loop 當(dāng)中,如圖 2 所示。

wKgZomV1e7qATXCCAACJk9sCAkM641.jpg

圖2.代碼:等待 ADC 自校準(zhǔn)完成

也就是說,ADCAL 位被置 1 后,始終沒有被硬件清 0,代表自校準(zhǔn)始終不成功。

2.2. 問題分析

查看 STM32U5 的參考手冊(cè) RM0456 中關(guān)于自校準(zhǔn)的描述??紤]到校準(zhǔn)沒有成功,那么應(yīng)該看看是不是自校準(zhǔn)需要哪些條件,而這些條件并沒有成立。

于是,在 ADC 章節(jié)中的 Calibration 小節(jié)找到了這么一段話,如圖 3 所示。

wKgZomV1e7uAdIIgAACWubvvays217.jpg

圖3.ADC 自校準(zhǔn)要求條件

也就是說,在初始化自校準(zhǔn)之前,需要保證 3 個(gè)條件:

1) ADC 的電壓調(diào)整器已經(jīng)使能并正常工作(ADVREGEN = 1 且 LDORDY =1)

2) ADC 沒有打開(ADEN=0)

3) 自動(dòng)掉電模式?jīng)]有使能(AUTOFF = 0)

回到剛才等待 ADC 自校準(zhǔn)完成的代碼,當(dāng)指針停留到這邊時(shí),在線調(diào)試檢查各個(gè)標(biāo)志位情況,發(fā)現(xiàn) ADVREGEN=1,ADEN=0,AUTOFF=0,LDORDY=0。所以,可以肯定的是就是 LDORDY 不為 1,也就是說 ADC 的電壓調(diào)整器還沒有準(zhǔn)備好,導(dǎo)致了自校準(zhǔn)無法成功并退出。

在 STM32U5 中,引入了一個(gè)新的 ADC 特性,叫 ADC 電壓調(diào)整器(ADC voltageregulator)。在使用 ADC 之前,這個(gè)電壓調(diào)整器必須被使能并且能夠穩(wěn)定工作??梢酝ㄟ^將 ADC_CR 寄存器中的 ADVREGEN 位置 1 來使能它,然后必須要等這個(gè)電壓調(diào)整器的啟動(dòng)時(shí)間之后,才可以正常啟動(dòng)自校準(zhǔn)或者使用 ADC。這個(gè) LDO 有沒有準(zhǔn)備好,可以通過 ADC_ISR 寄存器中的 LDORDY 這個(gè)位來判斷。LDORDY=1 才代表了 LDO 已經(jīng)準(zhǔn)備好了。

回到客戶的問題,可以知道即使 ADVREGEN 置 1 了,LDORDY 始終沒有置起來,電壓調(diào)整器沒有啟動(dòng)工作,難道是 ADC 的這個(gè)電壓調(diào)整器壞掉了?

別急,想到電源的問題,還不能忘了參考手冊(cè)的另一個(gè)章節(jié) :電源控制 PWR。翻到PWR 這一章,先要考慮到,與 ADC 相關(guān)的電源為 VDDA,所以要重點(diǎn)查看 VDDA 的內(nèi)容。找到 Independent analog peripherals supply 這一小節(jié),可以看以下關(guān)鍵的句子,如圖 4。

wKgZomV1e7uAZofaAAG5GJGPf38431.jpg

圖4.獨(dú)立的模擬外設(shè)供電

從圖中黃色高亮的文字,我們可以了解到,STM32U5 的 VDDA 在控制上還跟其他系列不一樣,它有一個(gè)開關(guān)來選擇是否隔離。芯片復(fù)位后,VDDA 提供的 ADC 和模擬開關(guān)控制在邏輯和電氣上是隔離的,因此不可用。一旦 VDDA 電源存在,就必須在使用模擬外設(shè)之前,通過在 PWR_SVMCR 寄存器中將 ASV 置位來消除隔離。也就是說,要想使用ADC,必須先將 ASV 置位來消除隔離。

在 PWR_SVMCR 寄存器的解釋中,也可以看到 ASV 位的描述中要求將此位強(qiáng)制置 1才可以使用模擬外設(shè),如圖 5。

wKgZomV1e7uAQJKdAAC6z9jcInY958.jpg

圖5.ASV 位描述

ASV 的配置是沒有在 STM32CubeMX 中進(jìn)行配置的,所以需要在后期添加。所以,很可能就是因?yàn)闆]有將 ASV 置位以使能 VDDA,導(dǎo)致 ADC 外設(shè)被隔離,并沒有得到供電,所以 ADC 的電壓調(diào)整器不可能正常工作,LDORDY 也不可能為 1。

03

問題解決

在工程項(xiàng)目中搜索 ASV,可以找到兩個(gè) API,如圖 6。

wKgZomV1e7uAe3w2AADPvGnknRw460.jpg

圖6.VDDA 使能或禁用 API

也就是說,我們需要先將 HAL_PWREx_EnableVddA()添加到代碼中。因?yàn)槠鋵儆贛SP 硬件配置,所以將其加到 HAL_MspInit()函數(shù),如圖 7 所示。

wKgZomV1e7uACC1ZAACpY3G4lvA520.jpg

圖7.修改過的 HAL_MspInit()函數(shù)

再重新編譯,然后執(zhí)行指令代碼,就可以看到 ADC 的自校準(zhǔn)可以正常完成,PC 指針已經(jīng)可以正常跑到自校準(zhǔn)后面的代碼了。

04

小結(jié)

在 STM32U5 中,為了更好地控制功耗,ADC 中加入電壓調(diào)整器和 VDDA 隔離功能。這與以往的 STM32 有所不同,需要注意一下。使用 ADC 等模擬外設(shè)前,需要注意將PWR_SVMCR 寄存器中將 ASV 置位來消除隔離。

其實(shí)不僅僅是 VDDA 可以隔離,VDDIO2 也是可以的,通過 PWR_SVMCR 寄存器的IO2SV 位進(jìn)行控制。

如果仔細(xì)看過 STM32U5 的 ADC 例程,可以看到 HAL_MspInit()的內(nèi)容是這么寫的,如圖 8 所示。

wKgZomV1e7yAZ9XYAAC98ziGubc031.jpg

圖8.例程的 HAL_MspInit()函數(shù)

可以看到,在 MSP 初始化里,不僅使能了 VDDA,還使能了 VDDIO2。所以要使用VDDIO2 相關(guān) I/O 的,也需要注意一下。

wKgZomV1e7yACjBNAAHiBpzEGaQ725.png

完整內(nèi)容請(qǐng)點(diǎn)擊“閱讀原文”下載原文檔。


原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | STM32U5 ADC 自校準(zhǔn)不成功的問題分析

文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44452

    瀏覽量

    630834
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10846

    瀏覽量

    353701

原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | STM32U5 ADC 自校準(zhǔn)不成功的問題分析

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP-WROOM-02U用esptouch來配置路由器不成功怎么解決?

    我在官網(wǎng)上買了幾片 ESP-WROOM-02U模塊,用esptouch來配置路由器不成功,是不是需要重新下載ESP-WROOM-02U的固件?
    發(fā)表于 07-19 08:28

    STM32H5STM32U5在trustzone上有哪些不同?

    我要做空調(diào)的空中升級(jí)FOTA的方案,需要加密,對(duì)于trustzone功能,采用那款芯片比較合適?STM32H5STM32U5在trustzone上有哪些不同?
    發(fā)表于 07-05 07:03

    使用STM32CUBEMX創(chuàng)建一個(gè)基于RTOS的工程,互斥量創(chuàng)建不成功的原因?

    使用STM32CUBEMX創(chuàng)建一個(gè)基于RTOS的工程,使用了互斥量,但互斥量創(chuàng)建不成功
    發(fā)表于 05-15 07:22

    STM32F103 USB枚舉不成功的原因?

    (NVIC_VectTab_FLASH,0x8800),但此時(shí)USB便枚舉不成功,此時(shí)其他中斷是正常的;但若把APP起始地址改為0X8000000不使用IAP進(jìn)行跳轉(zhuǎn)則枚舉沒有問題.我比較懷疑中斷向量這塊的設(shè)置是不是還有問題,跪求高手幫忙看看.我使用的MCU為STM32F
    發(fā)表于 04-29 06:29

    STM32在中斷中OSFlagPost不成功是為什么?

    STM32在中斷中OSFlagPost不成功,是為什么?
    發(fā)表于 04-23 07:44

    STM32F103RGT6位帶操作不成功的原因?

    各位大神,我是一個(gè)入門級(jí)的超級(jí)菜鳥,遇到一個(gè)問題: 為啥子我同樣的位帶操作在STM32F103C8T6上操作成功,但是在STM32F103RGT6位帶操作不成功
    發(fā)表于 04-19 06:32

    STM32U5,STM32WB及STM32L4開發(fā)板,哪個(gè)開發(fā)板擁有較多數(shù)量的ADC?

    請(qǐng)問,我現(xiàn)在需要開發(fā)一個(gè)項(xiàng)目,在這個(gè)項(xiàng)目中需要使用較多數(shù)量的傳感器(至少8個(gè)),這些傳感器需要進(jìn)行信號(hào)采集,現(xiàn)在在使用STM32U5,STM32WB及STM32L4芯片的開發(fā)板中,哪些開發(fā)板擁有較多數(shù)量的
    發(fā)表于 03-20 08:01

    STM32U5開發(fā)板ADC校準(zhǔn)超時(shí)怎么解決?

    使用的代碼就是官方的例程,我把官方的Cubemx文件另存為另一個(gè)工程之后,重新生成代碼(這樣做是為了保證硬件配置是一致的)。調(diào)用HAL_ADCEx_Calibration_Start進(jìn)行ADC校準(zhǔn)的時(shí)候超時(shí)。同一個(gè)板子用例程就很快完成了
    發(fā)表于 03-18 07:36

    基于STM32U5片內(nèi)溫度傳感器正確測(cè)算溫度實(shí)戰(zhàn)經(jīng)驗(yàn)分享

    STM32 在內(nèi)部都集成了一個(gè)溫度傳感器,STM32U5 也不例外。這個(gè)位于晶圓上的溫度傳感器雖然不太適合用來測(cè)量外部環(huán)境的溫度,但是用于監(jiān)控晶圓上的溫度還是挺好的,以防止芯片過溫運(yùn)行。
    的頭像 發(fā)表于 02-22 17:27 ?3781次閱讀
    基于<b class='flag-5'>STM32U5</b>片內(nèi)溫度傳感器正確測(cè)算溫度<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b>分享

    盤點(diǎn)那些硬件+項(xiàng)目學(xué)習(xí)套件:STM32U5單片機(jī)開發(fā)板及入門常見問題解答

    型號(hào)STM32學(xué)習(xí)感興趣的朋友可以了解?;旧嫌辛?b class='flag-5'>STM32U5經(jīng)驗(yàn),再去學(xué)習(xí)STM32G0/F1/F4核心,就會(huì)上手很快。STM32U5
    發(fā)表于 02-19 16:59

    基于LL庫實(shí)現(xiàn)STM32U5 LPTIM功能

    有人打算使用STM32U5系列片內(nèi)LPTIM做低功耗模式喚醒?;?b class='flag-5'>STM32 LL庫組織代碼,折騰幾天后似乎連中斷都進(jìn)不了,想找找是否有現(xiàn)存LL庫例程可以參考。
    的頭像 發(fā)表于 01-07 14:12 ?1342次閱讀
    基于LL庫實(shí)現(xiàn)<b class='flag-5'>STM32U5</b> LPTIM功能

    初始化AD7190的時(shí)候想進(jìn)行內(nèi)部零電位和內(nèi)部滿量程校準(zhǔn),但是都不成功怎么解決?

    初始化AD7190的時(shí)候想進(jìn)行內(nèi)部零電位和內(nèi)部滿量程校準(zhǔn),但是都不成功。 基本配置程序如下 initAD7190 () {u8 發(fā)送Data[4] /0,0,0} 無效; resetAD7190
    發(fā)表于 12-04 06:27

    navicat導(dǎo)入SQL文件不成功

    Navicat是一款功能強(qiáng)大的數(shù)據(jù)庫管理工具,可以幫助用戶輕松管理和操作數(shù)據(jù)庫。然而,有時(shí)用戶在導(dǎo)入SQL文件時(shí)可能會(huì)遇到問題,導(dǎo)致導(dǎo)入不成功。本文將詳細(xì)介紹導(dǎo)入SQL文件不成功的原因和解
    的頭像 發(fā)表于 11-21 11:01 ?5918次閱讀

    探秘STM32U5安全特性|硬件加解密引擎與軟件算法對(duì)比

    探秘STM32U5安全特性|硬件加解密引擎與軟件算法對(duì)比
    的頭像 發(fā)表于 10-27 10:23 ?1564次閱讀
    探秘<b class='flag-5'>STM32U5</b>安全特性|硬件加解密引擎與軟件算法對(duì)比

    STM32U5 LPBAM模式介紹

    STM32U5 LPBAM模式介紹
    的頭像 發(fā)表于 10-26 17:59 ?667次閱讀
    <b class='flag-5'>STM32U5</b> LPBAM模式介紹