乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Linux下開發(fā)stm32 ④ | 標準固件庫工程開發(fā)

       袁先森lemon 2019-05-25

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

      1.創(chuàng)建固件庫工程

      將上一節(jié)的寄存器工程復(fù)制過來,改名為03-template-lib,然后再其中創(chuàng)建如下目錄結(jié)構(gòu),便于工程管理:

      • startup:存放啟動文件

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

      • libraries:stm32固件庫中的外設(shè)驅(qū)動庫

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

      • doc:存放說明文檔

      然后就開始從固件庫中復(fù)制文件了:

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

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

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

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

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

      2.編譯固件庫工程

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

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

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

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

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

      在這里插入圖片描述

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

      其實文件雖然多,但是仔細理一下會發(fā)現(xiàn)可以分為以下幾步:

      1. 找到全部的c文件;

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

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

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

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

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

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

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

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

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

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

      最后修改clean:

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

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多