找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2765|回復: 0
打印 上一主題 下一主題
收起左側(cè)

STM32組建文件系統(tǒng)、庫函數(shù)的方法 實驗指導書下載

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:473493 發(fā)表于 2019-1-28 08:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實驗一、STM32的開發(fā)環(huán)境與簡單工程
一、實驗目的
1、熟悉STM32開發(fā)板的開發(fā)環(huán)境;
2、熟悉MDK創(chuàng)建和配置STM32工程項目的基本流程;
3、熟悉STM32官方庫的應用;
4、規(guī)范編程格式。
二、實驗內(nèi)容
本次實驗配置MDK集成開發(fā)環(huán)境,新建一個簡單的工程文件,添加STM32官方庫并配置工程,編譯運行這個工程文件。下載已經(jīng)編譯好的文件到開發(fā)板中運行。學會在程序中設置斷點,觀察系統(tǒng)內(nèi)存和變量,為調(diào)試應用程序打下基礎。
三、預備知識
基本單片機硬件知識、單片機軟件編程語言、程序創(chuàng)建和調(diào)試的基本方法。
四、實驗設備及工具
硬件:STM32開發(fā)平臺
軟件:STM32官方庫;PC機操作系統(tǒng)Windows 98、Windows 2000或Windows XP;KEIL MDK集成開發(fā)環(huán)境;串口轉(zhuǎn)usb驅(qū)動。
五、實驗步驟
1、在準備存放工程文件的目錄下創(chuàng)建一新文件夾,命名為Proj_GPIO;在Proj_GPIO文件夾里面分別再創(chuàng)建四個文件夾:CMSIS、USER、LIB、OBJ。如圖1。
其中CMSIS(Cortex Microcontroller Software Interface Standard)用于存放Cortex-M 處理器系列的與供應商無關的軟件抽象層和啟動相關的代碼文件;
USER用于存放我們自己編寫的代碼文件(含自己移植的底層驅(qū)動),還有MDK工程;
LIB存放所有的官方底層驅(qū)動庫文件;
OBJ用于工程輸出的過程文件和最終的二進制文件。
圖1
2、將官方庫STM32F10x_StdPeriph_Lib_V3.5.0.rar解壓。
1)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的所有文件和STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的所有文件都到第一步所創(chuàng)建的CMSIS文件夾中;
2)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目錄下的文件(目錄inc和scr)復制到第一步創(chuàng)建的LIB文件夾中;
3)把STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目錄下的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三個文件復制到USER文件夾中。
3、打開MDK軟件,新建一個工程Proj_GPIO保存到Proj_GPIO/USER中。CPU選擇STM32F103ZE,如圖2;
圖2
4、新建一個空文檔main.c保存到USER中,然后根據(jù)絕對路徑將文件對應添加到工程中,如右圖。
5、配置工程屬性,右鍵點擊工程文件中的Target 1選擇Options for Target ‘Target 1’打開工程選項對話框。做如下修改:
1)Output選項勾選Create HEX File,然后點擊Select Folder for Objects按鈕定位輸出文件保存目錄到工程的OBJ文件;
2)Listing選項,同樣點擊Select Folder for Listings定位輸出文件保存目錄到工程的OBJ文件;
3)C/C++選項,Define中填入STM32F10X_HD, USE_STDPERIPH_DRIVER系統(tǒng)的兩個基本宏定義;配置Include Paths屬性,加入工程中包含頭文件的目錄;如右圖
4)后面Debug和Utilities兩個選項如果使用J-link或者其他調(diào)試器則需要做對應的修改,否則不用。
6、根據(jù)實驗任務硬件原理圖編寫代碼實現(xiàn)四個按鍵控制led燈亮滅。
1)其中用戶按鍵和LED原理圖如下:
圖5
2)根據(jù)原理圖初始化各IO引腳,編寫控制函數(shù),然后主函數(shù)中調(diào)用。
、
3)代碼編寫完成后編譯鏈接,通過下載軟件將hex文件下載到實驗板中運行驗證。

