色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

【有那么點詳細的CW32學習筆記】ADC“自動模式”

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2024-03-04 18:09 ? 次閱讀

上個章節介紹了ADC的基本框架和用法,本章節會較為全面地講解如何靈活地使用ADC功能。

通常來說,外設執行的各種命令都是由CPU發出的,比如我們需要進行AD轉換,就通過某個寄存器標志位啟動ADC,隨后用判斷函數去檢測執行情況,亦或是開啟中斷功能,轉換完成之后會提示CPU,再由CPU判斷接下來該做什么。

這當然沒問題,不過有些時候,我們需要實現一些循環重復的功能,比如在做傅里葉分析的時候,需要按照固定間隔采集一定數量的數據,比如采樣率1000Hz,共采集1024個數據。為了實現這個目標,當然可以使用軟件定時實現,也可以使用定時器外設,在中斷服務函數中直接進行AD轉換來定時獲取數據,但數據很多,若是還要進行快速傅里葉變換,CPU會在定時器中斷中花費很多時間來采集數據,留給計算的時間就少了很多。有一種方案可以完美解決這類問題,不僅可以保證數據采集的精確性,還幾乎不需要CPU參與,那就是使用定時器觸發ADC轉換,而AD轉換完成之后會由DMA進行數據搬運,若CPU需要使用這批數據,直接訪問數據進行讀取即可 。具體的邏輯關系如下圖所示。

圖片

這種組合涉及到DMA、ADC、定時器的使用,文章將詳細介紹上圖的聯動過程。

  • 按照順序,首先是定時器觸發AD轉換。

前文也提到過,一般來講可以用軟件開關去啟動AD轉換,此處并沒有用到這一功能,而是使用定時器觸發,這是一種硬件觸發方式,且觸發源不屬于ADC外設本身,故而也是一種外部觸發方式。在ADC外設的配置項中,可以設置AD轉換的開啟是否由外部信號觸發,只要ADC能正常使用,再配置好外部觸發源,我們就能用外部硬件信號觸發AD采集了。

注意!在實際使用中,外部觸發源不一定非得是定時器,它也可以是某個片外模塊提供的事件電平(完成事件會改變指定IO的電平,就和中斷一樣),最簡單的就是按鍵觸發的IO中斷。

  • 接下來是第二個部分,DMA功能的配置。

DMA,全名叫直接存儲器訪問,這個外設可以像CPU一樣訪問單片機內部的各個存儲區(包括RAM和外設寄存器),但它只能做一件事情,就是數據搬運。通俗來說,數據存放在0-9共10個格子里面,DMA可以把這10個數據搬運到其他地方(并不會改變原本的值,效果類似賦值語句),而其他地方可以是同一個地方(將10個數據按順序搬運10次,最終一層層覆蓋到同一個地址),也可以是不同地方(將10個數據搬運10次并最終存放在10個不同地址的存儲空間)。

總體上來講DMA只做搬運這一個功能,除了搬運轉換完成的AD數據,他還能用于各種數據接口(比如UART、SPI等),或是其他需要大量賦值的場合。

注意!****DMA并不能完全代替CPU進行數據轉移,因為DMA*不像* CPU那樣擁有全部存儲區域的訪問權限。

  • 最后是定時器的配置,這一部分沒什么變化,就是選擇一個可以用來觸發AD采集的定時器,按需求配置即可。不過需要注意的是,記得把溢出中斷打開,這個是AD轉換的啟動開關

介紹完了每一步需要做的事情,下面說說代碼應該怎么寫。我會貼出主要代碼,對于一些變量我會做說明但不做代碼展示(變量什么的自己隨便定義一個就行了呀!)

圖片

這段就是正常配置一個定時器,本案例中選擇的是通用定時器2,根據手冊,它可以觸發AD采集。

圖片

