用HAL庫改寫江科大的stm32入門例子8-1 DMA數據轉運

實驗1-實驗目的:通過DMA把buffer的數據搬運到buffer2當中。

//declare a buffer to store the data
uint32_t buffer[3] = {1,2,3};//declare a buffer to store the data
uint32_t buffer2[3] = {0,0,0};

DMA:是個搬運數據的小助手。

相關設置:

main函數中搬運數據:

  HAL_DMA_Start(&hdma_memtomem_dma1_channel1, (uint32_t)buffer, (uint32_t)buffer2, 10);

so easy!? one line code~

觀察結果:

首先把buffer? buffer2 右鍵加入watch:

其次斷點運行代碼:

最后再watch窗口觀察變量。

實驗2-串口與DMA配合使用:

?

代碼如下:

uint8_t  t=0x11;HAL_UART_Transmit_DMA(&huart1,&t,1);

運行效果:

DMA +串口接收數據:

也就是一行代碼:

uint8_t buffer2[3] = {0x00,0x00,0x00};
...
main(){...HAL_UART_Receive_DMA(&huart1,buffer2,3);
}

當數據接收完后,會產生中斷:

// interupt callback function for DMA1_Channel5_IRQn
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1) {// if the data is received successfully, the data will be sent back to the senderHAL_UART_Transmit_DMA(&huart1,buffer2,3);//start the DMA-usart1 recevie data,data save to buffer2HAL_UART_Receive_DMA(&huart1,buffer2,3);}
}

看結果:?

另外,可以利用空閑中斷接收不定長數據,但就我個人習慣而言,優先用定長數據,這也應該更合理,本文就不展開這些內容了。

(空閑中斷也是三個方式)

直接上空閑中斷回調函數代碼,不多解釋了。

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart->Instance == USART1) {// if the data is received successfully, the data will be sent back to the senderHAL_UART_Transmit_DMA(&huart1,buffer2,3);//start the DMA-usart1 recevie data,data save to buffer2HAL_UARTEx_ReceiveToIdle_DMA(&huart1,buffer2,3);}
}

ps:

如果要開啟調試,必須配置SYS

在一般工程中,通用的配置是開啟時鐘(RCC配置)、以及HAL初始化配置(SYS配置)。本文主要講解SYS配置。

SYS配置頁各配置項

CubeMX 中 SYS配置頁如下:

Debug :
默認是關閉的,如果不使用調試器關閉即可,即No Debug;
在STM32CubeMX的SYS選項欄中有SW和JTAG協議選項,用戶可以根據需要選擇相應的協議;

JTAG調試接口(JTAG-DP)需要5個引腳;CubeMX中可選擇5pin或4pin的JTAG,5pin比4pin多了一個復位引腳。
SW調試接口(SW-DP)需要2個引腳。二者之間有復用引腳。SW調試端口采用同步串行協議:SWCLK引腳為從主機到從機的時鐘信號;SWDIO為雙向數據信號。

ST-Link采用的是SW調試接口,選擇Serial Wire ;
J-Link采用的是JTAG調試接口,根據實際要求選擇 JTAG(4pin) 或者 JTAG(5pin) ;
如果使用J-Link 但是采用SWD協議,也可以選擇Trace Asynchronous Sw ;
Trace Asynchronous Sw 模式有時候也可以解決使用ST-Link 燒錄之后無法燒錄和調試的情況

為了避免一次燒錄之后無法下一次燒錄或者調試的情況, 推薦選擇Serial Wire

如果在STM32CubeMX中選擇SW協議,MDK 也必須 選擇SW協議。JTAG協議配置也同理。否則會造成下載和調試失敗。在實際項目中SW協議使用使用的比較多,速度更快,占用的引腳更少,推薦配置成SW協議,即Serial Wire模式;

System Wake-Up :
設置低功耗模式下的自動喚醒功能,通過引腳PA0。

Timebase Source :
一般指HAL的時基,即HAL庫中的uwTick,用于實現HAL_Delay()以及作為各種timeout時鐘的基準。一般情況下直接選擇默認的Sys Tick(嘀嗒定時器)來維護SYS Timebase Source即可,即直接放在SysTick_Handler()中斷服務函數中,也就是下面的HAL_IncTick()函數。
?

MDK中對應的調試設置

在魔術棒設置界面,進入(1)Debug界面,在(2)位置選擇自己使用的下載器,然后進入(3)Settings界面;

