STM32學習筆記(1)——使用Keil MDK以及標準外設庫創建STM32工程

来源:https://www.cnblogs.com/happying30/archive/2018/08/06/9433516.html
-Advertisement-
Play Games

轉載來自:http://emouse.cnblogs.com 1.1 開發工具與開發環境 本節所使用Keil MDK 為目前的最新版V4.21。其他版本差別不大,讀者可以根據自己使用的版本進行操作或者從Keil的官網下載新版本。使用的標準外設庫為目前最新的V3.5版本。使用的開發調試工具為JLINK ...


           轉載來自:http://emouse.cnblogs.com

1.1 開發工具與開發環境

1. 軟體版本

       本節所使用Keil MDK 為目前的最新版V4.21。其他版本差別不大,讀者可以根據自己使用的版本進行操作或者從Keil的官網下載新版本。使用的標準外設庫為目前最新的V3.5版本。使用的開發調試工具為JLINK-V8,使用的驅動版本為V4.08l。

2. 建立工程目錄(第一步)
  • 首先先建立一個用於存放工程的文件夾,此處命名為STM32,
  • 在文件夾下分別建立LIBUSERMDK三個文件夾,分別用於存放標準外設庫文件用戶程式文件工程目錄
  • MDK文件夾下建立ListObj兩個文件夾,分別用於存放在編譯過程中產生的臨時文件輸出文件
  • 接下來拷貝標準外設庫和相應的文件到工程目錄中,
  • 首先拷貝STM32F10x_StdPeriph_Lib_V3.5.0\Libraries文件夾下的兩個文件夾CMSIS和STM32F10x_StdPeriph_Driver到剛剛新建的STM32\LIB目錄下,
  • 接下來拷貝用戶編寫程式的程式文件,此文件可以從標準外設庫自帶的常式中拷貝,從STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA目錄下拷貝main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h四個文件,這四個文件是在編程的時候用戶往往需要根據實際需求進行修改的。並且拷貝至STM32\USER目錄下,system_stm32f10x.c文件定義了系統時鐘等參數並完成微控制器的初始化,標準外設庫中已經有了,這裡可以不拷貝。這樣所需要的文件都已經具備了,如圖 5‑7所示。

 

1.2 MDK的操作與設置(第二步)

1. 新建工程

      首先啟動Keil uVision4,點擊菜單欄Project-New uVision Project,選擇工程的保存位置,保存位置選擇在之前建立的MDK文件夾下,如圖 5‑8所示。

                                     

     在彈出的界面中選擇所使用的晶元信號,筆者使用的晶元型號為STM32F103ZET6,所以選擇STM32F103ZE,如圖 5‑9所示。

                                  

      晶元選擇完成後軟體會彈出一條提示,提示是否要拷貝STM32大容量啟動代碼並添加到工程,由於我們使用新版本標準外設庫中提供的啟動代碼,因此此處選擇。如圖 5‑10所示。

                                  

      接下來就出現了一個空的工程視窗,建立了一個新的工程。

2. 添加程式文件

      在左側Project一欄中對Target 1兩次點擊之後可以重命名,這裡命名為STM32,然後右擊,如所示,單擊Manage Comoonents。出現如所圖 5‑11示界面。

                                                         

        在這個界面里可以更為方便的添加工程的相關文件。也可以在對應的Group上右鍵Add Group和Add Files to Group只是這種方式更方便集中的添加和管理。按照圖 5‑12所示,建立四個Group,點擊Groups一欄右上角clip_image014圖標,依次新建USER、CMSIS、LIB、StartUp四個組,點擊對應的組在點擊右下方Add Files添加相應的文件到對應的組中。

  • USER組中添加USER文件夾下的文件
  • CMSIS組中添加STM32 PJ\STM32\LIB\CMSIS\CM3\CoreSupport文件夾下core_cm3.c文件和STM32\LIB\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夾下system_stm32f10x.c文件。
  • LIB組下添加STM32\LIB\STM32F10x_StdPeriph_Driver\src下的所有文件,這個組的文件也可以根據後面的程式功能添加對應的功能文件。
  • StartUp組下添加STM32\LIB\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm文件夾下startup_stm32f10x_hd.s文件,此文件根據晶元的所屬類型來選擇,STM32F103ZE為大容量器件所以選擇hd結尾的啟動文件。至此,已經將對應的文件全部加入工程中。

                                   

      文件添加完成後的工程管理視窗如圖 5‑13所示。其中CMSIS和LIB組中的文件圖標上有個鑰匙圖案,表示該文件當前為只讀屬性,工程編譯完成後前面會出現一個加號,點擊展開可以顯示當前文件所調用的文件

                                                           

 