除最后一行,其余代碼與上一章節的初始化過程沒太大差別,只需把DMA功能開啟即可。這里補充一下其他配置項的說明:

  1. 時鐘頻率和采樣時鐘周期,如上一章說到的,采樣時間當然是越長越好,其中的時鐘頻率就是ADC外設從內部時鐘電路獲得的時鐘信號,頻率越高,ADC速度越快,這個時鐘速度一定程度上決定了一個ADC的最大采樣速率(1秒內完成的轉換次數)。
  2. 右對齊設置。AD轉換的結果是存放在一個寄存器里面的,它本質上是個二進制數,右對齊就是將轉換結果的第0位放到最右邊,高位不為1的補0,若仍不清楚,可自行百度。
  3. 轉換結果累加。為滿足一些需求,ADC結果可能需要進行數據處理來減小誤差,求加權平均值是一種很常用的辦法,該功能開啟之后,每次轉換的結果都會直接累加,方便開發者取出后直接求平均值(所以實際上不要這個功能也可以)。
  4. 我們使用的是定時器觸發采樣,所以只需要使用單次采集模式就行了,ADC會在每次轉換完成之后停止并等待下一次采集的啟動信號(定時器溢出中斷)。

總的來說,一定記住要把外部觸發打開并綁定定時器2,隨后只要定時器2的標志位被置位一次,ADC就會啟動一次。

相對來說比較麻煩的是DMA的配置,要配置一個DMA,首先需要確定數據搬運的起點和終點 ,我們搬運的起點只有一個,就是ADC轉換結果寄存器,搬運的終點是一個1024大小的數組,其中起點被稱為源地址,終點被稱為目標地址,且這兩個地址都可以設置成自增模式(完成一次搬運之后,地址自動+1)。

圖片

關于DMA的初始化,DMA通常會有不止一個通道,每個通道都能獨立進行數據搬運,初始化函數需要開啟DMA的時鐘總線,打開要用的DMA通道的中斷。

圖片

關于DMA的啟動和配置:

傳輸模式 :DMA幫助CPU進行數據搬運,這難免會出現DMA和CPU傳輸沖突的情況,非鎖定傳輸會在DMA搬運數據的間隔內預留時間間隙,必要時候CPU會搶占對外設的訪問權限,屆時CPU可進行數據傳輸,DMA只能等待CPU放棄對該外設的使用權限后才能繼續自己的數據傳輸。相對應的,還有鎖定傳輸,具體的功能在用戶手冊DMA章節有詳細介紹。

傳輸位寬 :根據需要搬運的數據長度進行選擇即可。

觸發方式和觸發源 :由于我們需要的是在AD轉換完成之后立刻進行數據搬運,所以DMA的觸發方式選擇為硬件觸發,觸發源應該設置為ADC轉化為完成,這會讓DMA在每次ADC轉換完成之后都進行一次數據搬運,且不論ADC處于什么模式。

源地址和目標地址 :源地址設置為ADC數據寄存器,具體的地址有兩種辦法來獲取,一種是用圖中的辦法,對寄存器取地址,另一種辦法是直接查用戶手冊,找到ADC數據寄存器的基地址和偏移量計算得到地址(這種辦法最終填進去的是一個hex數)。目標地址也是直接取地址數組即可。

地址自增 :我們不希望源地址有變動,故源地址設置成不自增;目標地址是一個數組,所以每搬運一次數據都要讓目標地址自增一個元素,這樣下一次搬運的時候,數據就會被正確寫入下一個格子。

傳輸次數 :需求是采集1024個數據,那傳輸次數自然是1024次。

全部配置完后完成DMA的功能初始化,隨后只需要啟動ADC、定時器、DMA功能即可,圖中代碼做了一個開關啟動,方便隨時關閉。關閉的時候清零定時器計數器是為了在下次啟動的時候讓定時采集依然準確。

準備工作基本完成,接下來還剩一些小細節需要處理,我們打開了DMA和定時器的中斷功能,他們會在完成搬運之后進入中斷服務函數,至少得寫個清除標志位的語句,除此之外還要加一些小功能。

圖片

圖片