在Settings界面 ,根據之前在STM32CubeMx里面SYS設置的,進行選擇這里使用的SW還是JTAG協議;
注意STM32CubeMx 和 MKD 里面協議要一致,否則無法進行調試

補充

單片機的三種燒錄模式
ICP:使用SWD接口進行燒錄,如J-Link燒錄器和J-Flash軟件配合使用。
ISP:使用引導程序(Bootload)加上外圍UART/USB等接口進行燒錄。
IAP:軟件自身實現在線電擦除和編程的方法,不使用任何工具。程序通常分成兩塊,分別為引導程序和應用程序。

CubeMX代碼生成器配置

Copy all used libraries into the project folder
將HAL庫的所有.C和.H都復制到所建工程中
優點:這樣如果后續需要新增其他外設又可能不再用STM32CubeMX的時候便會很方便
缺點: 體積大,編譯時間相比于其他選項非常長

Copy only the necessary library files
只復制所需要的.C和.H
優點:體積相對小,編譯時間短,并且工程可復制拷貝
缺點: 新增外設時需要重新用STM32CubeMX導入

Add necessary library files as reference in the toolchain project configuration file
不復制文件,直接從軟件包存放位置導入.C和.H
優點:體積小,比較節約硬盤空間
缺點: 復制到其他電腦上或者軟件包位置改變,就需要修改相對應的路徑

根據自己需求選擇就行,一般來說第一個和第二個都行;


參考:CSDN博主「Dir_xr」原文鏈接:https://blog.csdn.net/Dir_x/article/details/128846252

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10498.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10498.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10498.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Baidu Comate:釋放編碼潛能,革新軟件開發

Baidu Comate Baidu Comate,智能代碼助手,憑借著文心大模型的強大支撐,結合了百度多年的編程實戰數據和豐富的開源資源,形成了一款嶄新的編碼輔助利器。它不僅具備著高智能、多場景、價值創造的特質,更可廣泛應用于各…

實物仿真平臺設計方案:927-8路GMSL視頻注入回灌的自動駕駛半實物仿真平臺

8路GMSL視頻注入回灌的自動駕駛半實物仿真平臺 一、平臺介紹 產品基于8路GMSL視頻注入回灌的自動駕駛半實物仿真平臺旨在提高實驗室及研究生院師生在基礎軟件層開發、計算機視覺和深度學習方面的專業知識學習和實踐能力,為師生提供一個穩定軟件開發和多精度框…

匯編個位數求和實驗

title: 匯編求和實驗 keywords: 匯編 tags: [匯編] categories: 嵌入式 匯編求和實驗 剛開始學習匯編 給大家做個參考 實驗 5 子程序 5.1 實驗目的 ①掌握利用堆棧傳遞參數的子程序調用方法。 ②過程調用偽指令:PROC,ENDP,NEAR和FAR。 ③8088…

神經網絡權重初始化學習

