嵌入式系统试验报告_第1页
嵌入式系统试验报告_第2页
嵌入式系统试验报告_第3页
嵌入式系统试验报告_第4页
嵌入式系统试验报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告课程名称:嵌入式系统学 院:信息工程专 业:电子信息工程班 级:学生姓名:学 号:指导教师:开课时间:学年 第一学期实验名称:IO接口跑马灯实验时间:11.16实验成绩:一、实验目的1. 掌握STM32F4根本10 口的使用.2. 使用STM32F4O 口的推挽输出功能,利用GPI0_Set函数来设置完成对10 口 的配置.3. 限制STM32F4勺I0 口输出,实现限制 ALIENTEK探索者STM32F卅发板上的 两个LED实现一个类似跑马灯的效果.二、实验原理本次实验的关键在于如何限制 STM32F4勺IO 口输出.IO主要由:MODEFOTYPE、 OSPEEDRPUPDROD

2、R IDR、AFRHffi AFRL等 8个存放器的限制,并且本次实验主要 用到IO 口的推挽输出功能,利用 GPIO_Set函数来设置,即可完成对IO 口的配置. 所以可以通过了开发板上的两个 LED灯来实现一个类似跑马灯的效果.三、实验资源实验器材:探索者STM32F开发板硬件资源:1. DS0连接在 PF92. DS1连接在 PF10四、实验内容及步骤1. 硬件设计'THIMl _CH 1/FSMC_NREG/ADC3_IN5TM3Hl一F5人忧 NIOWR3 IN614.CH L /FSMC_CD/ADC3JH7 PF1Q-TSMC iSTKADcflNSPril.7X?M D

3、I:19 Er/LlOtll SEf I P2i mLEDO|i.i-ml4Q ?FHT MOSl铀 PFiiFWC A6|LjblDSUOSRSYS52. 软件设计1新建TEST工程,在该工程文件夹下面新建一个 HARDWARt件夹,用来存储 以后与硬件相关的代码.然后在HARDWARt件夹下新建一个LED文件夹,用来存放 与LED相关的代码.2翻开USERt件夹下的test.uvproj 工程,新建一个文件,然后保存在LED文 件夹下面,保存为led.c,在led.c中输入相应的代码.3采用GPIO_Set函数实现10配置°LED_Init调用GPI0_Set函数完成对PF9 和

4、PF10 ALIENTEK探索者STM32F407开发板教程119 STM32F4开发指南存放器版 的模式配置,限制LED0和LED1输出1 LED灭,使两个LED的初始化.4新建一个led.h文件,保存在LED文件夹下,在led.h中输入相应的代码.3. 下载验证使用flymcu下载也可以通过JLINK等仿真器下载,如图1.2所示:图1.2运行结果如图1.3所示:图1.3五、实验源程序相关代码如下所示:led.c 文件#i nclude "led.h"void LEDnit(void)RCC->AHB1ENR|=1<<5;GPIO_Set(GPIOF,P

5、IN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PFG PIO_SPEED_100M,GPIO_PUPD_PU);PF9,PF10 设置LED0=1;/LED0 关闭LED1=1;/LED1 关闭led.h 文件#ifndef _LED_H#defi ne _LED_H#i nclude "sys.h"/LED端口定义#defi ne LED0 PFout(9) / DS0#defi ne LED1 PFout(10) / DS1void LED_I nit(void); /初始化#en dif(3)main 函数#i nclude "sys

6、.h"#i nclude "delay.h"#in clude "led.h"int main(void)Stm32_Clock_Init(336,8,2,7);/ 设置时钟 ,168Mhzdelay_init(168); /初始化延时函数LED_Init(); / 初始化 LED 时钟while(1)LED0=0; /DS0 亮LED1=1; /DS1 灭delay_ms(500);LED0=1; /DS0 灭LED1=0; /DS1 亮delay_ms(500);六、实验总结 本次实验过程中,由于第一次实验,对实验器件,还有实验过程都不大了