定時器的中斷服務函數只需要清除標志位即可,DMA的中斷函數除了清除標志位,還需要將采樣功能關掉(至少得把定時器關了)。如果使用的不是定時器觸發,而是ADC的連續采樣模式,需要在這里手動關閉ADC,不然即使DMA完成了搬運,ADC還會繼續進行AD轉換,由于DMA搬運已經完成了,自增的地址也不會自己變回去,之后就會出現“意想不到的”DMA錯誤搬運,但本案例中使用的是單次采集模式,ADC只在啟動之后采集一次,所以不必擔心ADC會連續采樣導致程序異常的問題。

現在快速編寫一個按鍵檢測函數并調用剛剛寫好的啟動代碼,其中的key_down變量會在按鍵中斷服務函數中被置位。

圖片圖片

再在main函數中循環調用這個按鍵檢測函數,按鍵按下抬起后就會自動采集ADC數據,這里我用vofa+上位機顯示一下采集的數據。

圖片

我這里采集的是單片機上定時器1輸出的50Hz方波,占空比為50%,周期為20ms,效果還不錯。

圖片

審核編輯 黃宇

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

    關注

    0

    文章

    110

    瀏覽量

    16845
  • CW32
    +關注

    關注

    1

    文章

    203

    瀏覽量

    626