實驗二、ucos操作系統(tǒng)的移植一、實驗目的
1、掌握ucos到STM32的移植方法;
2、熟悉通過C語音處理底層寄存器的技巧;
3、了解STM32在ucos任務切換時的處理;
4、規(guī)范編程格式。
二、實驗內(nèi)容
本次實驗通過用C語言編寫6個操作系統(tǒng)相關函數(shù)和用匯編語言編寫4個與處理器相關的函數(shù),將實時操作系統(tǒng)μC/OS-Ⅱ移植到芯片STM32F103ZE中,并創(chuàng)建兩個用戶任務點亮led。學會操作系統(tǒng)的移植方法,深入掌握嵌入式操作系統(tǒng)μC/OS-Ⅱ在初始化任務和任務調(diào)度的實現(xiàn)方法,直觀了解實時操作系統(tǒng)的體系結(jié)構(gòu)和設計思想。
三、預備知識
基本單片機硬件知識、單片機軟件編程語言、程序創(chuàng)建和調(diào)試的基本方法、ucos操作系統(tǒng)的任務調(diào)度原理、STM32的寄存器架構(gòu)。
四、實驗設備及工具
硬件:STM32開發(fā)平臺
軟件:STM32官方庫;PC機操作系統(tǒng)Windows 98、Windows 2000或Windows XP;KEIL MDK集成開發(fā)環(huán)境;串口轉(zhuǎn)usb驅(qū)動。
五、實驗步驟
1、按實驗一的步驟新建一個工程Proj2_ucos。
2、將移植好的ucos源代碼整個拷貝到我們的新建的工程目錄中,然后按對應的文件路徑添加到keil工程里(os_dbg.c和os_dbg_r.c只添加一個),如圖6和圖7。

圖6                                                    圖7

3、配置工程相關屬性(與實驗一庫應用配置一樣),記得將ucos的頭文件路徑添加到工程的include path上面去,找到stm2f10x_it.c的PendSV_Handler函數(shù)注釋掉,main文件中將includes.h包含進來,主函數(shù)為空,編譯通過。
4、在main.c中建立sys_init()函數(shù)編寫操作系統(tǒng)運行需要的硬件相關初始化(見代碼),然后修改stm32f10x_it.c中的系統(tǒng)心跳中斷函數(shù)并加入頭文件includes.h(見代碼,)。
5、編寫用戶任務函數(shù)和相關的初始化。
6、最后在主函數(shù)中創(chuàng)建任務并啟動操作系統(tǒng)。編譯并調(diào)試運行。


實驗三、ucos操作系統(tǒng)的任務通信
一、實驗目的
1、掌握ucos任務間通信的各種方法;
2、了解嵌入式操作系統(tǒng)任務間可能出現(xiàn)的資源沖突;
3、掌握ucos中信號量和郵箱的應用;
4、規(guī)范編程格式。
二、實驗內(nèi)容
本次實驗通過用C語言編寫基于ucos操作系統(tǒng)下的多個用戶任務,并且實現(xiàn)任務間的正確通信。通過信號量處理公共資源的等待和使用,通過郵箱實現(xiàn)任務間的多個數(shù)據(jù)變量的傳遞。建立正確的操作系統(tǒng)編程理念,深入掌握μC/OS-Ⅱ中信號量與郵箱的創(chuàng)建和使用,了解各任務間通信方法的大概原理及優(yōu)缺點。
三、預備知識
基本單片機硬件知識、單片機軟件編程語言、程序創(chuàng)建和調(diào)試的基本方法、ucos操作系統(tǒng)的任務調(diào)度原理。
四、實驗設備及工具
硬件:STM32開發(fā)平臺。
軟件:STM32官方庫;PC機操作系統(tǒng)Windows 98、Windows 2000或Windows XP;KEIL MDK集成開發(fā)環(huán)境;串口轉(zhuǎn)usb驅(qū)動。
五、實驗步驟
1、建立基于操作系統(tǒng)μC/OS-Ⅱ的工程Proj3_ucos1,并配置好工程各項屬性。
2、創(chuàng)建用戶任務文件task.c和task.h兩個文件,詳細代碼如下。


代碼中,在task1.c中定義兩個全局變量NUM_COUNT1和NUM_COUNT2,兩個變量在my_task函數(shù)里用于記錄該任務循環(huán)的總次數(shù),區(qū)別在與NUM_COUNT1直接操作,而NUM_COUNT2則通過信號量的方法進行操作。

3、在main函數(shù)中初始化操作系統(tǒng)后創(chuàng)建一個信號量NUM_COUNT,然后用OSTaskCreate創(chuàng)建兩個任務,優(yōu)先級分別是8和9,兩個任務的入口地址都是task1.c文件中的my_task函數(shù)。

4、編譯通過后調(diào)試,在debug界面中,將NUM_COUNT1,NUM_COUNT2兩個全局變量加入到變量觀察窗口watch1中,然后在task.c的my_task函數(shù)里面設置斷點,運行并觀察兩個變量的變化,理解信號量的使用。

