在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

測試代碼中使用DMA傳輸,定時器觸發ADC

茶話MCU ? 來源:ST MCU 信息交流 ? 2020-08-10 16:22 ? 次閱讀

有人在使用STM32G0芯片的ADC模塊時,往往因為掃描模式的理解不到位或選擇不當導致些問題。這里就該話題做點簡單分享介紹,不妨以一個實例展開。

現在共用到ADC1模塊的4個ADC通道,即1個片內Vrefint通道和其它三個外部通道CH8,CH10,CH17。下面測試代碼中使用DMA傳輸,定時器觸發ADC.

它們的硬件連接情況如下,其中VRefint為內部參考電壓,其電壓值大概1.2V樣子。

對于STM32G0系列,ADC掃描模式可以有兩種,分別是不完全配置序列模式和完全配置序列模式。我們先看看不完全配置序列模式。

不完全配置序列模式

在該模式下,ADC_CFGR1寄存器中的CHESELRMOD位必須被清零。

被轉換通道的掃描順序按照ADC通道固有序號的大小順序依次進行,掃描方向可以軟件配置為向前【forward】或后退【backward】。任何ADC通道都可以配置進該序列中,總的序列長度由寄存器ADC_CHSELR中被置位的CHSELx個數決定,最多可配置18個通道。

我們以上面提到的CH8、CH10、CH17和VRefint通道【它對應ADC通道CH13】為例,若將上述4個通道配置為不完全序列模式,只需將ADC_CHSELR寄存器中的CHSELx相應位進行置1即可。如下圖所示:

若選擇forward掃描模式,則按通道號從小到大的順序依次實施轉換,生成對應于CH8、CH10、CH13、CH17的結果。使用STM32CubeMx的配置如下:

既然掃描按默認通道號大小順序進行,自然就無須RANK順序的配置了。

編譯運行后可以看到結果,我在內存里放了兩組數據以便比較觀察。

從結果來看跟實際情況是一致的,轉換結果依次來自CH8/CH10/CH13/CH17。其中那個149x數值來自對內部Vrefint的轉換結果。

那么,對于同樣的ADC通道及硬件連接,若采用完全配置序列模式會怎么樣呢?

完全配置序列模式

在該模式下,ADC_CFGR1寄存器中的CHESELRMOD位必須被置1。

全序列可支持的通道數最多8個,掃描順序不是依照硬件約定的通道號來安排,而是依據ADC_CHSELR寄存器中的從SQ1[3:0]到SQ8[3:0]所選擇的通道順序進行,即按照我們在CubeMX或代碼中配置的RANK順序進行,不再涉及掃描方向forward/backward的配置,并且只有通道0 到 通道14可以被選擇!

還有,當SQn[3:0]里的賦值等于0b1111,即0x0f時則該通道選擇域以及后續SQn的通道選擇無效。比方說,假設SQ3[3:0]的數據為0b1111,則表示從SQ3[3:0]開始直到SQ8[3:0]的通道選擇無效。由于SQn[3:0]才4位,所有它也沒法選擇高于14的有效通道號。【請特別注意這些特性!】

看到這里,我們不禁想到前面預先安排的4個通道中的有個CH17,顯然不適合這種模式。如果被錯誤地強行使用該模式,基于CubeMx配置和現有Cube庫所產生的代碼運行結果會怎么樣呢?

先用CubeMX進行配置:

4個通道的掃描順序配置如下,相比前面多了RANK順序配置。

先撇開CH17合法性不談,不難看出這里跟前面的掃描順序配置有點不一樣,這里的配置為我們提供了更多的自主性及便利性,轉換掃描并不固定于通道號的順序,具體由SQn[3:0]的配置選擇決定。我這里讓SQ1選擇CH8,SQ2選擇CH10,SQ3選擇CH17,SQ4選擇CH13,分別對應配置中的RANK1、RANK2、RANK3、RANK4順序。

編譯運行查看結果:

前面說過,CH17硬件上是接地的,顯然此時對應于CH17的轉換值【綠色箭頭所指】跟實際情況完全不符,其它三個倒是跟實際情況吻合。409x對應CH8接VDD,0對應CH10接GND,149x對應內部vrefint。

我嘗試將CH17接到VDD,轉換結果還是跟實際情況還是完全不相符。

結合上面的介紹,我們知道對于完全配置序列模式不能選用高于通道14的通道號。我們不妨通過寄存器進一步看看,當我們錯誤地強行使用CH17時在現有庫代碼的情況下,對應的SQ3[3:0]真正的值是多少?到底選擇了什么通道?還是CH17嗎?

在調試環境下,打開通道選擇寄存器,可以看到下面結果:

從上面通道選擇寄存器不難看出,除了SQ3外,其它三個配置都是正確的,跟我們預設的通道是一致的。但是,SQ3被錯誤地配置為CH1了,也就是說上面看到的所謂CH17的轉換結果都是來自CH1.難怪不論怎么改變CH17的外部連接時,SQ3選擇通道所對應的轉換結果沒有相應變化,跟CH17的管腳電壓也沒啥關系。

看到這里有人可能會想,如果我們在前面規劃ADC通道時把CH1同時規劃進來、硬件上恰好也接地,這時就可能發生誤判!這種巧合性的誤判,有時可能給我們的調試帶來極大隱患而一會半會又找不到原因。當然,具體會發生些什么要因具體應用而定。這里只是簡單提醒下,就此打住。

總之,這點在STM32G0 ADC應用中是個很容易出錯的地方,將本不該用在完全配置序列模式的通道被錯誤地強行使用,雖有轉換結果,而轉換結果卻來自別的通道,往往為此覺得問題詭異、不可思議而備受折騰。

最后,稍微小結下。對于STM32G0系列的ADC模塊來說,其ADC通道在被轉換時涉及到轉換序列配置問題,這里有兩種轉換序列配置模式,即不完全配置序列模式和完全配置序列模式。

所謂不完全配置序列模式,在進行多個通道AD轉換時,轉換順序由各通道自身的硬件序列號和掃描方向決定,其中硬件序列號即CHn在數據手冊里已經明確定義,掃描方向通過寄存器配置。整個轉換序列可支持的通道數多達18個,沒有被排除在外的通道。

而完全配置序列模式呢,在進行多個通道AD轉換時,轉換順序由通道選擇寄存器中通道選擇域SQn[3:0]來決定,即按照SQ1,SQ2.。。。。SQ7,SQ8的順序,而且SQn[3:0]只能選擇CH0到CH14的通道,整個序列最多支持8個通道。顯然,CH15~CH18不能使用該模式。

說到這里,或許有人會問,如果只使用1個ADC通道,還有這個轉換序列模式的選擇問題嗎?你把1個通道看成一個特殊的轉換序列來理解就知道有沒有這個模式選擇問題了。

芯片設計人員在此提供了兩種轉換序列模式,本意旨在讓我們能在實際應用中可以根據實際需求靈活選擇,然而,往往由于開發人員的慣性思維和無視手冊導致在這個地方遇上點麻煩或困惑。在此分享之,祝君好運!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • adc
    adc
    +關注

    關注

    99

    文章

    6652

    瀏覽量

    548422
  • 定時器
    +關注

    關注

    23

    文章

    3289

    瀏覽量

    117397
  • dma
    dma
    +關注

    關注

    3

    文章

    574

    瀏覽量

    102438