7、解,使得做实验过 程中遇到很大的问题.也花费了不少时间,不过在慢慢的摸索中,以及老师的指导和同学的帮助 下,最终也了解了 探索者STM32F开发板的外部结构,以及各个引脚的作用,还有各个串口 和并口的具体使用,还观察了跑马灯的运行状态,以及它的运行程序.七、预习思考题八、考前须知(1) 新建文件夹时,区分不同的文件夹之间的关系.(2) 编写代码时,注意格式和符号,在英文环境下输入实验名称:触摸屏实验时间:11.23实验成绩:一、实验目的1. 掌握触摸屏的工作原理.2. 通过外接带触摸屏的LCD模块,来实现触摸屏限制.3. 通过对电阻触摸和电容触摸的学习,实现触摸屏驱动,最终实现一个手写板的功、

8、实验原理电阻式触摸屏原理:当手指触摸屏幕时,两层导电层在触摸点位置就有了接触, 限制器检测到这个接通点并计算出 X、Y轴的位置.特点:精度高、价格廉价、抗干扰水平强、稳定性好;易被划伤、透光性差、不支持多点触摸.电容式触摸屏原理:利用人体的电流感应进行工作.当手指触摸金属层时,由于 人体电场,用户和触摸屏外表形成一个耦合电容.对于高频电流来说电容是直接导体, 于是手指从接触点吸走一个很小的电流.这个电流分别从触摸屏的4个角的电极流出,并且流经4个电极的电流与手指到4角的距离成正比.限制器通过对电流比例的 计算,得到触摸点的位置.特点:手感好、无需校正、透光性好、支持多点触摸;本钱咼、精度不咼、

9、抗干扰力差.三、实验资源实验器材:探索者STM32F开发板硬件资源:1、DSO连接在PF92 、串口 1波特率:115200,PA9/PA10连接在板载USB专串口芯片CH340±面3 、ALIENTEK2.8/3.5/4.3/7 寸 TFTLCD模块通过 FSMC区动,FSMC_NE接 LCD 片选/A6 接RS4、按键 KEY0PE4四、实验内容及步骤1. 硬件设计图2.1触摸屏与STM32F4连接原理图2. 软件设计(1) 翻开上一章的工程,由于本次实验不要用到USMAR和 CANffi关代码,所以, 先去掉 USMART关代码和 can.c (此时 HARDWASS下:led

10、.c、ILI93xx.c 和 key.c ). 不过,本次实验要用到 24C02,所以要添加 myiic.c和24cxx.c到HARDWARET.(2) 然后,在HARDWARES夹下新建一个TOUCBfc件夹.然后新建一个touch.c、 touch.h、ctiic.c 等十个文件,并保存在TOUC文件夹下,并将这个文件夹参加头 文件包含路径.其中,touch.c和touch.h是电阻触摸屏局部的代码,顺带兼电容触 摸屏的治理限制,其他那么是电容触摸屏局部的代码.3. 下载验证使用flymcu下载(也可以通过JLINK等仿真器下载),如图2.2所示:图2.2运行结果如图2.3所示:图2.3五

11、、实验源程序(1)main 函数int main(v oid)Stm32_Clock_l nit(336,8,2,7); delayni t(168);/uart_i ni t(84,115200);/LEDnit();/LCD_I nit();/LCDKEYnit();/tp_dev.i nit();/POINT_COLOR=RED;/设置时钟,168Mhz延时初始化初始化串口波特率为115200初始化LED初始化按键初始化触摸屏初始化/设置字体为红色LCD_ShowStri ng(30,50,200,16,16,"Explorer STM32F4");LCD_ShowS

12、tri ng(30,70,200,16,16,"TOUCH TEST");LCD_ShowStri ng(30,90,200,16,16,"ATOMALIENTEK");LCD_ShowStri ng(30,110,200,16,16,"2021/5/7");if(tp_dev.touchtype!=0XFF )L CD_ShowStri ng(30,130,200,16,16,"PressKEY0toAdjust"); delay_ms(1500); Load_Drow_Dialog();if(tp_dev.to

13、uchtype&0X80)ctp_test(); / 电容屏测试else rtp_test(); / 电阻屏测试(2)/ 电阻触摸屏测试函数void rtp_test(void)u8 key; u8 i=0;while(1) key=KEY_Scan(0);tp_dev.scan(0); 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