3. 參數設置

      接下來需要對工程進行一些參數設置,在中STM32上右擊,選擇第一項Options for Target ‘STM32’,如圖 5‑14所示。

                                                   

       彈出視窗如圖 5‑15所示。在這個視窗中共有10個選項卡,第一個選項卡Device用於選擇使用的器件,由於在新建工程的時候已經選擇這裡可以不用在選擇,當前的工程如果在後期要更換使用的晶元時可以在這個選項卡中更換晶元,同時還要註意更換對應的啟動文件。在Target選項卡中,一般只需要填上使用的晶振頻率即可,其他都可以保持預設。

                                 

       在如圖 5‑16所示Output選項卡中主要註意兩項,一是選擇輸出文件夾,選擇之前工程目錄中MDK文件夾下的Obj文件夾,在下麵還有一個Create HEX File選項,用於選擇是否生成hex文件,如果編譯好的程式要寫片,或者要提供給別人下載到晶元中而不希望別人知道源碼時可以提供HEX文件。

                                

       在Listing選項卡下同樣可以選擇Listing對應的文件夾,這裡選擇STM32\MDK\List文件夾,下方的覆選框可以選擇需要生成的調試信息,這裡保持預設即可,如圖 5‑17所示。

                              

      C/C++選項卡中的設置比較重要,如圖 5‑18所示,選項卡中主要有兩個地方需要註意,首先是整個工程的巨集定義,在前面標準外設庫部分已經有過介紹,標準外設庫中很多功能都是通過巨集定義來實現的,由於標準外設庫針對STM32一系列晶元,因此需要通過巨集定義來進行針對性的選擇。這種選擇有兩種方式,有的人是直接改動巨集定義部分的庫文件,缺點是需要更改一些功能時不是很方便,而且筆者建議在儘量不更改庫文件的方式下實現功能的配置和使用,另一種方式就是在工程的設置中添加巨集定義,這兒添加了兩個巨集定義,USE_STDPERIPH_DRIVER表示使用標準外設庫進行程式開發STM32F10X_HD表示使用的是STM32F10X系列大容量器件,本例中中使用的是STM32F103ZET6故填寫此項。

       需要說明的是在程式開發過程中不光庫文件可以通過巨集定義的方式進行程式功能配置,用戶程式也可以仿照庫文件的這種形式,通過相關的巨集定義進行一些參數配置。STM32的標準外設庫在程式組織性、層次性、規範性等方面都值得我們去學習的。在“Target”的選項卡中進行的巨集定義是這對當前“Target”有效的,在每一個“Group”同樣可以設置作用於Group的巨集定義。

       Language/Code Generation 一欄中主要是針對程式語言所所的一些優化和配置,預設情況下保持預設即可。

                                

接下來一個重要的設置就是設置工程所包含的頭文件目錄,如圖 5‑19所示,點擊Include Paths一欄右側clip_image030圖標,彈出如所示的對話框。點擊對話框右上角clip_image032圖標,添加工程所包括的頭文件路徑,添加頭文件路徑的時候要把當前工程目錄中包含頭文件的路徑都添加進去,如所示,添加了以下幾個路徑:

..\USER

..\LIB\STM32F10x_StdPeriph_Driver\inc

..\LIB\CMSIS\CM3\CoreSupport

..\LIB\CMSIS\CM3\DeviceSupport\ST\STM32F10x

                                   

       如果有用戶自己編寫的頭文件也要相應的加上引用路徑。仔細觀察可以發現在標註外設庫中頭文件的引用為:#include "stm32f10x.h",在C語言的學習中我們知道雙引號表示編譯器從用戶目錄開始搜索,如果未找到才回去系統目錄去查找,MDK的安裝目錄中同樣存在對應的庫文件,路徑為Keil\ARM\INC\ST\STM32F10x,但是由於不同的版本所內含的庫文件不同,如目前最新的V4.21版本中則內置了V3.4版本的庫文件,而之前的版本中很多內置了V2.0版本的庫文件,因此為了保持工程所使用的庫文件和引用的頭文件的一致性,同時也方便工程文件拷貝到其他電腦上運行,建議大家都按照本書介紹的方式都從自己的目錄中引用頭文件。