原文標題:STM32G0系列ADC掃描序列模式解讀

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    MCU定時器/計數

    RISC-V核低功耗MCU通過靈活的定時器架構、低功耗模式適配及硬件級中斷優化,在工業控制、智能家居等場景中實現高精度計時與能耗控制的協同設計,滿足復雜任務調度與實時響應的雙重需求?。 一、?硬件
    的頭像 發表于 04-27 13:54 ?202次閱讀

    為什么在“PWM Adc Dma 344 S32CT”示例中使用ISR塊來讀取dma adc通道?

    我正在 MBDT 中使用 S32K358 進行一個項目,我正在尋找啟用 DMA 傳輸類型的 ADC 模塊。 在 ADC 示例“PWM
    發表于 04-08 06:39

    STM32H723使用DMA方式實現定時器輸入捕獲只能執行一次嗎?

    目的:我們希望在 STM32H723 平臺上以 DMA 模式實現定時器輸入捕獲,而不中斷當前問題:使用 Cube MX 配置相關參數,只使用 TIM4 的 CH2 作為輸入采集直接模式,Slave
    發表于 03-12 08:21

    STM32H750使用定時器比較通道觸發DMA操作GPIO,偶爾會發生第一個脈沖寬度過短怎么解決?

    RCC配置: DMA設置: 定時器設置: 生成的協議是dshot600 期望產生的效果是一個電平至少為560ns的高低電平 但是在實際測試的過程發現周期性的出現第一個脈沖會非常小的問題,不知道怎么排查 懇請各位能不能
    發表于 03-11 06:11

    STM32H743的高精度定時器觸發ADC采樣

    compare 1 上處產生觸發信號給ADC。根據網上的教程也一步步試過了,但是hrtim總是啟動不了ADC。為了方便排查所以目前沒有使用DMA進行轉運數據,也沒有寫轉運數據的處理函
    發表于 01-09 15:49

    定時器已安排!開發小白看過來~

    或周期性地執行代碼段,為物聯網設備的運行提供了精確的時間控制。在多種應用場景中都發揮著重要作用,例如:定時發送數據、周期性檢查傳感狀態等。 Air201最新資料下載: www.air201.cn 本文將通過demo示例,帶你了
    的頭像 發表于 12-31 14:30 ?403次閱讀
    <b class='flag-5'>定時器</b>已安排!開發小白看過來~

    STM32G474如果使用HRTIM A觸發ADC,使用ADCDMA中斷接受數據,該怎么處理呢?

    HRTIM A設置comp3作為ADC觸發源;ADC啟動DMA,并使用DMA中斷來處理ADC數據
    發表于 07-18 08:10

    DMA無法與數字濾波一起工作怎么解決?

    我正在嘗試使用 DMA 通過 16 位 SPI 對 16 位 ADC 進行采樣,并將這些值傳輸到濾波。 我的代碼還需要訪問原始
    發表于 07-17 07:43

    定時器的工作方式介紹

    定時器是計算機和嵌入式系統中常見的一種硬件模塊,用于實現定時和計數功能。定時器的工作方式通常由一組寄存來控制,這些寄存定義了
    的頭像 發表于 07-12 10:29 ?1785次閱讀

    定時器相關的寄存有哪些類型

    在微控制編程中,定時器是一種非常常見的功能模塊,用于實現各種定時和計數功能。定時器的工作原理是通過內部的計數來跟蹤時間的流逝,當計數
    的頭像 發表于 07-12 10:25 ?1593次閱讀

    tc397如何使用定時器的更新事件來觸發dma搬運數據?

    請問有沒有人使用過定時器的更新事件來觸發dma搬運數據,或者哪里有相關的示例代碼,我不知道應該使用gtm模塊的哪個子模塊來做這件事情,有經驗的大佬可否指教下。
    發表于 07-05 06:36

    STM32F103 ADC利用DMA進行采樣遇到的幾個疑問求解

    STM32F103配置了ADC1 的4個通道,利用定時器的事件觸發進行10Hz 的數據采樣,數據通過DMA傳輸。然后希望每次采樣4*50個數
    發表于 07-02 07:04

    G431定時器無法觸發DMA更新DAC值要怎么辦?

    如圖進行初始化配置: DAC配置為TIM2觸發信號觸發DMA配置: 定時器配置: 在初始化后,調用如下函數,啟動DAC與DMA
    發表于 07-02 06:50

    鴻蒙開發系統基礎能力:Timer定時器

    設置一個定時器,該定時器定時器到期后執行一個函數。
    的頭像 發表于 06-28 11:33 ?1388次閱讀
    鴻蒙開發系統基礎能力:Timer<b class='flag-5'>定時器</b>

    使用Arduino的可變定時器繼電器設計

    定時器繼電器,也被稱為時間繼電器,是一種在設定的時間間隔后觸發特定操作的電子元件。它在工業自動化、家庭生活、交通管理等領域具有廣泛的應用。定時器繼電器的主要功能是通過設定特定的時間間隔,來控制電路的通斷,實現設備的自動化操作。
    的頭像 發表于 06-24 16:52 ?1522次閱讀
    使用Arduino的可變<b class='flag-5'>定時器</b>繼電器設計
    主站蜘蛛池模板: 中国农村一级片 | 深爱开心激情 | 激情综合视频 | 美女好紧好大好爽12p | 性久久久久久久 | 久久久五月天 | 天天色资料 | 你懂的在线免费视频 | 免费黄色 | 磁力bt种子搜索在线 | 黑人一区二区三区中文字幕 | 久久在线免费观看 | 天天狠天天透天干天天怕处 | 国产精品情人露脸在线观看 | 黄色字幕网 | 全是肉的高h短篇列车 | 四虎永久免费影院在线 | 亚洲一本| 免费播放特黄特色毛片 | 中文字幕精品一区二区2021年 | 精品一区二区三区免费爱 | 三级黄色片免费观看 | 香焦视频在线观看黄 | 日本黄色一级大片 | 色欧美视频 | 性欧美性 | 男女交性视频播放 视频 视频 | 2018天天操夜夜操 | 69精品在线 | 国产小视频在线免费 | 丁香六月婷婷综合 | 黄网站视频 | fc2 ppv sss级素人美女 | 美女扒开尿口给男人桶视频免费 | 日本三级在线观看免费 | 91日本视频 | 毛片黄| jizjizjizjiz日本护士出水 | 人人干视频在线观看 | 天天操精品 | 手机看片国产免费久久网 |