14、_dev.y0<16) Load_Drow_Dialog();else TP_Draw_Big_Point(tp_dev.x0,tp_dev.y0,RED); / 画图/ 没有按键按下的时候/KEY0按下, 那么执行校准程序/ 清屏屏幕校准else delay_ms(10);if(key=KEY0_PRES) LCD_Clear(WHITE); TP_Adjust(); / TP_Save_Adjdata();Load_Drow_Dialog();i+;if(i%20=0)LED0=!LED0;(3) / 电容触摸屏测试函数 void ctp_test(void)u8 t=0; u8 i

15、=0;u16 lastpos52; / 最后一次的数据 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_dev.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_CO

16、LOR_TBLt); / 画线 lastpost0=tp_dev.xt;lastpost1=tp_dev.yt; if(tp_dev.xt>(lcddev.width-24)&&tp_dev.yt<20) Load_Drow_Dialog(); / 去除else lastpost0=0XFFFF; delay_ms(5);i+;if(i%20=0)LED0=!LED0;六、实验总结 根本到达实验的要求,了解触摸屏根本概念与原理,以及通过编程实现对触摸屏的限制,以 及知道如何验证实验结果是否属于预期目标,并了解实验原理,为今后嵌入式的学习打下一定的 学习根底.七、预习

17、思考题八、考前须知1新建文件夹时,区分不同的文件夹之间的关系.2编写代码时,注意格式和符号,在英文环境下输入实验名称:串口通信实验时间:11.30实验成绩:一、实验目的1. 了解 STM32F串 口.2. 掌握如何使用STM32F的串口来发送和接收数据3. 学会如何初始化串口.4. 掌握串口编程与调试方法.二、实验原理串行通信需要将传输的数据分解成二进制位,然后采用一条信号线将多个二进制 数据位按一定的时间和顺序,逐位由信息发送端传到信息的接收端. 根据数据的传输 方向和发送接收是否能同时进行,数据传输的工作方式分为单工方式, 半双工方式和 全双工方式.单工通信是指信息只能单方向传输的工作方式

18、,发送端和接收端的方向是固定的. 半双工通信方式可以实现双向的通信,不能在两个方向上同时进行工作,但可以 轮流交替地进行通信,即通信信道的任意端,既可以是发送端也可以是接收端.全双工通信方式是指在通信的任意时刻,允许数据同时在两个方向上传输,即通 信双方可以同时发送和接收数据.三、实验资源实验器材:探索者STM32F开发板硬件资源:a. DSO连接在 PF9b. 串口 1波特率:115200,PA9/PA10连接在板载USB专串口芯片CH340上面四、实验内容及步骤1. 硬件设计所需硬件资源:1指示灯DSO2串口 1Q36l«0Q30牆oPA旳O 口严0(R) Mo rxdO96PA

19、15PC11PD2图3.1硬件连接图示意图2. 软件设计1 翻开上一章的TSET工程,由于本章我们用不到按键和蜂鸣器等功能, 所以把 key.c和beep.c从HARDWARE组里面删除,从减少工程代码量,仅留下必须的 .c 文件,节省空间,加快编译速度.2然后在SYSTEM!下双击usart.c,就可以看到文件里的代码.3. 下载验证使用flymcu下载也可以通过JLINK等仿真器下载,如图3.2所示:图3.2运行结果如图3.3所示:图3.3五、实验源程序1 uart_init函数/初始化10串口 1pclk2:PCLK2 时钟频率Mhz bound:波特率void uart_init(u3

20、2 pclk2,u32 bound)float temp;u16 mantissa;u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);/ 得到 USARTDIVOVER8=0 mantissa=temp; / 得到整数局部fraction=(temp-mantissa)*16; / 得到小数局部 OVER8=0 mantissa<<=4;mantissa+=fraction;RCC->AHB1ENR|=1<<0; / 使能 PORTA 口时钟RCC->APB2ENR|=1<<4; / 使能串

21、口 1 时钟GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); /PA9,PA10,复用功能 , 上拉输出GPIO_AF_Set(GPIOA,9,7); /PA9,AF7 GPIO_AF_Set(GPIOA,10,7); /PA10,AF7/ 波特率设置USART1->BRR=mantissa; / 波特率设置 USART1->CR1&=(1<<15); /OVER8=0 USART1->CR1|=1<<3; / 串口发送使能#if

