精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

RT-Thread記錄(十四、I/O 設備模型之ADC設備)

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-07-04 12:28 ? 次閱讀
RT-Thread ADC 設備學習使用

目錄

前言

一、ADC 采樣基礎

  • 1.1 ADC 通道
  • 1.2 ADC 分辨率
  • 1.3 ADC 采樣計算

二、ADC 設備操作函數

  • 2.1 查找 ADC 設備
  • 2.2 使能/關閉 ADC 通道
  • 2.3 讀取采樣值

三、ADC 設備示例

  • 3.1 ADC 設備使用步驟
  • 3.2 測試

結語

前言

我曾經考慮過把 RT-Thread 常用的設備都寫完,其實通過前面的《全面認識 RT-Thread I/O 設備模型》文章學習,以及 UARTPIN設備的學習分析,對于 RT-Thread 其他的一些設備 自己看資料基本都可以用起來了,都是同樣的思路,自己寫寫程序測試都可以用起來了。

再加上 RT-Thread 有很多軟件包,正真的我們實際的普通應用中需要自己寫的也不會太多(除非你使用的設備傳感器是小眾品牌或者新品,那根據前面文章也刻意自己嘗試把驅動寫好),所以我再簡單的測試幾個典型的設備,設備驅動篇也就算更新完了。

本文相對比較輕松,測試一下簡單的 ADC 設備。

??
本 RT-Thread 專欄記錄的開發環境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發環境 及 配合CubeMX開發快速上手)
RT-Thread記錄(二、RT-Thread內核啟動流程 — 啟動文件和源碼分析)
??
RT-Thread 設備篇系列博文鏈接:
RT-Thread記錄(十、全面認識 RT-Thread I/O 設備模型)
RT-Thread記錄(十一、I/O 設備模型之UART設備 — 源碼解析)
RT-Thread記錄(十二、I/O 設備模型之UART設備 — 使用測試)
RT-Thread記錄(十三、I/O 設備模型之PIN設備)

一、ADC 采樣基礎

ADC(Analog-to-Digital Converter) 模數轉換器,把模擬信號轉化為數字信號,比較簡單。在我們測試之前簡單的說明 ADC 使用的幾個基本點:

1.1 ADC 通道

對于現在的 MCU 來說,一般都有 ADC 引腳,將需要檢測的模擬量連接至對應的 IO 口,做好配置就能使用,對于我們測試使用的 STM32 來說,其 ADC 通道對應關系我在以前 STM32 筆記文章中有過記錄,如下表格:

poYBAGLCbHKAa5RPAAcVMifkNbI987.png

1.2 ADC 分辨率

分辨率以二進制(或十進制)數的位數來表示,一般有8位、10位、12位、16位等。

對于我們測試使用的 STM32F1xx 系列的芯片來說,他們的 ADC 最大支持12位,這個在 STM32 芯片手冊中可以看到:

pYYBAGLCbHKAAu4gAACrI8F4YwM689.png

截圖是為了說明很多資料其實都是官方文檔中會說明,當然官方文檔是英文版本的,再次聲明一下,學習一個芯片最好的資料就是官方文檔 。

很多常見的問題你或許可以網上搜索就能找到,但是如果一個新的芯片,網上參考資料少,你得想起來官方文檔!

分辨率是什么概念?

比如一個ADC設置為 12 位的分辨率,2 的12 次方 = 4096,簡單來說就是這個 ADC 設備把他的量程分為 4096 份:0 ~ 4095 最大值 4095 就等于他量程的最大值。
一般來說我們使用 STM32 VDDA引腳都是直接連接3.3V,所以STM32 ADC的量程為 0~ 3.3V 。如果讀到 4095 的ADC 值,就表示讀到的電壓為 3.3V 。

至于12位分辨率是除 4095 還是 4096 ,這個其實網上各有說法,用 4095 的可能占大多數,實際上結果相差不大。

1.3 ADC 采樣計算

我們 ADC 讀取到的是數字量,數字量表示并不直觀,所以一般我們最終還是要轉化成模擬量,轉化的公式在以前 STM32 使用記錄文章中也有過,如下圖:

poYBAGLCbHOAeOKJAAPxoehgz5A255.png

根據上文說明,只要在電路設計的時候 STM32 的 VDDA 引腳是直接與3.3V 連接的,就可以用如下公式計算:

最終讀出的電壓值 = VDDA(一般來說是3.3V)* 讀到的 ADC 的值(理解為實際讀到了多少份)/ 4095 (12位分辨率)。

二、ADC 設備操作函數

