• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      Linux下開發stm32 ④ | 標準固件庫工程開發

       袁先森lemon 2019-05-25

      st官方固件庫是在寄存器操作之上的,但是使用寄存器操作的話,需要注意的地方很多,需要對照參考手冊一個一個賦值,稍有不慎便會出錯,所以固件庫將外設的初始化封裝成初始化結構體,將外設的操作封裝在函數中,將寄存器賦值的操作都封裝起來,我們只需要調用API就可以,這樣一來既提高了開發效率,也減少了代碼量,如果還不能在MDK里熟練使用固件庫編程,建議先補基礎~接下來,我們在上一節寄存器工程的基礎上,添加固件庫,使用固件庫進行開發。

      1.創建固件庫工程

      將上一節的寄存器工程復制過來,改名為03-template-lib,然后再其中創建如下目錄結構,便于工程管理:

      • startup:存放啟動文件

      • cmsis:stm32固件庫中的cmsis支持庫

      • libraries:stm32固件庫中的外設驅動庫

      • user:存放用戶自己的文件

      • doc:存放說明文檔

      然后就開始從固件庫中復制文件了:

      • startup:直接將工程中的已有啟動文件startup_stm32f10x_hd移動進去即可;

      • cmsis:將工程中已有的內核支持文件core_cm3.h(不要從固件庫中添加core_cm3.c進去,添加后編譯會出錯), 時鐘配置文件system_stm32f10x.hsystem_stm32f10x.c(從固件庫中復制),以及stm32頭文件stm32f10x.h

      • libraries:這個直接將固件庫中STM32F10X_StdPeriph_Driver中的內容拷貝過來即可:

      • user:因為使用了固件庫,所以將固件庫配置頭文件stm32f10x_conf.h,中斷服務程序文件stm32f10x_it.hstm32f10x_it.c都復制進去,這些文件從固件庫的project/STM32F10X_StdPeriph_Template中復制,最后將我們工程中已有的main文件復制進去:

      到這里,我們的工程模板就建好了,然后就是編寫makefile來編譯整個工程了:

      2.編譯固件庫工程

      固件庫編譯的時候有幾點需要注意兩點:

      1. 文件和makefile不是同一個目錄時,如何告訴makefile找到頭文件呢?

      2. 固件庫中如此多的c文件,如何添加依賴關系呢?

      首先來解決第一個問題——如何告訴編譯器找到這些頭文件?

      其實這個問題在講使用gcc的時候有講:當頭文件不和源文件在一個目錄時,需要使用-I(大寫i)參數給編譯器添加頭文件搜索目錄,所以修改一下makefile:

      在這里插入圖片描述

      然后來解決第二個問題 —— 如何添加大量的源文件及其依賴到makefile?

      其實文件雖然多,但是仔細理一下會發現可以分為以下幾步:

      1. 找到全部的c文件;

      2. 將每個c文件編譯為目標文件,不進行鏈接;

      3. 將所有的目標文件一起鏈接,生成可執行文件;

      下面一步一步來~
      首先如何找到所有的c文件呢?可以在c文件全部使用相對于makefile的相對路徑,顯然這是最笨的辦法,因為這么多文件,不可能一步一步添加,但是,在linux下可以使用find命令來尋找目錄下的文件,所以我們使用find ./ -name '*.c'來尋找當前目錄下所有的c文件,如圖:

      修改makefile,添加所有的c源文件:

      接下來解決第二個小問題,如何將這些源文件分別編譯為對應的目標文件呢?
      當然是不可能一個一個寫的,這里使用makfile的靜態模式,它的語法是這樣的:

      <targets>:<target-pattern>:<prereq-patterns>
          <commands>

      這里面targets定義了一系列目標文件,可以有通配符,是目標的一個集合;target-pattern指明了targets的模式,prereq-parrterns是目標的依賴模式,它對target-parrtern形成的模式再進行一次依賴目標的定義:
      首先我們需要一個目標集合,也就是使用剛剛的靜態模式將上一步所有搜索到的.c文件換為同名.o文件:

      最后將目標文件添加到鏈接中:

      這個時候,我們基本的兩個大問題就解決完了,接下來編譯器參數,一個是添加宏定義,首先是芯片型號宏定義STM32F10X_HD,然后是USE_STDPERIPH_DRIVER,表明我們使用了標準外設驅動庫;另一個是添加我們之前的頭文件路徑:

      還有一點需要注意,啟動文件也需要修改:

      最后修改clean:

      這里我們的makefile就完成了,如果可以的話,還可以使用#添加必要的注釋進去,最后進行一下優化,讓它默認生成bin文件和hex文件:

      接下來還不能直接make,之前我們配置時鐘是在main.c里配置,這里引入了固件庫中的system_stm32f10x.c,時鐘配置在這里面已經完成,默認配置為72M,所以可以將main.c中的時鐘初始化去了,然后使用make指令即可編譯。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 成人做受视频试看60秒| 久久综合亚洲色一区二区三区| 国产免费1卡2卡| 狠狠噜天天噜日日噜| 人妻丰满熟妇AV无码区动漫| 成午夜福利人试看120秒| 亚洲色在线V中文字幕| 秋霞人妻无码中文字幕| 四虎成人免费视频在线播放| 亚洲VA中文字幕无码久久| 内射毛片内射国产夫妻| 中文字幕无线码免费人妻| 欧美极品色午夜在线视频| 精品999日本久久久影院| 久久精品人人做人人爽电影蜜月 | 日韩精品卡2卡3卡4卡5| 激情97综合亚洲色婷婷五| 欧美性XXXX极品HD欧美风情| 天天做天天爱天天爽综合网| 精品 日韩 国产 欧美 视频 | 国产成人一区二区三区免费| 曰韩亚洲AV人人夜夜澡人人爽| 亚洲AV高清一区二区三区尤物 | 亚洲色最新高清AV网站| 欧产日产国产精品精品| 中文字幕有码日韩精品| 久久精品无码鲁网中文电影| 亚洲av无码精品色午夜蛋壳| 国产小受被做到哭咬床单GV| 国内大量揄拍人妻精品視頻| 99热精品毛片全部国产无缓冲| 在线精品国产一区二区三区| 天堂亚洲免费视频| 67194熟妇在线观看线路| 日产精品一卡2卡三卡四乱码| 又爽又黄又无遮挡的激情视频| 久久伊人精品青青草原APP| 亚洲偷自拍国综合| 久久久久香蕉国产线看观看伊| 人人妻人人澡人人爽人人精品电影| 粗壮挺进邻居人妻|