22、 EN_USART1_RX / 如果使能了接收/ 使能接收中断USART1->CR1|=1<<2; / 串口接收使能USART1->CR1|=1<<5; / 接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART1_IRQn,2);/ 组 2,最低优先级 #endifUSART1->CR1|=1<<13; / 串口使能(2)test.c 函数 #include "sys.h" #include "delay.h" #include "usart.h" #include

23、 "led.h" int main(void) u8 t;u8 len;u16 times=0; Stm32_Clock_Init(336,8,2,7);/ 设置时钟 ,168Mhz delay_init(168); / 延时初始化uart_init(84,115200); / 串口初始化为 115200LED_Init(); / 初始化与 LED 连接的硬件接口 while(1)if(USART_RX_STA&0x8000) len=USART_RX_STA&0x3fff;/ 得到此次接收到的数据长度 printf("rn 您发送的消息为 :rn

24、");for(t=0;t<len;t+) USART1->DR=USART_RX_BUFt; while(USART1->SR&0X40)=0);/ 等待发送结束 printf("rnrn");/ 插入换行 USART_RX_STA=0;else times+; if(times%5000=0) printf("rnALIENTEK探索者 STM32F407 开发板 串口实验 rn");printf(" 正点原子 ALIENTEKrnrnrn"); if(times%200=0)printf(&qu

25、ot; 请输入数据 , 以回车键结束 rn"); if(times%30=0)LED0=!LED0;/ 闪烁 LED, 提示系统正在运行 . delay_ms(10); 六、实验总结在程序设计方面, 对串口通信的过程有了更深刻的理解和领会. 通过本次实验, 使我对 ARM 嵌入式开发有了一定的掌握和理解,稳固了我在课程中所学的根本理论知识和实验技能,使我对 嵌入式系统课程有了更深入的了解,熟悉了串口的使用,了解了内部功能模块及内核架构.七、预习思考题八、考前须知1新建文件夹时,区分不同的文件夹之间的关系.2编写代码时,注意格式和符号,在英文环境下输入实验名称:RTC实时时钟实验时间:

26、12.7实验成绩:一、实验目的1. 学会使用TFTLCD莫块来显示日期和时间,实现一个简单的实时时钟,并可以 设置闹钟2. 了解和掌握STM32F4勺RTC的工作原理二、实验原理STM32F4勺RTC时钟的使用:1时钟和分频;2日历时间RTC_TR和日期RTC_DR 存放器;3可编程闹钟;4周期性自动唤醒RTC正常工作的一般配置步骤如下:1使能电源时钟,并使能 RTC及 RTC后备 存放器写访问;2开启外部低能振荡器,选择 RTC时钟,并使能;3取消RTC写保 护;4进入RTC初始化模式;5设置RTC的分频,以及配置RTC参数通过以上的5个步骤,我们就完成了对 RTC的配置,RTC即可正常工作

27、,而且这 些操作不是每次上电都必须执行的,可以视情况而定.三、实验资源实验器材:探索者STM32F4开发板四、实验内容及步骤硬件资源:1、DSO连接在PF9,DS1连接在PF102、串口 1波特率:115200,PA9/PA10连接在板载USB转串口芯片 CH340上3、ALIENTEK 2.8/34.37 寸 TFTLCD模块通过 FSMC驱动,FSMC_NE4接 LCD片选/A6 接 RS1. 硬件设计RTC属于STM32F晒部资源,期配置也是通过软件设置好就可以了.不过 RTC不 能断电,否那么数据就丧失了,我们如果想让时间在断电后还可以继续走, 那么必须确 保开发板的电池有电.2. 软

28、件设计翻开上一章的工程,首先在HARDWARE牛夹下新建一个RTC的文件夹.然后翻开USER 文件夹下的工程,新建一个rtc.c的文件和rtc.h的头文件,保存在RTC文件夹下, 并将RTC文件夹参加头文件包含路径.rtc.c中的代码中的RTC_Init函数用来初始化RTC时钟,在这里设置时间和日期,分别是通过RTC_Set_Time和RTC_Set_Data函数来实现的,其中RTC_Set_Time用于 设置时间,RTC_Set_Data用于设置日期.Test.c中通过RTC_Sst_WakeUp4,0;设置RTC周期型自动唤醒周期为1秒钟,类似 于STM32F的秒钟中断.然后,在main函

29、数不断的读取RTC的时间和日期每100ms 一次,并显示在LED上面.将RTC的一些相关函数参加了 usmart,这样通过串口就可以直接设置 RTC时间、日期、 闹钟A、周期性唤醒和备份存放器读写等操作.3. 下载验证使用flymcu下载也可以通过JLINK等仿真器下载,如图4.2所示: 运行结果如图4.3所示:图4.2XCOM V7.Cfk4 Hd亠一uJt F4£.4ddr fuSE- ii>ir J 卜也 Ji 込 tT I |i4_tMbrfetlJr . mXT 十 fellqrii 4 4*1 锣耳 ts|.6Th- ; 4- lL'a-y -亠-jJt b

30、. k>Jg 仲bra.腹血诫 甜氏16 "尸:|m it主用世-db mth, * rl*. idA ini;定I:¥*4k <B 島.o3 rail, ulS i*c ifQ3. J TTLit二f 山虽舟rjj rwkl-vl. Tll B <h4>! 札也 為計 RiUgK3bJul: mw)jf-WrLteKll. m*.u a*H.iIVWr曲卄f!图4.3五、实验源程序1. RTCnit/RTC初始化/返回值:0,初始化成功;/ 1,LSE 开启失败;/ 2,进入初始化模式失败u8 RTCni t(void)u16 retry=0X1F

31、FF;RCC->APB1ENR|=1<<28; / 使能电源接口时钟 PWR->CR|=1<<8; / 后备区域访问使能 (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)return 1; /LSE RCC->BDCR|=1<<8;/RCC->

32、;BDCR|=1<<15;/ 关闭 RTC 存放器写保护 RTC->WPR=0xCA;开启失败.选择 LSE, 作为 RTC 的时钟 使能 RTC 时钟退出RTC初始化模式 使能RTC存放器写保护 设置时间 设置日期 设置闹钟时间 标记已经初始化过了u8hour,min,sec,ampm;u8 year,month,date,week;u8 tbuf40;u8 t=0;Stm32_Clock_Init(336,8,2,7); /delay_init(168);/uart_init(84,115200);/usmart_dev.init(84);/LED_Init();/LCD

33、_Init();/RTC_Init();/设置时钟 ,168Mhz延时初始化 初始化串口波特率为 115200初始化 USMART初始化 LED初始化 LCD初始化 RTCRTC->WPR=0x53;if(RTCnit_Mode()return 2; /进入 RTC初始化模式RTC->PRER=0XFF; /RTC 同步分频系数 (07FFF), 必须先设置同步分频/再设置异步分频 ,Frtc=Fclks/(Sprec+1)*(Asprec+1)RTC->PRER|=0X7F<<16; /RTC 异步分频系数 (10X7F)RTC-CR&=(1<&l

34、t;16); /RTC 设置为 ,24 小时格式RTC-ISR&=(1<<7);/RTC-WPR=0xFF;/RTC_Set_Time(23,59,56,0); /RTC_Set_Date(14,5,5,1); / /RTC_Set_AlarmA(7,0,0,10); /RTC_Write_BKR(0,0X5050); /RTC_Set_WakeUp(4,0); / 配置 WAKE UP 中断,1 秒钟中断一次return 0;2.int main(void)RTC_Set_WakeUp(4,0); / 配置 WAKE UP 中断,1 秒钟中断一次 POINT_COLOR=

35、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,"2021/5/5");while(1)t+;if(t%10)=0) / 每 100ms 更新一次显示数据 RTC_Get_Time(&hour,&am

36、p;min,&sec,&ampm); 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",year,month,date); LCD_ShowString(30,160,210,16,16,tbuf); spr

