免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

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

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ù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
IAR(EWARM)下移植FreeRTOS到STM32F10x筆記
基于IAR平臺的3
【原創(chuàng)】《stm32,我來了》第三章:小項目大學問
STM32高級開發(fā)(9)
STM32 標準固件庫的下載,文件介紹和工程的建立(綜合)
STM32工程建立簡述_用文字敘述stm32的工程建立
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服