女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

lhl545545 ? 來(lái)源:ST MCU 信息交流 ? 作者:ST MCU 信息交流 ? 2020-06-10 08:38 ? 次閱讀

我們?cè)?a target="_blank">MCU嵌入式應(yīng)用開(kāi)發(fā)過(guò)程中,有時(shí)需要做些較大量的數(shù)據(jù)傳輸和適時(shí)處理,此時(shí)使用DMA的雙緩沖模式可能是個(gè)不錯(cuò)的選擇。這樣既可以保障數(shù)據(jù)的連續(xù)、流暢傳輸,又能保障數(shù)據(jù)的及時(shí)處理【包括數(shù)據(jù)更新】,同時(shí)又能減輕CPU的負(fù)荷。

常有人想使用STM32 DMA的雙緩沖模式,但又覺(jué)得實(shí)現(xiàn)起來(lái)似乎有點(diǎn)困難,也不太容易找到現(xiàn)存的例程。我這里就基于STM32F4芯片及Cube庫(kù)簡(jiǎn)單地演示下實(shí)現(xiàn)過(guò)程。

STM32的DMA硬件雙緩沖模式,只支持從外設(shè)到內(nèi)存或從內(nèi)存到外設(shè)兩種應(yīng)用場(chǎng)景,且工作在循環(huán)模式。內(nèi)存到內(nèi)存是不支持雙緩沖模式的,當(dāng)然它也不支持DMA循環(huán)模式。【下圖截取于STM32F4的參考手冊(cè)】

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

關(guān)于STM32 DMA雙緩沖模式實(shí)現(xiàn)原理不復(fù)雜,這里就不贅述了。下面進(jìn)入到示例的實(shí)現(xiàn)過(guò)程。【注:手機(jī)模式下圖片可以點(diǎn)擊放大查看】

我這里大致要做的事情就是,ADC模塊對(duì)5個(gè)模擬通道進(jìn)行循環(huán)掃描采樣轉(zhuǎn)換,ADC結(jié)果由DMA搬到相應(yīng)存儲(chǔ)緩沖區(qū)。每一輪傳輸完成后,自動(dòng)切換傳輸線(xiàn)路并使用另一個(gè)存儲(chǔ)區(qū),繼續(xù)新一輪傳輸。兩條傳輸線(xiàn)路就這樣輪流執(zhí)行,不過(guò)使用的DMA傳輸流或通道還是同一個(gè)。本例中的DMA傳輸流程如下圖示意。至于數(shù)據(jù)搬到各存儲(chǔ)區(qū)后怎么辦,視應(yīng)用而定,在此不表。

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

現(xiàn)在開(kāi)始借助于STM32CubeMx圖形化配置工具做基本的配置并生成初始化文件。

**對(duì)ADC做些基本配置。開(kāi)啟了ADC1的5個(gè)通道,做連續(xù)、掃描轉(zhuǎn)換。ADC轉(zhuǎn)換的啟動(dòng)選擇軟件啟動(dòng)模式。

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

**對(duì)ADC的DMA請(qǐng)求及DMA傳輸做相關(guān)配置。具體配置見(jiàn)下圖。

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

**將其它必需的時(shí)鐘、調(diào)試口等配置完成后即可生成初始化代碼并建立工程。

**在CubeMx生成的初始化代碼基礎(chǔ)上,添加用戶(hù)代碼。

一、這里準(zhǔn)備了兩個(gè)數(shù)組用來(lái)存儲(chǔ)ADC的轉(zhuǎn)換結(jié)果。

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

二、我基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼。代碼內(nèi)容詳見(jiàn)下圖。

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

上圖中A、B、C、D四部分是我基于當(dāng)前應(yīng)用而添加的用戶(hù)代碼,在此稍作解釋。

代碼A,使能ADC外設(shè)并稍作延時(shí),令其穩(wěn)定下來(lái)。

代碼B,準(zhǔn)備了幾個(gè)跟DMA傳輸完成及出錯(cuò)有關(guān)的回調(diào)函數(shù)。三個(gè)回調(diào)函數(shù)我共用一個(gè),這里圖省事了。實(shí)際應(yīng)用時(shí)請(qǐng)具體調(diào)整。

代碼C,調(diào)用DMA雙緩沖模式的關(guān)鍵函數(shù)。

代碼D,使能ADC事件的DMA請(qǐng)求功能并軟件啟動(dòng)AD轉(zhuǎn)換。

三、編譯、除錯(cuò)后,運(yùn)行看結(jié)果。下面截圖是我在調(diào)試過(guò)程中隨意截取的。ADC的輸入通道中有2個(gè)通道分別固定接GND和VDD,其它3個(gè)通道的輸入管腳懸空,數(shù)據(jù)波動(dòng)大屬正常現(xiàn)象。

基于STM32F4系列芯片和STM32CubeF4 HAL庫(kù)組織和添加用戶(hù)代碼