37、intf(char*)tbuf,"Week:%d",week);LCD_ShowString(30,180,210,16,16,tbuf);if(t%20)=0)LED0=!LED0; /每 200ms,翻转一次 LED0delay_ms(10); 六、实验总结通过这次实验,我学会了 USMAR调试组件的功能,串口调用相关函数,了解了 STM32F4勺内部实时时钟的硬件限制原理及设计方法, 以及使用LCD模块来显示日期 和时间,实现一个简单的实时时钟.实验中,下载编程时遇到了一些问题,在老师的 帮助下解决了,同时还稳固了知识,实验出真知,实验也是另一种学习的途径.七、预习思

38、考题八、考前须知1新建文件夹时,区分不同的文件夹之间的关系.2编写代码时,注意格式和符号,在英文环境下输入实验名称:卩COSII实验-任务调度实验时间:12.14实验成绩:、实验目的1. 了解UCOSII 实施多任务操作系统的内核的使用与工作原理2. 运用嵌入式相关知识实现该试验所要到达的效果,让ledO和ledl交替闪烁二、实验原理该实验中要用到的UCOSII是一个可以基于ROMH行的、可裁剪的、抢占式、实 时多任务内核,具有高度可移植性的实时操作系统.UCOSII的根本功能是多任务进行调度治理,让这些工作可以并发工作,并发不 是同时占用,只是各任务轮流占用 CPUUCOSII的每个任务都是