4. 程式調試與下載設置

       頭文件引用路徑添加完成後,就可以進行相關的編譯工作了,在進行這一步工作之前,我們還要完成有關程式調試和下載的相關設置,有關調試的設置在Debug選項卡中,之前的Asm和Linker選項卡保持預設。Debug選項卡如圖 5‑20所示。在此選項卡中主要完成程式調試的相關設置,選項卡主要分為兩個部分左側是使用模擬器進行模擬與調試的方式,點選後軟體會進入模擬器調試。右側是使用模擬器連接硬體開發平臺進行調試,首先從右側選擇所使用的模擬器,這裡使用的是J-Link模擬器,故在下拉框中選擇Cortex-M/R J-LINK/J-Trace,在兩側的下方可以通過勾選對應的覆選框來選擇是否需要在調試開始時下載程式和運行到主程式,其他部分的設置保持預設即可。

                                 

        點擊右側clip_image038圖標進入J-Link設置界面,如果此時模擬器和硬體開發平臺已經正確連接就會出現如圖 5‑21所示的界面,同時系統系統任務欄中會自動彈出J-Link的控制軟體。從界面中可以讀出當前的J-Link SN號以及相應的版本信息,如果沒有出現相關信息請檢查相關驅動程式是否正確安裝,併到系統的設備管理器中通用串列匯流排控制設備一項檢查系統有沒有識別出J-Link,右側則可以讀取所連接的設備信息,如果沒有出現類似的信息請檢查硬體連接。在此選項卡中可以進行J-Link的埠、速度等設置,這裡只需要保持預設就可以了。

                                

 

        本章之前已經做過介紹,STM32F10X內核集成了串列/JTAG調試介面SWJ-DP(Serial Wire and JTAG)。這是標準的ARM CoreSight調試介面,包括JTAG-DP介面(使用5個引腳)和SW-DP(使用兩個引腳)。引腳分配如表 5‑9所示。兩種方式都可以進行程式的調試和下載,但是SW方式更節省埠,只需要兩根線就可以,多餘的I/O可以釋放用作普通用途,SW方式和JTAG方式在普通程式調試下載與調試過程中並無明顯差別,如果想使用SW的方式調試程式只需要在Port的下拉列表中選擇SW即可,如圖 5‑22所示。選擇完成後如果硬體連接正確同樣能夠讀取晶元的信息。

 

                                                               

        設置好了Debug選項卡中有關選項後還需要設置Flash Download選項卡,如圖 5‑23所示。本選項卡主要設置燒寫Flash時的相關參數,這裡主要設置兩個部分,一個是設置程式下載的一些配置,這兒選擇Erase Sectors表示下載程式的時候擦除對應分區,勾選後面三項,分別表示下載程式,下載後校驗,程式下載後複位並運行。家下來需要選擇所使用的Flash,點擊Add,添加所使用的晶元類型,筆者使用的是STM32F103ZET6,Flash大小是512k,因此選擇STM32F10X High-density Flash。至此完成使用J-Link完成程式調試的配置。

                                                              

        最後選擇程式下載按鈕所對應的工具配置,配置同Debug界面如圖 5‑24所示,同樣選擇Cortex-M/R J-LINK/J-Trace這樣就可以在後面的使用中一鍵將程式下載到Flash中。至此已經全部完成了程式調試和下載的必要設置。

 

    圖524設置程式下載菜單對應的工具


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對於初學者而言,最簡單的是對晶元上的IO進行操作,我們學習ARM時候,第一個工程就是點亮LED,STM32F103ZET6通用輸入輸出介面(General-Purpose Inputs/Outputs),每個GPIO都可以由軟體配置成輸出(推免或開漏)、輸入(帶或不帶上拉或下拉)或復用的外設功能埠 ...
  • Apache的虛擬主機是一種允許在同一臺機器上配置多個不同站點的web伺服器環境的,就是iis一樣可以創建多站點了,但是apache需要在編輯狀態操作,不能像windows iis直接點擊幾下就好了,下麵我來給各位介紹配置方法。 最平常的大概有3種方法。 第一種:單IP不同埠 第二種:多IP同埠 ...
  • mysql5.7忽略大小寫問題 1.1 前言 新安裝mysql5.7版本後,linux環境下預設是大小寫敏感的。網上解決方案是挺多的,如果你進來看了,說明你遇到的坑是跟我一樣的。(修改好配置文件後不要重啟mysql服務!!!先停止服務,再啟動。) 1.2 進入正題,忽略大小寫敏感步驟 輸入 i 進入 ...
  • 1. python 工具 使用方法: 啟動:在終端里運行“python mkptych.py&”,這樣就可以生成一個基於pty(偽終端)的虛擬埠對,兩個設備名會顯示在終端里。然後就可以利用這兩個設備名在本機上進行虛擬串口之類的調試。 關閉:使用完後用ps查看這個python進程的pid號,然後ki ...
  • 3 Redis主動同步設置方法 Redis主從同步 1.Redis主從同步特點 一個master可以擁有多個slave 多個slave可以連接同一個master,還可以連接到其他slave 主從複製不會阻塞master,在同步數據時,master可以繼續處理client請求。 提高系統的伸縮性 2. ...
  • 1.安裝 tarxf redis-3.2.5.tar.gz cd redis-3.2.5 make mkdir -p /usr/local/redis/bin src目錄下這些文件作用如下 redis-server:Redis伺服器的daemon啟動程式 redis-cli:Redis命令行操作工具 ...
  • && 與 || 配合 命令合併操作符 {} ...
  • QEMU 模擬運行 VxWorks 6.6 項目簡介 本項目是在 Windows 系統編譯運行 X86 平臺 VxWorks 6.6 系統,使用的模擬軟體是 qemu for Windows Host:聯想 thinkVISON 64 位 + Windows 10 專業版 target:pc i44 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...