5、關于操作系統(tǒng)郵箱的應用由例子工程Proj3_ucos2實現(xiàn),請自行理解代碼。

實驗四、ucos操作系統(tǒng)的文件系統(tǒng)實現(xiàn)一、實驗目的
1、了解文件系統(tǒng)FATFS的基本實現(xiàn)原理;
2、掌握FATFS的移植步驟;
3、掌握基于ucos中FATFS的應用;
4、掌握STM32對SD卡的讀寫操作;
5、規(guī)范編程格式。
二、實驗內(nèi)容
本實驗實現(xiàn)將FAT文件系統(tǒng)移植到ucos中,并基于ucos的文件系統(tǒng)編寫用戶任務進行測試,通過對文件系統(tǒng)的移植實驗深入掌握對嵌入式相關驅(qū)動移植的基本步驟,建立正確的嵌入式操作系統(tǒng)驅(qū)動移植理念,并且熟悉掌握ucos操作系統(tǒng)下的文件系統(tǒng)的基本應用,了解其優(yōu)缺點。
三、預備知識
基本單片機硬件知識、單片機軟件編程語言、程序創(chuàng)建和調(diào)試的基本方法、ucos操作系統(tǒng)的任務調(diào)度原理、STM32單片機中的SD卡驅(qū)動、文件系統(tǒng)的操作函數(shù)、FAT文件系統(tǒng)的基礎知識。
四、實驗設備及工具
硬件:STM32開發(fā)平臺。
軟件: PC機操作系統(tǒng)Windows 98、Windows 2000或Windows XP;KEIL MDK集成開發(fā)環(huán)境;串口轉(zhuǎn)usb驅(qū)動;STM32官方庫;FATFS的官方庫;STM32的uart驅(qū)動和SD卡驅(qū)動源碼。
五、實驗步驟
1、拷貝實驗三的所有代碼到新的目錄地下,刪除USER和OBJ文件夾里工程相關的文件,重新建立實驗四的工程并命名為Proj4_FATFS,配置好工程各項屬性。


2、在USER文件夾里面創(chuàng)建文件夾myapp,將串口驅(qū)動uart和SD卡驅(qū)動sdio_sdcard的源代碼拷貝到該文件夾里面,并添加到工程中USER。
3、拷貝FAT文件系統(tǒng)源碼到myapp文件夾。在keil的工程中增加一個文件夾FATFS并添加diskio.c、ff.c、cc936.c三個文件到里面,如右圖。

4、嘗試編譯字符表文件cc936.c可能發(fā)現(xiàn)出錯:#error directive: This file is not needed in current configuration. 這是因為在ff.h中_CODE_PAGE這個宏的定義值不是936和長文件名宏定義_USE_LFN的值不是1導致的。修改成對應的值后該文件的編譯即可通過(如果用其他字符表文件同理)。
5、移植FAT文件系統(tǒng)需要做的事情。
1)FATFS是一個通用的文件系統(tǒng)模塊,用于在小型嵌入式系統(tǒng)中實現(xiàn)FAT文件系統(tǒng)。 FatFs 的編寫遵循ANSI C,因此不依賴于硬件平臺。它可以嵌入到便宜的微控制器中,如 8051,PIC,AVR,SH,Z80,H8,ARM等等,不需要做任何修改。FATFS源代碼的獲取,可以到官網(wǎng)下載elm-chanorg/fsw/ff/00index_e.html; 解壓文件會得到兩個文件夾,一個是doc文件夾,保存FATFS的一些使用文檔和說明。另一個是src文件夾,保存代碼源文件。FAT文件系統(tǒng)源碼和sd卡讀寫的底層驅(qū)動。
2)移植FAT文件系統(tǒng)只需根據(jù)硬件中可能接入的物理存儲模塊對文件系統(tǒng)的底層IO驅(qū)動(diskio.c)進行修改,具體需要修改的函數(shù)有:
DSTATUS disk_initialize (BYTE);//存儲介質(zhì)的初始化
DSTATUS disk_status (BYTE);//讀取存儲介質(zhì)的狀態(tài)
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);//讀取數(shù)據(jù)
DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);//寫入數(shù)據(jù)
DRESULT disk_ioctl (BYTE, BYTE, void*);//讀取存儲介質(zhì)文件系統(tǒng)相關信息
DWORD get_fattime (void);//返回文件系統(tǒng)的時間
3)diskio.c文件中添加頭文件sdio_sdcard.h、ff.h,增加SD卡的驅(qū)動號0如下:
4)diskio.c五個函數(shù)具體代碼:





5)對于最底層(物理層)對SD卡的具體初始化和讀寫操作,STM32有SPI和SDIO兩種方式實現(xiàn),實際應用中根據(jù)硬件電路條件選擇。在沒有SPI外設的單片機中也可以通過IO口模擬SPI協(xié)議。(具體實現(xiàn)代碼略,詳見工程文件中的 sdio_sdcard.c 和 sdio_sdcard.h )
6)修改task.c進行文件系統(tǒng)的測試應用。在測試FAT文件系統(tǒng)之前,首先應該確保對底層SD卡的讀寫驅(qū)動正確。所以第一步通過直接調(diào)用SD卡驅(qū)動函數(shù)實現(xiàn)對SD卡進行初始化檢測和基本的讀寫操作,具體代碼如下:
7)如果上一步能初始化并檢測出SD卡的大小,讀出前512個字節(jié)的數(shù)據(jù),則說明SD卡和驅(qū)動函數(shù)都正常。下一步設計一個FAT測試函數(shù):實現(xiàn)檢測TEST.txt文件是否存在,存在則讀取文件中的前100個字節(jié)內(nèi)容并串口輸出;然后打開TEST2.txt文件(不存在則創(chuàng)建)寫入讀取到的內(nèi)容(沒有內(nèi)容則寫入“is no file TEST.txt!”);打開TEST2.txt讀取文件中的前100個字節(jié)內(nèi)容并串口輸出。具體代碼如下。
8)至此,我們已經(jīng)將FATFS移植成功了,下面我們設計一個基于ucos的文件系統(tǒng)應用實驗,實現(xiàn)在用戶中檢測是否有SD卡插入,如果有則任務沒循環(huán)一次在SD卡中的文件mytask.txt的末尾寫入一句“這是本任務的第xx次循環(huán)”,然后在主函數(shù)中創(chuàng)建兩個以上的該任務的線程(這里需要注意實驗三的資源沖突問題。
9)具體代碼,詳見實例工程!
*擴展知識1:在本工程中的SD底層驅(qū)動中,因為用32位存儲SD卡的容量大小,所以最大只能識別到4GB,如果采用大于4G的卡進行測試則讀出的容量是錯誤的。
*擴展知識2:對于FAT32的MBR區(qū)不一定是在0扇區(qū)中。
*擴展知識3:配置ff.h(可能是ffconf.h)文件中 _USE_STRFUNC 宏定義為1,可以使用f_putc、f_puts、f_printf、f_gets、f_eof、f_error 等函數(shù)

實驗五、基于ucos操作系統(tǒng)的網(wǎng)絡模塊一、實驗目的
1、了解W5500網(wǎng)絡模塊的基本實現(xiàn)原理;
2、掌握ucos下網(wǎng)絡底層庫的移植步驟;
3、掌握基于ucos的網(wǎng)絡編程TCP、UDP思路;
4、了解嵌入式軟件設計的分層思路;
二、實驗內(nèi)容
本實驗通過STM32的SPI協(xié)議讀寫W5500網(wǎng)絡模塊,移植網(wǎng)絡協(xié)議驅(qū)動到ucos嵌入式操作系統(tǒng),并通過編寫ucos操作系統(tǒng)的應用任務實現(xiàn)實驗板和上位機的網(wǎng)絡通信。了解基于網(wǎng)絡通信的嵌入式軟件設計的思路。
三、預備知識
本實驗要求學生具備基本的C語言讀寫能力、基本單片機軟硬件知識、了解SPI協(xié)議、了解基礎的網(wǎng)絡協(xié)議應用、ucos操作系統(tǒng)的用戶任務設計能力
四、實驗設備及工具
硬件:STM32開發(fā)平臺、PC機
軟件: keilMDK編程環(huán)境、串口轉(zhuǎn)usb驅(qū)動、STM32官方庫、移植好的ucos源碼、基于STM32的SPI驅(qū)動庫、基于STM32的uart驅(qū)動庫、W5500網(wǎng)絡模塊驅(qū)動庫、
五、實驗步驟
1、了解網(wǎng)絡編程中socket、UDP的基本實現(xiàn)原理。

2、了解W5500網(wǎng)絡模塊的基本功能和官方驅(qū)動庫提供的代碼架構(gòu)。