從本文開始我們就不分析設備的驅動實現原理了,前面的 UART 和 PIN 設備已經很透徹了,感興趣大家都可以自己查看源碼分析。

ADC設備操作函數,還是比較簡單的,就4個:

poYBAGLCZzyADGsfAAA4mliadAQ953.png

2.1 查找 ADC 設備

rt_device_find以前就見過的,I/O 設備模型通用的查找函數:

/*
參數 	描述
name 	ADC 設備名稱
返回 	——
設備句柄 	查找到對應設備將返回相應的設備句柄
RT_NULL 	沒有找到設備
*/
rt_device_t rt_device_find(const char* name);

但是這里需要額外說明的是,使用此函數查找 ADC 設備需要強制轉換一下,我們定義用來接收的設備句柄不是使用rt_device_t ,而應該使用rt_adc_device_t

pYYBAGLCbHOAUzZ8AAAqCKEnoj4327.png

2.2 使能/關閉 ADC 通道

根據自己使用的 GPIO 引腳(對應上文 ADC 通道表格),對 ADC 通道進行使能和關閉。

使能 ADC 通道:

/*
參數 	描述
dev 		ADC 設備句柄
channel 	ADC 通道
返回 	——
RT_EOK 		成功
-RT_ENOSYS 	失敗,設備操作方法為空
其他錯誤碼 	失敗
*/
rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel)

關閉 ADC 通道:

/*
參數 	描述
dev 		ADC 設備句柄
channel 	ADC 通道
返回 	——
RT_EOK 		成功
-RT_ENOSYS 	失敗,設備操作方法為空
其他錯誤碼 	失敗
*/
rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel)

2.3 讀取采樣值

/*
參數 	描述
dev 	ADC 設備句柄
channel 	ADC 通道
返回 	——
讀取的數值 	
*/
rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel)

三、ADC 設備示例

ADC的原理以及操作函數都比較簡單,我們在 RT-Thread Studio 使用 ADC 設備,反倒是他的使用步驟需要稍微注意一下:

3.1 ADC 設備使用步驟

我們以前講過,在 RT-Thread 工程中,所有的外設的配置都是在 board.h 文件中,我們可以查看其中關于 ADC 使用步驟的注釋:

poYBAGLCbHOAXaFjAACrhZX1Q-g924.png

1、首先,在 RT-Thread Studio 工程中,打開 RT-Thread Settings,使能 ADC 驅動,如下圖所示:

pYYBAGLCbHSAIEfVAAFsYJyEWP8574.png

接著上圖的操作,通過組件欄目打開 ADC 驅動,退出保存:

poYBAGLCbHSAUdINAADwG9WEf9M160.png

2、 宏定義 #define BSP_USING_ADC1(這里需要確定自己準備使用哪一個 ADC):

pYYBAGLCbHSAA-IEAAAmCZYAoIw361.png

3、找一個 ADC 初始化的代碼,通過STM32CubeMX 配置:

我們按照系列文章第一篇:RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發環境 及 配合CubeMX開發快速上手) 來使用STM32CubeMX 進行配置:

poYBAGLCbHWASGpSAADSLFBeSnU763.png

設置完成后記得看一下 ADC 時鐘部分:

pYYBAGLCbHWAGA1sAABVmu0w8Vc041.png

完成后直接生成代碼(不要打開,回到 RT-Thread Studio 如果彈出界面點擊確認)然后可以發現工程中已經更新了 adc.h

poYBAGLCbHWAWhkDAABtSegU3Jo329.png

到這一步,我們已經能夠找到我們需要的 HAL_ADC_MspInit 文件了,通過 adc.h 頭文件找到 adc.c 文件中的這個函數:

pYYBAGLCbHWAYn7NAACcIPdDkpc979.png

4、 把HAL_ADC_MspInit 函數復制到 board.c 文件最后面,如下圖:

poYBAGLCbHaAAC7eAADL34-IhXo402.png

5. 修改 stm32xxxx_hal_config.h 文件,使能 ADC 模塊:

這里我們要注意下一下,我們使用過 STM32CubeMX ,所以這個文件的位置發生了變化,這個在以前講過,具體看圖:

pYYBAGLCbHaABCWiAADBzangBvA528.png

其實我們使用 STM32CubeMX 設置過 ADC 以后,這最后一步我們不需要修改,因為在文件中 CubeMX已經修改好了:

poYBAGLCbHeASCByAAAqoMVH9Gg462.png

到這里,ADC 的配置就算全部完成了,我們可以直接在應用程序中,使用 ADC 設備操作函數實現ADC 的讀取。

3.2 測試

基于上面的步驟,我們直接在應用層調用接口,直接放一張圖說明:

pYYBAGLCbHeARkelAACHpWKNvT8634.png

測試結果:

poYBAGLCbHeAWXMOAABT1r9y5Oo312.png

開發板的供電不是標準的3.3V,而是3.28V,所以最終結果計算出來有點誤差= =!

結語

本文學習的 ADC 設備操作使用比較簡單,反倒是他的使用配置相對來說復雜一點。

寫完 ADC 設備,計劃再測試一個 SPI 設備,就要做設備驅動小結了,I/O 設備模型部分其實前面幾篇博文學會了,也就會了,其他的只不過是需要花時間看一看。

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

    關注

    98

    文章

    6430

    瀏覽量

    544074
  • 函數
    +關注

    關注

    3

    文章

    4304

    瀏覽量

    62427
  • RT-Thread
    +關注

    關注

    31

    文章

    1272

    瀏覽量

    39919
收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(十、全面認識 I/O 設備模型

    學完 RT-Thread 內核,從本文開始熟悉了解 RT-Thread I/O 設備管理相關知識。
    的頭像 發表于 06-30 10:38 ?4089次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十、全面認識 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設備</b><b class='flag-5'>模型</b>)

    RT-Thread記錄(十一、UART設備—源碼解析)

    一文帶你深入理解 RT-Thread I/O 設備模型 — UART 設備源碼分析。
    的頭像 發表于 07-01 11:24 ?5370次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十一、UART<b class='flag-5'>設備</b>—源碼解析)

    RT-Thread記錄(十二、UART設備—使用測試)

    從 UART 設備開始學會使用 RT-Thread I/O 設備模型
    的頭像 發表于 07-02 12:42 ?4908次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十二、UART<b class='flag-5'>設備</b>—使用測試)

    RT-Thread記錄(十三、I/O 設備模型PIN設備

    講完UART設備之后,我們已經熟悉RT-Thread I/O 設備模型了,回頭看看基本的 PIN
    的頭像 發表于 07-03 11:28 ?4615次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十三、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設備</b><b class='flag-5'>模型</b><b class='flag-5'>之</b>PIN<b class='flag-5'>設備</b>)

    RT-Thread記錄(十五、I/O 設備模型SPI設備

    本文學習一下I/O 設備模型SPI設備使用,I/
    的頭像 發表于 07-04 15:46 ?3911次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十五、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設備</b><b class='flag-5'>模型</b><b class='flag-5'>之</b>SPI<b class='flag-5'>設備</b>)

    RT-Thread 的 IO 設備模型框架是由哪些部分組成的呢

    RT-ThreadI/O 設備模型框架是由哪些部分組成的呢?接下來由小編給大家詳細介紹一下。1、R
    發表于 03-11 18:17

    【原創精選】RT-Thread征文精選技術文章合集

    RT-Thread記錄(十二、UART設備—使用測試)RT-Thread記錄(十三、I/
    發表于 07-26 14:56

    RT-Thread設備模型框架及創建注冊設備的實現

    RT-Thread設備模型框架及創建注冊設備的實現方式介紹如下:
    的頭像 發表于 05-28 10:38 ?2143次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>設備</b><b class='flag-5'>模型</b>框架及創建注冊<b class='flag-5'>設備</b>的實現

    RT-Thread文檔_I/O 設備模型

    RT-Thread文檔_I/O 設備模型
    發表于 02-22 18:31 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設備</b><b class='flag-5'>模型</b>

    RT-Thread文檔_ADC 設備

    RT-Thread文檔_ADC 設備
    發表于 02-22 18:33 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>ADC</b> <b class='flag-5'>設備</b>

    RT-Thread文檔_I2C 總線設備

    RT-Thread文檔_I2C 總線設備
    發表于 02-22 18:35 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I</b>2C 總線<b class='flag-5'>設備</b>

    RT-Thread文檔_PWM 設備

    RT-Thread文檔_PWM 設備
    發表于 02-22 18:35 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_PWM <b class='flag-5'>設備</b>

    RT-Thread文檔_SPI 設備

    RT-Thread文檔_SPI 設備
    發表于 02-22 18:36 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_SPI <b class='flag-5'>設備</b>

    RT-Thread文檔_Pulse Encoder 設備

    RT-Thread文檔_Pulse Encoder 設備
    發表于 02-22 18:39 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_Pulse Encoder <b class='flag-5'>設備</b>

    RT-ThreadI/O設備模型與分類

    RT- ThreadI/O設備模型(簡稱“設備
    的頭像 發表于 10-11 17:12 ?647次閱讀
    <b class='flag-5'>RT-Thread</b>的<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>設備</b><b class='flag-5'>模型</b>與分類