到此,基于STM32DMA雙緩沖的功能演示就結(jié)束了。是不是感覺(jué)很方便而簡(jiǎn)單呢?

個(gè)人認(rèn)為,要實(shí)現(xiàn)上面功能盡量看懂相關(guān)庫(kù)函數(shù)的基本功能,并對(duì)相應(yīng)外設(shè)的工作有基本的了解,畢竟還是需要自行組織部分代碼的。如果說(shuō)只知生硬地調(diào)用現(xiàn)有庫(kù)函數(shù),那實(shí)現(xiàn)起來(lái)還是有困難。

另外,即使調(diào)用庫(kù)函數(shù),在給函數(shù)的參變量賦值時(shí)注意別給錯(cuò)了。大部分類(lèi)似問(wèn)題編譯器能發(fā)現(xiàn),有些是發(fā)現(xiàn)不了的。比方源地址和目標(biāo)地址編譯器是辨別不了的。

還有,基于庫(kù)函數(shù)編程時(shí),如果庫(kù)函數(shù)里已經(jīng)就某些變量或參數(shù)給出了定義或規(guī)劃,就盡量用它準(zhǔn)備的,除非你發(fā)現(xiàn)相關(guān)定義或規(guī)劃不合理或有錯(cuò)。前不久一個(gè)STM32用戶(hù),在初始化RTC日歷時(shí)給星期賦予了一個(gè)不正確的值導(dǎo)致RTC的時(shí)間運(yùn)行異常。本來(lái)庫(kù)代碼已經(jīng)對(duì)從星期日到星期六明確地做了宏定義供我們使用【這樣做本身就可以一定程度防止出錯(cuò)】,結(jié)果他在調(diào)試時(shí)直接賦數(shù)據(jù),不小心給了不合理的數(shù)據(jù)沒(méi)及時(shí)發(fā)現(xiàn),導(dǎo)致程序異常。然后反饋說(shuō)庫(kù)代碼有bug。算bug嗎?可以算是也可以不是。如果初始化時(shí)按照人家預(yù)備好的宏參數(shù)來(lái)賦值就不會(huì)在這個(gè)地方折騰一把。
責(zé)任編輯:pj

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

    關(guān)注

    459

    文章

    52199

    瀏覽量

    436290
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4887

    瀏覽量

    70264
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32F3系列STM32F4系列STM32L4系列STM32L4+系列Cortex-M4編程手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《STM32F3系列STM32F4系列STM32L4系列
    發(fā)表于 06-06 17:06 ?0次下載

    基于STM32 HAL庫(kù)與標(biāo)準(zhǔn)庫(kù)的esp8266接入機(jī)智云方案(二)

    在《基于STM32HAL庫(kù)與標(biāo)準(zhǔn)庫(kù)的esp8266接入機(jī)智云方案(一)》中,我們?cè)敿?xì)介紹了硬件連接和機(jī)智云客戶(hù)端的創(chuàng)建。本篇將重點(diǎn)講解如何下載代碼、分析下載的
    的頭像 發(fā)表于 05-28 18:02 ?185次閱讀
    基于<b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>與標(biāo)準(zhǔn)<b class='flag-5'>庫(kù)</b>的esp8266接入機(jī)智云方案(二)

    STM32開(kāi)發(fā)入門(mén)進(jìn)階必備!《STM32嵌入式系統(tǒng)開(kāi)發(fā)—基于STM32CubeMX和HAL庫(kù)》新書(shū)發(fā)布!

    近日,由華清遠(yuǎn)見(jiàn)教育科技集團(tuán)精心編撰的教育部高等學(xué)校電子信息類(lèi)專(zhuān)業(yè)教學(xué)指導(dǎo)委員會(huì)規(guī)劃教材、普通高等教育電子信息類(lèi)專(zhuān)業(yè)系列教材——《STM32嵌入式系統(tǒng)開(kāi)發(fā)—基于STM32CubeMX和HAL
    的頭像 發(fā)表于 04-03 14:54 ?599次閱讀
    <b class='flag-5'>STM32</b>開(kāi)發(fā)入門(mén)進(jìn)階必備!《<b class='flag-5'>STM32</b>嵌入式系統(tǒng)開(kāi)發(fā)—基于<b class='flag-5'>STM32</b>CubeMX和<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>》新書(shū)發(fā)布!

    Arduino中可以使用STM32F1或者STM32F4系列芯片的內(nèi)置看門(mén)狗嗎?

    Arduino中可以使用STM32F1或者STM32F4系列芯片的內(nèi)置看門(mén)狗嗎
    發(fā)表于 03-13 07:32

    使用STM32F4的ADC的時(shí)候,發(fā)現(xiàn)測(cè)量結(jié)果不準(zhǔn)確,是什么原因?qū)е碌模?/a>

    請(qǐng)教各位大佬一個(gè)問(wèn)題,我在使用STM32F4的ADC的時(shí)候,發(fā)現(xiàn)測(cè)量結(jié)果不準(zhǔn)確。上網(wǎng)查看教程,發(fā)現(xiàn)F1系列有自動(dòng)校準(zhǔn)的函數(shù),但是F4沒(méi)有校準(zhǔn)相關(guān)的設(shè)置,想請(qǐng)教一下是
    發(fā)表于 03-11 06:29

    stm32f4 sdio時(shí)鐘如何獲取通過(guò)什么函數(shù)?

    stm32f4系列sdio 時(shí)鐘如何獲取,stm32h7可以通過(guò)sdmmc_clk=HAL_RCCEx_GetPeriphCLKFreq(STM32
    發(fā)表于 03-07 08:26

    STM32CubeMX生成的代碼,是怎樣的HAL架構(gòu)?

    需要注意,CubeMX只是一個(gè)初始化工具,它只是幫你完成了HAL庫(kù)外設(shè)和時(shí)鐘的初始化,具體程序的編寫(xiě)還需要查閱HAL庫(kù)的說(shuō)明,使用相關(guān)函數(shù)實(shí)現(xiàn)你想實(shí)現(xiàn)的功能。CubeMX生成的
    的頭像 發(fā)表于 01-01 21:01 ?656次閱讀
    <b class='flag-5'>STM32</b>CubeMX生成的<b class='flag-5'>代碼</b>,是怎樣的<b class='flag-5'>HAL</b>架構(gòu)?

    HAL庫(kù)STM32開(kāi)發(fā)中的重要性

    HAL庫(kù)(Hardware Abstraction Layer Library,硬件抽象層庫(kù))在STM32開(kāi)發(fā)中扮演著至關(guān)重要的角色。以下是HAL
    的頭像 發(fā)表于 12-02 13:35 ?1186次閱讀

    STM32項(xiàng)目實(shí)戰(zhàn):基于STM32F4的智能燈光控制系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

    《智能燈光控制系統(tǒng)_STM32F4》項(xiàng)目完整文檔、項(xiàng)目源碼,私信小雯老師免費(fèi)領(lǐng)取。STM32項(xiàng)目實(shí)戰(zhàn)之“智能燈光控制系統(tǒng)”(基于STM32F4)今天小編來(lái)分享一個(gè)《智能燈光控制系統(tǒng)》的項(xiàng)目案例,硬件
    的頭像 發(fā)表于 10-17 16:16 ?1681次閱讀
    <b class='flag-5'>STM32</b>項(xiàng)目實(shí)戰(zhàn):基于<b class='flag-5'>STM32F4</b>的智能燈光控制系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

    STM32F4 HAL庫(kù)下CAN發(fā)送導(dǎo)致FLASH報(bào)錯(cuò)怎么解決?

    [td]芯片型號(hào)為:STM32F407VET6。使用CubeMX配置并生成HAL庫(kù)。 在工程中,配置了CAN1和CAN2。并且調(diào)用了函數(shù)HAL
    發(fā)表于 09-09 08:27

    【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植到 GD32F4xx 系

    GD32F4xx 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F4xx系列 MCU
    的頭像 發(fā)表于 09-06 09:40 ?2374次閱讀
    【GD32 MCU 移植教程】8、從 <b class='flag-5'>STM32F4</b>xx <b class='flag-5'>系列</b>移植到 GD32<b class='flag-5'>F4</b>xx 系

    課程上線(xiàn) | STM32單片機(jī)入門(mén)教程(1)基于HAL庫(kù)的多核心開(kāi)發(fā)(F1/F4/G0/U5)

    ?好消息!華清遠(yuǎn)見(jiàn)STM32入門(mén)視頻課程《基于HAL庫(kù)STM32多核心開(kāi)發(fā)》正式上線(xiàn),已更新90講,持續(xù)更新中,8月份將全部上線(xiàn)。課程優(yōu)勢(shì)真人出鏡,手把手教學(xué)一板玩轉(zhuǎn)
    的頭像 發(fā)表于 08-08 16:42 ?683次閱讀
    課程上線(xiàn) | <b class='flag-5'>STM32</b>單片機(jī)入門(mén)教程(1)基于<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>的多核心開(kāi)發(fā)(<b class='flag-5'>F</b>1/<b class='flag-5'>F4</b>/G0/U5)

    STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx中文手冊(cè)

    STM32F4系列單片機(jī)中文手冊(cè)
    發(fā)表于 08-08 14:32 ?2次下載

    自制一款兼容STM32F1/F4芯片的飛控板

    自己制作的一款兼容STM32F1/F4芯片的飛控板。
    發(fā)表于 07-04 14:07 ?0次下載

    STM32F4系列有對(duì)PI/SI仿真要求的文件嗎?

    STM32F4系列有對(duì)PI/SI仿真要求的文件嗎?比如PDN Targets and Decoupling Example SI信號(hào)要求
    發(fā)表于 07-02 06:26