W5500  是一款全硬件  TCP/IP  嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加簡易的互聯(lián)網(wǎng)連接方案。W5500  集成了  TCP/IP  協(xié)議棧,10/100M  以太網(wǎng)數(shù)據(jù)鏈路層(MAC)  及物理層(PHY),使得用戶使用單芯片就能夠在他們的應用中拓展網(wǎng)絡連接。原廠公司位于韓國,中文官網(wǎng):www點iwiznet點cn
W5500的驅(qū)動可在官網(wǎng)中找到下載,下載解壓后的目錄Ethernet為W5500的官方驅(qū)動庫。其中W5500.c和W5500.h提供W5500的硬件接口函數(shù),實現(xiàn)對W5500寄存器的讀寫驅(qū)動;socket.c和socket.h提供網(wǎng)絡協(xié)議socket的API實現(xiàn)和用戶接口函數(shù);wizchip_conf.c和wizchip.h提供對芯片應用驅(qū)動和配置接口,例如芯片的復位、IP地址的初始化,注冊用戶的SIP驅(qū)動函數(shù)等。整體架構(gòu)如右圖:
3、基于STM32的移植。
由上圖我們知道對于官方驅(qū)動庫,我們需要提供STM32的SPI協(xié)議驅(qū)動接口。具體需要我們手動實現(xiàn)的函數(shù)是:
wizchip_cris_enter :進入臨界區(qū)的函數(shù),可以不管
wizchip_cris_exit :退出臨界區(qū)的函數(shù),也可以不管
wizchip_cs_select :輸出有效片選信號的函數(shù),控制CS輸出低電平的函數(shù),必須實現(xiàn)
wizchip_cs_deselect :控制CS輸出高電平的函數(shù),必須實現(xiàn)
wizchip_bus_readbyte :SPI總線讀取一字節(jié)數(shù)據(jù)函數(shù),必須實現(xiàn)
wizchip_bus_writebyte :SPI總線寫一字節(jié)數(shù)據(jù)函數(shù),必須實現(xiàn)
正常情況下我們需要找到驅(qū)動庫中對應的函數(shù)原型進行修改,但是因為官方庫中提供了一個用戶接口,可以將我們已有對應的SPI函數(shù)入口注冊并替換掉上述函數(shù),所以我們可以獨立編寫文件SPI.c和SPI.h,然后初始化時調(diào)用“注冊函數(shù)”(注冊函數(shù)在wizchip)。
工程中我們創(chuàng)建文件confForW5500.c和confFroW5500.h實現(xiàn)對W5500的配置和各項初始化,代碼詳見工程文件。
4、用戶測試任務。
根據(jù)網(wǎng)絡編程基礎知識,我們編寫一個回環(huán)測試任務,對網(wǎng)絡模塊的TCP/IP功能進行基礎測試。具體分為實現(xiàn)socket功能和UDP兩個功能,流程圖如下:

根據(jù)上述流程圖,我們創(chuàng)建文件loopback.c和loopback.h實現(xiàn)對應的各項功能函數(shù)。然后基于ucos操作系統(tǒng)下建立用戶任務my_task() 進行各項功能的順序調(diào)用,主函數(shù)中啟動操作系統(tǒng)并創(chuàng)建該任務。
5、上位機連接測試。
將工程編譯調(diào)試通過并燒寫到實驗板,用網(wǎng)線連接PC機和W5500網(wǎng)絡模塊,實驗板上電啟動,根據(jù)我們編寫的用戶任務STM32將會啟動一個SOCKET服務端并綁定實驗板的IP和程序中配置的端口。
PC上機設置各項網(wǎng)絡參數(shù),讓PC機和實驗板處于同一網(wǎng)段(局域網(wǎng)),然后打開命令提示符窗口CMD,輸入ping命令:ping 192.168.xxx.xxx (實驗板IP),觀察是否能夠收到實驗板反饋的數(shù)據(jù)信息。如下圖:
PC機打開調(diào)試軟件NetAssist.exe,選擇TCP Client,服務器IP地址設置成實驗板IP,服務端口設置成實驗板中打開的socket端口,點擊連接看能否成功連接實驗板socket服務,連接成功后在軟件的發(fā)送數(shù)據(jù)區(qū)隨便輸入發(fā)送內(nèi)容,點擊發(fā)送,查看接收到的反饋信息,如下圖
6、自行設計編寫應用任務,實現(xiàn)實驗板網(wǎng)絡方面新的需求。


全部資料51hei下載地址:
STM32中GPIO的8種工作模式.pdf (916.55 KB, 下載次數(shù): 6)
UCOS-II_API_參考手冊.doc (516 KB, 下載次數(shù): 5)
基于STM32F103嵌入式實驗指導書.docx (392.74 KB, 下載次數(shù): 8)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表