收藏 人收藏

    評論

    相關推薦

    那么點詳細CW32學習筆記】單片機啟動\庫函數構成

    此篇文章是CW32F030C8T6的參考資料,很詳細,適合初學者。
    的頭像 發表于 08-10 11:13 ?1113次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】單片機啟動\庫函數構成

    那么點詳細CW32學習筆記】通用定時器——輸出比較

    個要點步驟: 有時鐘源輸入、計數器工作、一個可以比較的值(自動重裝載值) 。其工作流程是這樣的:計數器會隨著時鐘源對時鐘源提供的脈沖進行計數,計數值不斷上漲(或下降),如果計數值和自動重裝載值一樣,
    的頭像 發表于 12-28 11:24 ?1311次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】通用定時器——輸出比較

    那么點詳細CW32學習筆記】看手冊配置時鐘樹

    本章針對CW32F030C8T6的時鐘樹進行詳細解析,續第一章啟動文件的相關講解。
    的頭像 發表于 08-17 14:54 ?976次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】看手冊配置時鐘樹

    那么點詳細CW32學習筆記】模數轉換器

    來說,想要判斷大小就需要有對比,因此該數字指示的電壓大小實際上是一個比較的結果。 ADC將需要測量的電壓信號Ut與已知電壓的信號U作比較,并最終輸出一個數字表示Ut相當于多少比例的U。 接下來就可以看看CW32ADC外設結構框
    的頭像 發表于 02-29 09:41 ?767次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】模數轉換器

    【應用筆記CW32 自舉程序中使用的 ISP 協議

    提供的 ISP 模式,通過 UART 串口方便地實現對 CW32 微控制器片上 FLASH主存儲器的擦除和燒寫。本應用筆記將介紹如何進入 CW32 微控制器 ISP
    發表于 06-06 13:26

    應用筆記(二)| 武漢芯源CW32自舉程序中使用的ISP協議

    CW32微控制器片上FLASH主存儲器的擦除和燒寫。本應用筆記將介紹如何進入CW32微控制器ISP模式,以及所使用的ISP協議,并詳細介紹
    的頭像 發表于 07-11 16:08 ?1444次閱讀
    應用<b class='flag-5'>筆記</b>(二)| 武漢芯源<b class='flag-5'>CW32</b>自舉程序中使用的ISP協議

    CW32 低功耗模式的特性介紹

    CW32系列芯片支持3種工作模式,運行模式、休眠模式以及深度休眠模式,本文以CW32L083為例
    的頭像 發表于 12-30 10:53 ?1138次閱讀
    <b class='flag-5'>CW32</b> 低功耗<b class='flag-5'>模式</b>的特性介紹

    cw32和gd32的區別

    cw32和gd32的區別 CW32和GD32是兩種不同的芯片系列,分別由WCH和GigaDevice公司推出,兩者很多不同之處,下面我們來詳細介紹。 首先從
    的頭像 發表于 08-16 11:15 ?1961次閱讀

    淺談CW32系列模數轉換器(ADC

    CW32系列模數轉換器(ADC
    的頭像 發表于 10-25 15:43 ?1131次閱讀
    淺談<b class='flag-5'>CW32</b>系列模數轉換器(<b class='flag-5'>ADC</b>)

    CW32的SPI單工模式主從通信介紹

    CW32的SPI單工模式主從通信介紹
    的頭像 發表于 10-24 15:50 ?815次閱讀
    <b class='flag-5'>CW32</b>的SPI單工<b class='flag-5'>模式</b>主從通信介紹

    應用筆記-CW32 自舉程序中使用的 ISP 協議

    ,通過UART串口方便地實現對CW32微控制器片上FLASH主存儲器的擦除和燒寫。本應用筆記將介紹如何進入CW32微控制器ISP模式,以及所使用的ISP協議,并
    發表于 06-06 13:37 ?7次下載

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?783次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用

    那么點詳細CW32學習筆記】通用異步收發器—發送篇

    本章介紹CW32通用異步收發器的使用。 雖然大部分時候會被簡單稱為“串口”,但實際上 用“串口”來指代UART并不正確 。串口對應并口的概念,在串口通信中,數據被以二進制形式發送,并且每次發送都只
    的頭像 發表于 11-17 17:30 ?764次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】通用異步收發器—發送篇

    那么點詳細CW32學習筆記】IIC接口-主機發送

    例程鏈接 : https://pan.baidu.com/s/1s1XwqDFkO8fK4SRSTKsNhA?pwd=mshk 提取碼 :mshk 本章將介紹CW32的IIC接口,并最終點亮一塊
    的頭像 發表于 01-11 09:53 ?618次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】IIC接口-主機發送

    那么點詳細CW32學習筆記】IIC接口-OLED驅動

    ,實際上就是密集LED點陣,所以必定有用于控制大量LED燈的驅動器,本教學使用的OLED驅動是SSD1306,該驅動器多種通信接口,這里使用IIC接口(具體使用什么接口,數據手冊上會有詳細介紹) 根據SSD1306數據手冊的描述,該設備的從機地址取決于SA0的電平,但
    的頭像 發表于 01-11 09:49 ?749次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】IIC接口-OLED驅動
    主站蜘蛛池模板: 午夜免费啪视频观看视频| 欧美日韩一区在线观看| 久久影院毛片一区二区| 快播看av| 日本69xxxxx| 小777论坛| 真人裸交有声性动态图| 97精品国产自产在线观看永久| lesbabes性欧美| 粉嫩AV国产一区二区福利姬| 国产亚洲精品AV片在线观看播放| 精品久久久久久久99热| 免费黄色网址在线观看| 日日摸夜夜添无码AVA片| 亚州精品视频| 最新高清无码专区| 抽插内射高潮呻吟爆乳| 黑人干肥婆| 嫩草国产福利视频一区二区| 视频一区国产在线二区| 一区二区三区福利视频| acg全彩无遮挡口工漫画网址| 国产AV白丝爆浆在线播放| 精品午夜国产福利观看| 欧美性受xxxx狂喷水| 亚洲 欧美 视频 手机在线| 最近韩国日本免费观看mv免费版| 大胸美女脱内衣黄网站| 九九热在线免费观看| 日本xxxx69动漫| 亚洲综合中文| 成都电影免费中文高清| 好大好爽好深舒服死了| 嫩草影院在线观看网站成人| 羞羞一区二区三区四区片| 91羞羞视频| 好男人在线视频| 日本欧美午夜三级| 伊人亚洲综合青草青草久热| 东北老妇xxxxhd| 久久伊人天堂视频网|