在神經網絡中,權重初始化是一個關鍵步驟,它影響著模型的訓練效率和最終性能。使用正態分布作為初始值是一種常見且有效的策略,尤其是在深度學習中。 原理 為何使用分布初始化? 如果所有權重初始化為相同的值(如全零初…

hive日常使用時忘記部分補充(不定時)

1、date_formate、unix_timestamp、from_unixtime用法: 2、lag()、lead()用法: lag()窗口函數返回分區中當前行之前行(可以指定第幾行)的值。 如果沒有行,則返回null。 lead()窗口…

pytest + yaml 框架 - 錄制接口轉 yaml 用例實現

pytest yaml 框架基本不用寫 python 代碼,只需寫yaml 文件用例就能實現接口自動化。 現在引入接口錄制功能,連 yaml 文件也不用寫了,點點點就能生成 yaml 用例文件了。 錄制功能在v1.3.4版本上實現 pip instal pytest-yaml-yoyo 環境準備 …

如何使用 ArcGIS Pro 制作地震動畫

在做某些匯報的時候,除了圖文,如果有動畫肯定會成為加分項,這里為大家介紹一下如何使用 ArcGIS Pro 制作地震動畫,希望能對你有所幫助。 添加時間 在圖層屬性內,選擇時間選項卡,圖層時間選擇每個要素具有…

鎵未來助力聯想筆記本GaN適配器標配化,賦能高效用戶體驗

鎵未來賦能筆記本電腦GaN適配器標配化 據悉,Lenovo 2024年推出搭配的多款新型筆記本原裝適配器電源ADL100UDGC3A,采用了鎵未來集成型Cascode技術氮化鎵功率器件G1N65R150PB。新款方案相較上一代工藝,體積減小23%,重量降低18%&…

秋招算法刷題10(棧和隊列)

0509 232.用棧實現隊列 class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop…

13.跳躍游戲

文章目錄 題目簡介題目解答解法一&#xff1a;貪心算法&#xff0b;動態規劃代碼&#xff1a;復雜度分析&#xff1a; 題目鏈接 大家好&#xff0c;我是曉星航。今天為大家帶來的是 跳躍游戲面試題 相關的講解&#xff01;&#x1f600; 題目簡介 題目解答 思路&#xff1a;這…

Vue3知識總結-2

目錄 通過key來管理狀態 事件處理 內聯事件處理器 方法事件處理器 事件傳參 獲取event 傳遞參數 傳參的過程中獲取事件對象 事件修飾符 阻止事件描述符 阻止事件冒泡 數組變化偵測 變更方式 替換一個數組 計算屬性 Class綁定 綁定對象 綁定數組 Style綁定 …

【Python 常用腳本及命令系列 3.3 -- Python 統計程序執行時間】

請閱讀【嵌入式開發學習必備專欄】 文章目錄 Python 統計程序執行時間 Python 統計程序執行時間 在Python中&#xff0c;可以使用time模塊來測量執行一個函數所需的時間。以下是一個基本的例子&#xff0c;展示了如何實現這一功能&#xff1a; import time def your_function…

element-plus 工作經驗總結

Element-plus 文章目錄 Element-plus忠告: 最好鎖定版本, 免得更新更出 BUG 來了el-drawer 設置 modal"false" 后, 遮罩元素仍存在, 點不了空白的地方el-tree 大數據量時接收 check-change 事件報錯導致涉及多個節點的操作沒執行完畢el-table 表頭 show-overflow-too…

前端小程序調用 getLocation 實現地圖位置功能,通過 緯度:latitude 經度: longitude 獲取當前位置

1、首先登錄一下 騰訊的位置服務 有賬號就登錄沒賬號就注冊&#xff0c; 點擊右上角的控制臺點擊左側的應用管理 ---> 我的應用 ---->> 創建應用 1、創建應用 2、列表就會顯示我們剛剛創建好的 key 3、點擊添加 key 4、按照要求填寫信息 我們用的是小程序 所以選擇…

二叉樹介紹

引入 定義 區別 定義不同 形態不同 基本形態

AD域服務器巡檢指南

Active Directory (AD) 域服務器的巡檢對于確保企業網絡的安全性和高效運行至關重要。以下是針對AD域服務器巡檢的關鍵活動和其重要性的優化描述&#xff1a; 保證系統安全&#xff1a; AD域服務器儲存大量敏感數據&#xff0c;包括用戶賬戶信息、策略和訪問權限數據。定期巡檢…

windows和 Linux 下通過 QProcess 打開ssh 和vnc

文章目錄 SSHSSH驗證啟動SSH一、口令登錄二、公鑰登錄通過Qprocess 啟動ssh VNC Viewer簡介通過QProcess啟動vncViewer SSH Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應用層基礎上的**安全網絡協議**。它是專為遠程登錄會話(**甚至可以…

uniapp下拉選擇組件

uniapp下拉選擇組件 背景實現思路代碼實現配置項使用尾巴 背景 最近遇到一個這樣的需求&#xff0c;在輸入框中輸入關鍵字&#xff0c;通過接口查詢到結果之后&#xff0c;以下拉框列表形式展現供用戶選擇。查詢了下uni-app官網和項目中使用的uv-ui庫&#xff0c;沒找到符合條…

微信小程序中的圖像奧秘:圖片與Base64的華麗變身記

微信小程序中的圖像奧秘&#xff1a;圖片與Base64的華麗變身記 基本概念解析圖片與Base64的關系為何轉換 圖片轉Base64實戰微信小程序使用wx.getImageInfo獲取圖片信息圖片轉換為Base64注意 Base64轉圖片直接在小程序頁面顯示云開發環境轉換注意 遇遇問題排查思路結語引發討論 …

前端開發工程師——ajax

express框架 終端輸入 npm init --yes npm i express 請求報文/響應報文 // 1.引入express const express require(express);// 2.創建應用對象 const app express();// 3.創建路由規則 // request:是對請求報文的封裝 // response&#xff1a;是對響應報文的封裝 app.get(…