




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 實驗報告 課程名稱:嵌入式系統(tǒng)學(xué) 院:信息工程專 業(yè):電子信息工程班 級:學(xué)生姓名:學(xué) 號:指導(dǎo)教師:開課時間:學(xué)年第一學(xué)期實驗名稱:IO接口(跑馬燈)實驗時間:11.16實驗成績:一、實驗?zāi)康?.掌握 STM32F4 基本IO口的使用。2.使用STM32F4 IO口的推挽輸出功能,利用GPIO_Set函數(shù)來設(shè)置完成對 IO 口的配置。3.控制STM32F4的IO口輸出,實現(xiàn)控制ALIENTEK 探索者STM32F4開發(fā)板上的兩個LED實現(xiàn)一個類似跑馬燈的效果。二、實驗原理本次實驗的關(guān)鍵在于如何控制STM32F4的IO口輸出。IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、
2、ODR、IDR、AFRH和AFRL等8個寄存器的控制,并且本次實驗主要用到IO口的推挽輸出功能,利用GPIO_Set函數(shù)來設(shè)置,即可完成對IO口的配置。所以可以通過了開發(fā)板上的兩個LED燈來實現(xiàn)一個類似跑馬燈的效果。三、實驗資源實驗器材:探索者STM32F4開發(fā)板硬件資源:1. DS0(連接在PF9) 2. DS1(連接在PF10)四、實驗內(nèi)容及步驟1.硬件設(shè)計2.軟件設(shè)計(1)新建TEST工程,在該工程文件夾下面新建一個 HARDWARE文件夾,用來存儲以后與硬件相關(guān)的代碼。然后在 HARDWARE 文件夾下新建一個LED文件夾,用來存放與LED相關(guān)的代碼。(2)打開USER文件夾下的tes
3、t.uvproj工程,新建一個文件,然后保存在 LED 文件夾下面,保存為 led.c,在led.c中輸入相應(yīng)的代碼。(3)采用 GPIO_Set 函數(shù)實現(xiàn)IO配置。LED_Init 調(diào)用 GPIO_Set 函數(shù)完成對 PF9 和 PF10 ALIENTEK 探索者 STM32F407 開發(fā)板教程 119 STM32F4 開發(fā)指南(寄存器版) 的模式配置,控制 LED0 和 LED1 輸出 1(LED 滅),使兩個 LED 的初始化。(4)新建一個led.h文件,保存在 LED 文件夾下,在led.h中輸入相應(yīng)的代碼。3.下載驗證使用 flymcu 下載(也可以通過JLINK等仿真器下載),如
4、圖 1.2所示:圖1.2運行結(jié)果如圖1.3所示:圖1.3五、實驗源程序相關(guān)代碼如下所示:(1) led.c文件#include "led.h"void LED_Init(void) RCC->AHB1ENR|=1<<5;/GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP, GPIO_SPEED_100M,GPIO_PUPD_PU); /PF9,PF10 設(shè)置 LED0=1;/LED0 關(guān)閉 LED1=1;/LED1 關(guān)閉 (2)led.h文件#ifndef _LED_H#define _LED_H
5、#include "sys.h" /LED 端口定義#define LED0 PFout(9) / DS0#define LED1 PFout(10) / DS1void LED_Init(void); /初始化 #endif(3)main函數(shù)#include "sys.h" #include "delay.h"#include "led.h"int main(void) Stm32_Clock_Init(336,8,2,7);/設(shè)置時鐘,168Mhzdelay_init(168); /初始化延時函數(shù) LED_In
6、it(); /初始化 LED 時鐘 while(1) LED0=0; /DS0 亮LED1=1; /DS1 滅delay_ms(500); LED0=1; /DS0 滅 LED1=0; /DS1 亮 delay_ms(500); 六、實驗總結(jié)本次實驗過程中,由于第一次實驗,對實驗器件,還有實驗過程都不大了解,使得做實驗過程中遇到很大的問題。也花費了不少時間,不過在慢慢的摸索中,以及老師的指導(dǎo)和同學(xué)的幫助下,最終也了解了探索者STM32F4開發(fā)板的外部結(jié)構(gòu),以及各個引腳的作用,還有各個串口和并口的具體使用,還觀察了跑馬燈的運行狀態(tài),以及它的運行程序。七、預(yù)習(xí)思考題八、注意事項(1)新建文件夾時,
7、區(qū)分不同的文件夾之間的關(guān)系。(2)編寫代碼時,注意格式和符號,在英文環(huán)境下輸入。實驗名稱:觸摸屏實驗時間:11.23實驗成績:一、 實驗?zāi)康?. 掌握觸摸屏的工作原理。2. 通過外接帶觸摸屏的LCD模塊,來實現(xiàn)觸摸屏控制。3. 通過對電阻觸摸和電容觸摸的學(xué)習(xí),實現(xiàn)觸摸屏驅(qū)動,最終實現(xiàn)一個手寫板的功能。二、實驗原理電阻式觸摸屏原理:當(dāng)手指觸摸屏幕時,兩層導(dǎo)電層在觸摸點位置就有了接觸,控制器檢測到這個接通點并計算出X、Y軸的位置。特點:精度高、價格便宜、抗干擾能力強、穩(wěn)定性好; 易被劃傷、透光性差、不支持多點觸摸。電容式觸摸屏原理:利用人體的電流感應(yīng)進行工作。當(dāng)手指觸摸金屬層時,由于人體電場,用戶
8、和觸摸屏表面形成一個耦合電容。對于高頻電流來說電容是直接導(dǎo)體,于是手指從接觸點吸走一個很小的電流。這個電流分別從觸摸屏的4個角的電極流出,并且流經(jīng)4個電極的電流與手指到4角的距離成正比??刂破魍ㄟ^對電流比例的計算,得到觸摸點的位置。特點:手感好、無需校正、透光性好、支持多點觸摸; 成本高、精度不高、抗干擾力差。三、實驗資源實驗器材:探索者STM32F4開發(fā)板硬件資源:1、DS0(連接在PF9) 2、串口1(波特率:115200,PA9/PA10連接在板載USB轉(zhuǎn)串口芯片CH340上面) 3、ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模塊(通過FSMC驅(qū)動,FSMC_NE4接LC
9、D 片選/A6 接RS) 4、按鍵KEY0(PE4)四、實驗內(nèi)容及步驟1.硬件設(shè)計圖2.1觸摸屏與 STM32F4 連接原理圖2.軟件設(shè)計(1)打開上一章的工程,由于本次實驗不要用到USMART和CAN相關(guān)代碼,所以,先去掉USMART相關(guān)代碼和can.c(此時HARDWARE組剩下:led.c、ILI93xx.c和key.c)。不過,本次實驗要用到24C02,所以要添加myiic.c和24cxx.c到HARDWARE組下。(2)然后,在HARDWARE文件夾下新建一個TOUCH文件夾。然后新建一個touch.c、touch.h、ctiic.c等十個文件,并保存在TOUCH文件夾下,并將這個文
10、件夾加入頭文件包含路徑。其中,touch.c和touch.h是電阻觸摸屏部分的代碼,順帶兼電容觸摸屏的管理控制,其他則是電容觸摸屏部分的代碼。3.下載驗證使用 flymcu 下載(也可以通過JLINK等仿真器下載),如圖 2.2所示:圖2.2運行結(jié)果如圖2.3所示:圖2.3五、實驗源程序(1)main函數(shù) int main(void) Stm32_Clock_Init(336,8,2,7); /設(shè)置時鐘,168Mhz delay_init(168); /延時初始化 uart_init(84,115200); /初始化串口波特率為115200 LED_Init(); /初始化 LED LCD_I
11、nit(); /LCD 初始化 KEY_Init(); /按鍵初始化 tp_dev.init(); /觸摸屏初始化 POINT_COLOR=RED; /設(shè)置字體為紅色LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"TOUCH TEST"); LCD_ShowString(30,90,200,16,16,"ATOMALIENTEK"); LCD_ShowString(30,110,200,16,16,"201
12、4/5/7"); if(tp_dev.touchtype!=0XFF)LCD_ShowString(30,130,200,16,16,"PressKEY0toAdjust"); delay_ms(1500);Load_Drow_Dialog(); if(tp_dev.touchtype&0X80)ctp_test(); /電容屏測試 else rtp_test(); /電阻屏測試(2)/電阻觸摸屏測試函數(shù) void rtp_test(void) u8 key; u8 i=0; while(1) key=KEY_Scan(0); tp_dev.scan(0)
13、; if(tp_dev.sta&TP_PRES_DOWN) /觸摸屏被按下 if(tp_dev.x0<lcddev.width&&tp_dev.y0<lcddev.height)if(tp_dev.x0>(lcddev.width-24)&&tp_dev.y0<16) Load_Drow_Dialog();else TP_Draw_Big_Point(tp_dev.x0,tp_dev.y0,RED); /畫圖 else delay_ms(10); /沒有按鍵按下的時候if(key=KEY0_PRES) /KEY0 按下,則執(zhí)行校準
14、程序 LCD_Clear(WHITE); /清屏 TP_Adjust(); /屏幕校準 TP_Save_Adjdata(); Load_Drow_Dialog(); i+; if(i%20=0)LED0=!LED0; (3) /電容觸摸屏測試函數(shù)void ctp_test(void) u8 t=0; u8 i=0; u16 lastpos52; /最后一次的數(shù)據(jù) while(1) tp_dev.scan(0); for(t=0;t<5;t+)if(tp_dev.sta)&(1<<t)if(tp_dev.xt<lcddev.width&&tp_de
15、v.yt<lcddev.height)if(lastpost0=0XFFFF)lastpost0 = tp_dev.xt; lastpost1 = tp_dev.yt;lcd_draw_bline(lastpost0,lastpost1,tp_dev.xt,tp_dev.yt,2,POINT_COLOR_TBLt); /畫線lastpost0=tp_dev.xt; lastpost1=tp_dev.yt;if(tp_dev.xt>(lcddev.width-24)&&tp_dev.yt<20)Load_Drow_Dialog(); /清除else lastpo
16、st0=0XFFFF; delay_ms(5);i+; if(i%20=0)LED0=!LED0; 六、實驗總結(jié)基本達到實驗的要求,了解觸摸屏基本概念與原理,以及通過編程實現(xiàn)對觸摸屏的控制,以及知道如何驗證實驗結(jié)果是否屬于預(yù)期目標,并了解實驗原理,為今后嵌入式的學(xué)習(xí)打下一定的學(xué)習(xí)基礎(chǔ)。七、預(yù)習(xí)思考題八、注意事項(1)新建文件夾時,區(qū)分不同的文件夾之間的關(guān)系。(2)編寫代碼時,注意格式和符號,在英文環(huán)境下輸入。實驗名稱:串口通信實驗時間:11.30實驗成績:一、實驗?zāi)康?.了解STM32F4串口。 2.掌握如何使用STM32F4的串口來發(fā)送和接收數(shù)據(jù)。3.學(xué)會如何初始化串口。4.掌握串口編程與調(diào)
17、試方法。二、實驗原理串行通信需要將傳輸?shù)臄?shù)據(jù)分解成二進制位,然后采用一條信號線將多個二進制數(shù)據(jù)位按一定的時間和順序,逐位由信息發(fā)送端傳到信息的接收端。根據(jù)數(shù)據(jù)的傳輸方向和發(fā)送接收是否能同時進行,數(shù)據(jù)傳輸?shù)墓ぷ鞣绞椒譃閱喂し绞?,半雙工方式和全雙工方式。單工通信是指信息只能單方向傳輸?shù)墓ぷ鞣绞?,發(fā)送端和接收端的方向是固定的。半雙工通信方式可以實現(xiàn)雙向的通信,不能在兩個方向上同時進行工作,但可以輪流交替地進行通信,即通信信道的任意端,既可以是發(fā)送端也可以是接收端。全雙工通信方式是指在通信的任意時刻,允許數(shù)據(jù)同時在兩個方向上傳輸,即通信雙方可以同時發(fā)送和接收數(shù)據(jù)。三、實驗資源實驗器材:探索者STM32
18、F4開發(fā)板硬件資源:a. DS0(連接在PF9) b. 串口1(波特率:115200,PA9/PA10連接在板載USB轉(zhuǎn)串口芯片CH340上面)四、實驗內(nèi)容及步驟1.硬件設(shè)計所需硬件資源:1) 指示燈 DS0 2) 串口 1圖 3.1 硬件連接圖示意圖2.軟件設(shè)計(1)打開上一章的TSET工程,因為本章我們用不到按鍵和蜂鳴器等功能,所以把key.c和beep.c從HARDWARE工程組里面刪除,從減少工程代碼量,僅留下必須的.c文件,節(jié)省空間,加快編譯速度。(2)然后在SYSTEM組下雙擊usart.c,就可以看到文件里的代碼。3.下載驗證使用 flymcu 下載(也可以通過JLINK等仿真器
19、下載),如圖 3.2所示:圖3.2運行結(jié)果如圖3.3所示:圖3.3五、實驗源程序(1)uart_init 函數(shù)/初始化 IO 串口1 /pclk2:PCLK2 時鐘頻率(Mhz) /bound:波特率 void uart_init(u32 pclk2,u32 bound) float temp; u16 mantissa; u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);/得到 USARTDIVOVER8=0 mantissa=temp; /得到整數(shù)部分 fraction=(temp-mantissa)*16; /得到小數(shù)部分OVER8
20、=0 mantissa<<=4; mantissa+=fraction; RCC->AHB1ENR|=1<<0; /使能 PORTA 口時鐘RCC->APB2ENR|=1<<4; /使能串口1時鐘 GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M, GPIO_PUPD_PU); /PA9,PA10,復(fù)用功能,上拉輸出GPIO_AF_Set(GPIOA,9,7); /PA9,AF7 GPIO_AF_Set(GPIOA,10,7); /PA10,AF7/波特率設(shè)置U
21、SART1->BRR=mantissa; / 波特率設(shè)置USART1->CR1&=(1<<15); /OVER8=0USART1->CR1|=1<<3; /串口發(fā)送使能#if EN_USART1_RX /如果使能了接收/使能接收中斷USART1->CR1|=1<<2; /串口接收使能USART1->CR1|=1<<5; /接收緩沖區(qū)非空中斷使能MY_NVIC_Init(3,3,USART1_IRQn,2);/組2,最低優(yōu)先級#endifUSART1->CR1|=1<<13; /串口使能(2)
22、test.c函數(shù)#include "sys.h"#include "delay.h" #include "usart.h" #include "led.h"int main(void) u8 t; u8 len; u16 times=0; Stm32_Clock_Init(336,8,2,7);/設(shè)置時鐘,168Mhz delay_init(168); /延時初始化 uart_init(84,115200); /串口初始化為 115200 LED_Init(); /初始化與 LED 連接的硬件接口 while(1)
23、 if(USART_RX_STA&0x8000)len=USART_RX_STA&0x3fff;/得到此次接收到的數(shù)據(jù)長度printf("rn 您發(fā)送的消息為:rn");for(t=0;t<len;t+)USART1->DR=USART_RX_BUFt; while(USART1->SR&0X40)=0);/等待發(fā)送結(jié)束 printf("rnrn");/插入換行 USART_RX_STA=0; else times+; if(times%5000=0) printf("rnALIENTEK 探索者 ST
24、M32F407 開發(fā)板 串口實驗rn");printf("正點原子ALIENTEKrnrnrn"); if(times%200=0)printf("請輸入數(shù)據(jù),以回車鍵結(jié)束rn"); if(times%30=0)LED0=!LED0;/閃爍 LED,提示系統(tǒng)正在運行. delay_ms(10); 六、實驗總結(jié)在程序設(shè)計方面,對串口通信的過程有了更深刻的理解和領(lǐng)會。通過本次實驗,使我對ARM嵌入式開發(fā)有了一定的掌握和理解,鞏固了我在課程中所學(xué)的基本理論知識和實驗技能,使我對嵌入式系統(tǒng)課程有了更深入的了解,熟悉了串口的使用,了解了內(nèi)部功能模塊及內(nèi)核
25、架構(gòu)。七、預(yù)習(xí)思考題八、注意事項(1)新建文件夾時,區(qū)分不同的文件夾之間的關(guān)系。(2)編寫代碼時,注意格式和符號,在英文環(huán)境下輸入。實驗名稱:RTC實時時鐘實驗時間:12.7實驗成績:一、實驗?zāi)康?.學(xué)會使用TFTLCD模塊來顯示日期和時間,實現(xiàn)一個簡單的實時時鐘,并可以設(shè)置鬧鐘2.了解和掌握STM32F4的RTC的工作原理二、實驗原理STM32F4的RTC時鐘的使用:1)時鐘和分頻;2)日歷時間(RTC_TR)和日期(RTC_DR)寄存器;3)可編程鬧鐘;4)周期性自動喚醒RTC正常工作的一般配置步驟如下:1)使能電源時鐘,并使能RTC及RTC后備寄存器寫訪問;2)開啟外部低能振蕩器,選擇R
26、TC時鐘,并使能;3)取消RTC寫保護;4)進入RTC初始化模式;5)設(shè)置RTC的分頻,以及配置RTC參數(shù)通過以上的5個步驟,我們就完成了對RTC的配置,RTC即可正常工作,而且這些操作不是每次上電都必須執(zhí)行的,可以視情況而定。三、實驗資源實驗器材:探索者STM32F4開發(fā)板四、實驗內(nèi)容及步驟硬件資源:1、DS0(連接在PF9),DS1(連接在PF10)2、串口1(波特率:115200,PA9/PA10連接在板載USB轉(zhuǎn)串口芯片CH340上)3、ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模塊(通過FSMC驅(qū)動,FSMC_NE4接LCD片選/A6接RS) 1.硬件設(shè)計RTC屬于S
27、TM32F4內(nèi)部資源,期配置也是通過軟件設(shè)置好就可以了。不過RTC不能斷電,否則數(shù)據(jù)就丟失了,我們?nèi)绻胱寱r間在斷電后還可以繼續(xù)走,那么必須確保開發(fā)板的電池有電。2. 軟件設(shè)計打開上一章的工程,首先在HARDWARE文件夾下新建一個RTC的文件夾。然后打開USER文件夾下的工程,新建一個rtc.c的文件和rtc.h的頭文件,保存在RTC文件夾下,并將RTC文件夾加入頭文件包含路徑。rtc.c中的代碼中的RTC_Init函數(shù)用來初始化RTC時鐘,在這里設(shè)置時間和日期,分別是通過RTC_Set_Time和RTC_Set_Data函數(shù)來實現(xiàn)的,其中RTC_Set_Time用于設(shè)置時間,RTC_Set
28、_Data用于設(shè)置日期。Test.c中通過RTC_Sst_WakeUp(4,0);設(shè)置RTC周期型自動喚醒周期為1秒鐘,類似于STM32F1的秒鐘中斷。然后,在main函數(shù)不斷的讀取RTC的時間和日期(每100ms一次),并顯示在LED上面。將RTC的一些相關(guān)函數(shù)加入了usmart,這樣通過串口就可以直接設(shè)置RTC時間、日期、鬧鐘A、周期性喚醒和備份寄存器讀寫等操作。3.下載驗證使用 flymcu 下載(也可以通過JLINK等仿真器下載),如圖 4.2所示:運行結(jié)果如圖4.3所示:圖4.2 圖4.3五、實驗源程序1.RTC_Init/RTC 初始化 /返回值:0,初始化成功;/ 1,LSE 開
29、啟失敗; / 2,進入初始化模式失敗;u8 RTC_Init(void) u16 retry=0X1FFF; RCC->APB1ENR|=1<<28; /使能電源接口時鐘PWR->CR|=1<<8; /后備區(qū)域訪問使能(RTC+SRAM)if(RTC_Read_BKR(0)!=0X5050) /是否第一次配置?RCC->BDCR|=1<<0; /LSE開啟while(retry&&(RCC->BDCR&0X02)=0) /等待LSE準備好 retry-; delay_ms(5); if(retry=0)retu
30、rn 1; /LSE 開啟失敗. RCC->BDCR|=1<<8; /選擇 LSE,作為 RTC 的時鐘 RCC->BDCR|=1<<15; /使能 RTC 時鐘/關(guān)閉 RTC 寄存器寫保護RTC->WPR=0xCA; RTC->WPR=0x53; if(RTC_Init_Mode()return 2; /進入RTC初始化模式 RTC->PRER=0XFF; /RTC同步分頻系數(shù)(07FFF),必須先設(shè)置同步分頻, /再設(shè)置異步分頻,Frtc=Fclks/(Sprec+1)*(Asprec+1) RTC->PRER|=0X7F<
31、<16; /RTC異步分頻系數(shù)(10X7F) RTC-CR&=(1<<16); /RTC設(shè)置為,24小時格式 RTC-ISR&=(1<<7); /退出 RTC初始化模式 RTC-WPR=0xFF; /使能 RTC寄存器寫保護 RTC_Set_Time(23,59,56,0); /設(shè)置時間 RTC_Set_Date(14,5,5,1); /設(shè)置日期 /RTC_Set_AlarmA(7,0,0,10); /設(shè)置鬧鐘時間 RTC_Write_BKR(0,0X5050); /標記已經(jīng)初始化過了 /RTC_Set_WakeUp(4,0); /配置 WAKE
32、UP 中斷,1 秒鐘中斷一次 return 0; 2.int main(void) u8hour,min,sec,ampm; u8 year,month,date,week; u8 tbuf40; u8 t=0; Stm32_Clock_Init(336,8,2,7); /設(shè)置時鐘,168Mhz delay_init(168); /延時初始化 uart_init(84,115200); /初始化串口波特率為 115200 usmart_dev.init(84); /初始化 USMART LED_Init(); /初始化 LED LCD_Init(); /初始化 LCD RTC_Init();
33、/初始化 RTC RTC_Set_WakeUp(4,0); /配置 WAKE UP 中斷,1 秒鐘中斷一次 POINT_COLOR=RED; LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"RTC TEST"); LCD_ShowString(30,90,200,16,16,"ATOMALIENTEK"); LCD_ShowString(30,110,200,16,16,"2014/5/5");
34、while(1) t+;if(t%10)=0) /每 100ms 更新一次顯示數(shù)據(jù) RTC_Get_Time(&hour,&min,&sec,&m); sprintf(char*)tbuf,"Time:%02d:%02d:%02d",hour,min,sec); LCD_ShowString(30,140,210,16,16,tbuf);RTC_Get_Date(&year,&month,&date,&week);sprintf(char*)tbuf,"Date:20%02d-%02d-%02d
35、",year,month,date);LCD_ShowString(30,160,210,16,16,tbuf); sprintf(char*)tbuf,"Week:%d",week); LCD_ShowString(30,180,210,16,16,tbuf); if(t%20)=0)LED0=!LED0; /每200ms,翻轉(zhuǎn)一次 LED0 delay_ms(10); 六、實驗總結(jié)通過這次實驗,我學(xué)會了USMART調(diào)試組件的功能,串口調(diào)用相關(guān)函數(shù),了解了STM32F4的內(nèi)部實時時鐘的硬件控制原理及設(shè)計方法,以及使用LCD模塊來顯示日期和時間,實現(xiàn)一個簡單的實時
36、時鐘。實驗中,下載編程時遇到了一些問題,在老師的幫助下解決了,同時還鞏固了知識,實驗出真知,實驗也是另一種學(xué)習(xí)的途徑。七、預(yù)習(xí)思考題八、注意事項(1)新建文件夾時,區(qū)分不同的文件夾之間的關(guān)系。(2)編寫代碼時,注意格式和符號,在英文環(huán)境下輸入。實驗名稱:COSII實驗-任務(wù)調(diào)度實驗時間:12.14實驗成績:一、實驗?zāi)康?.了解UCOSII(實施多任務(wù)操作系統(tǒng)的內(nèi)核)的使用與工作原理2.運用嵌入式相關(guān)知識實現(xiàn)該試驗所要達到的效果,讓led0和led1交替閃爍二、實驗原理該實驗中要用到的UCOSII是一個可以基于ROM運行的、可裁剪的、搶占式、實時多任務(wù)內(nèi)核,具有高度可移植性的實時操作系統(tǒng)。UCO
37、SII的基本功能是多任務(wù)進行調(diào)度管理,讓這些工作可以并發(fā)工作,并發(fā)不是同時占用,只是各任務(wù)輪流占用CPU。UCOSII的每個任務(wù)都是一個死循環(huán)。每個任務(wù)都處在以下5種狀態(tài)之一的狀態(tài)下,這5種狀態(tài)是:睡眠狀態(tài)、就緒狀態(tài)、運行狀態(tài)、等待狀態(tài)和中斷服務(wù)狀態(tài)。這5種狀態(tài)可相互轉(zhuǎn)換。在STM32F4上面運行UCOSII的步驟:1) 移植UCOSII2) 編寫任務(wù)函數(shù)并設(shè)置其堆棧大小和優(yōu)先級等參數(shù)3) 初始化UCOSII,并在UCOSII中創(chuàng)建任務(wù)4) 啟動UCOSII 三、實驗資源硬件資料:1)指示燈DS0、DS1四、實驗內(nèi)容及步驟1. 硬件設(shè)計本章我們在UCOSII里面創(chuàng)建3個任務(wù):開始任務(wù)、LED0
38、任務(wù)和LED1任務(wù),開始任務(wù)用于創(chuàng)建其他(LED0和LED1)任務(wù),之后掛起:LED0任務(wù)用于控制DS0的亮滅,DS0每秒亮80ms;LED1任務(wù)用于控制DS1的亮滅,DS1亮300ms,滅300ms,依次循環(huán)。2. 軟件設(shè)計本次實驗在實驗1的基礎(chǔ)上進行修改,在該工程源碼下面加入UCOSII文件夾,存放UCOSII三個文件夾下的源碼,并將這三個文件夾加入頭文件包含路徑,最后得到工程如下圖5.1所示:圖5.1本章中,我們對os_cfg.h里面定義OS_TICKS_PER_SEC的值為200,也就是設(shè)置UCOSII的時鐘節(jié)拍為5ms,同時設(shè)置OS_MAX_TASKS為10,也就是最多10個任務(wù)(包
39、括空閑任務(wù)和統(tǒng)計任務(wù)在內(nèi))。另外,我們還需要在sys.h里面設(shè)置SYSTEM_SUPPORT_UCOS為1,以支持UCOSII,通過這個設(shè)置,我們不僅可以實現(xiàn)利用delay_init來初始化SYSTICK,產(chǎn)生UCOSII的系統(tǒng)時鐘節(jié)拍,還可以讓delay_us和delay_ms函數(shù)在UCOSII下能夠正常使用,這就使得我們之前的代碼,可以十分方便的移植到UCOSII下。在test.c中創(chuàng)建了3個任務(wù):start_task、led0_task和led1_task。在start_task任務(wù)中,我們在創(chuàng)建led0_task和led1_task的時候,不希望中斷打擾,故使用了臨界區(qū),注意這里使用的
40、延時函數(shù)是delay_ms,而不是直接使用的OSTimeDly。另外,一個任務(wù)里面一般是必須有延時函數(shù)的,以釋放CPU使用權(quán),否則可能導(dǎo)致低優(yōu)先級的任務(wù)因高優(yōu)先級的任務(wù)不釋放CPU使用權(quán)而一直無法得到CPU使用權(quán),從而無法運行。3.下載驗證使用 flymcu 下載(也可以通過JLINK等仿真器下載),如圖 5.2所示:圖5.2運行結(jié)果如圖5.3所示:圖5.3五、實驗源程序1)test.cint main(void) Stm32_Clock_Init(336,8,2,7);/設(shè)置時鐘,168Mhzdelay_init(168);/初始化延時函數(shù)LED_Init();/初始化LED時鐘 OSIni
41、t(); /初始化UCOSIIOSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STKSTART_STK_SIZE-1,START_TASK_PRIO );/創(chuàng)建起始任務(wù)OSStart(); /啟動UCOSII void start_task(void *pdata) OS_CPU_SR cpu_sr=0;pdata = pdata; OS_ENTER_CRITICAL();/進入臨界區(qū)(無法被中斷打斷) OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STKLED0_STK_SIZE-1,LED0_TASK_PRIO); OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_TASK_STKLED1_STK_SIZE-1,LED1_TASK_PRIO); OSTaskS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房顫基礎(chǔ)知識試題及答案
- 育嬰員考試題及答案
- 藥學(xué)基礎(chǔ)知識普及試題及答案
- 藥物與食物相互作用研究試題及答案
- 單位招聘面試題及答案
- 色覺標準 測試題及答案
- 西醫(yī)臨床應(yīng)試策略與分析試題及答案
- 數(shù)控編程筆試題目及答案
- 文職轉(zhuǎn)崗測試題及答案
- 藥劑類考試分科試題及答案分析
- 綠色金融產(chǎn)品創(chuàng)新與風(fēng)險管理-全面剖析
- 肝門部膽管癌診斷和治療指南(2025版)解讀
- 2025年廣東廣州市高三一模英語試卷試題及答案
- 山西省朔州市懷仁縣2025屆小學(xué)六年級第二學(xué)期小升初數(shù)學(xué)試卷含解析
- 東北三省三校2025屆高三下學(xué)期第二次聯(lián)合模擬考試物理試題及答案
- 2025年山東省濟南市萊蕪區(qū)中考一模地理試卷(原卷版+解析版)
- 2025陜西金融資產(chǎn)管理股份有限公司員工招聘(26人)筆試參考題庫附帶答案詳解
- 2025年中國經(jīng)緯儀行業(yè)市場調(diào)查研究及投資前景展望報告
- 杭州2025年浙江杭州余杭區(qū)余杭街道招聘編外勞務(wù)派遣人員25人筆試歷年參考題庫附帶答案詳解
- 2024-2025學(xué)年度四川省達州市達川區(qū)銘仁園學(xué)校高一第二學(xué)期3月月考歷史試題(含答案)
- 2025年全球美容與美容個護趨勢報告:中國篇
評論
0/150
提交評論