39、一个死循环.每个任务都处在以下5种状态之一的状态下,这5种状态是:睡眠状态、就绪状态、运行状态、等待状态和中断效劳状态.这 5种状态可相互转换.在STM32F上面运行UCOSII的步骤:1移植 UCOSII2编写任务函数并设置其堆栈大小和优先级等参数3初始化UCOSII,并在UCOSII中创立任务4启动 UCOSII三、实验资源硬件资料:1指示灯DSO DS1四、实验内容及步骤1. 硬件设计本章我们在UCOSII里面创立3个任务:开始任务、LEDO任务和LED1任务,开始任 务用于创立其他LED0和 LED1任务,之后挂起:LED0任务用于限制DS0的亮灭,DS0每秒亮80ms LED1任务用

40、于限制 DS1的亮灭,DS1亮300ms灭300ms依次循 环.2. 软件设计本次实验在实验1的根底上进行修改,在该工程源码下面参加 UCOSII文件夹,存放 UCOSII三个文件夹下的源码,并将这三个文件夹参加头文件包含路径,最后得到工 程如下列图5.1所示:图5.1本章中,我们对os_cfg.h里面定义OS_TICKS_PER_SEC值为200,也就是设置 UCOSII的时钟节拍为5ms同时设置OS_MAX_TAS为S10,也就是最多10个任务包 括空闲任务和统计任务在内.另外,我们还需要在sys.h里面设置 SYSTEM_SUPPORT_UCOS以支持UCOSII,通过这个设置,我们不仅

41、可以实现利用 delaynit来初始化SYSTICK产生UCOSII的系统时钟节拍,还可以让 delays和delay_ms函数在UCOSII下能够正常使用,这就使得我们之前的代码,可以十分方 便的移植到UCOSII下.在 test.c 中创立了 3 个任务:start_task 、Ied0_task 和 Ied1_task.在 start_task 任务中,我们在创立Ied0_task和led1_task的时候,不希望中断打搅, 故使用了临界区,注意这里使用的延时函数是delay_ms,而不是直接使用的OSTimeDly.另外,一个任务里面一般是必须有延时函数的, 以释放CPU使用权,否那么

42、可能导 致低优先级的任务因高优先级的任务不释放 CPU使用权而一直无法得到CPU使用权, 从而无法运行.3. 下载验证使用flymcu下载也可以通过JLINK等仿真器下载,如图5.2所示:图5.2运行结果如图5.3所示:图 5.3五、实验源程序1) test.c int main(void) Stm32_Clock_Init(336,8,2,7);/ 设置时钟 ,168Mhzdelay_init(168);/初始化延时函数LEDnit();/初始化LED时钟OSInit();/初始化 UCOSIIOSTaskCreate(start_task,(void*)0,(OS_STK*)&ST

43、ART_TASK_STKSTART_STK_SIZE-1,START_T ASK_PRIO );/ 创立起始任务OSStart();/ 启动 UCOSIIvoid start_task(void *pdata)OS_CPU_SR cpu_sr=0;pdata = pdata;OS_ENTER_CRITICAL();/ 进入临界区 ( 无法被中断打断 )OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STKLED0_STK_SIZE-1,LED0_T ASK_PRIO);OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论