




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验成绩:指导老师:嵌入式系统与应用实验报告学院: 自 动 化 学 院 专业: 电气工程及其自动化 班级: 姓名: 学号: 姓名: 学号: 串口通信实验一、 实验目的1熟悉STM32F4串口硬件控制器及相应寄存器,基于STM硬件基库编写串口驱动程序,实现串口与PC机通信。二、 实验内容1. 学习STM32F4 USART硬件模块;2. 基于提供的stm32f4xx_usart.h和stm32f4xx_usart.c文件,编写main.c文件,实现与PC机之间通过串口数据收发功能。三、 预备知识C语言的基础知识,ARM-MDK程序调试的基础知识和方法。C语言的基础知识,ARM-MDK程序调试的基础知识和方法。四、 实验设备及工具硬件:ALIENTEK探索者STM32F4开发板、ST-Link调试器、PC机、串口连接线。软件:PC 机Windows操作系统、ARM MDK5集成开发环境、仿真器驱动程序、超级终端通讯程序。五、实验步骤1USART硬件模块学习2USART驱动代码学习2.1 printf 函数支持2.2 uart_init函数2.3 USART1_IRQHandler函数3. main() 参考代码结果:开始程序,灯亮。实验四 uCOS-II嵌入式实时操作系统实验一、实验目的1了解uCOS-II嵌入式实时操作系统原理,能够编写简单应用程序。二、实验内容1. 学习uCOS-II基本概念,Task调度机制,信号量机制;2. 基于提供的uCOS-II基础工程代码,添加信号量功能,使得开发板开机后led1熄灭,led0闪烁led0 10次后熄灭,led1接着闪烁10次后led0再闪烁,如此反复。三、预备知识C 语言的基础知识,ARM-MDK程序调试的基础知识和方法,RTOS嵌入式实时操作系统基本概念。四、实验设备及工具硬件:ALIENTEK探索者STM32F4开发板、ST-Link调试器、PC机、串口连接线。软件:PC 机Windows操作系统、ARM MDK5集成开发环境、仿真器驱动程序、超级终端通讯程序。五、实验步骤1. uCOS-II基础知识学习UCOSII是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能,UCOSII最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。UCOSII构思巧妙。结构简洁精练,可读性强,同时又具备了实时操作系统的全部功能,虽然它只是一个内核,但非常适合初次接触嵌入式实时操作系统的朋友,可以说是麻雀虽小,五脏俱全。UCOSII(V2.91版本)体系结构如图4.1所示:图4.1 UCOSII体系结构图UCOSII的每个任务都是一个死循环。每个任务都处在以下 5种状态之一的状态下,这5种状态是:睡眠状态、就绪状态、运行状态、等待状态(等待某一事件发生)和中断服务状态。UCOSII任务的5个状态转换关系如图61.1.2所示:图61.1.2 UCOSII任务状态转换关系接下来,我们看看在UCOSII中,与任务相关的几个函数:1) 建立任务函数OSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INTU prio)。2) 任务删除函数INT8U OSTaskDel(INT8U prio);3) 请求任务删除函数INT8U OSTaskDelReq(INT8U prio);4) 改变任务的优先级函数INT8U OSTaskChangePrio(INT8U oldprio,INT8U newprio);5) 任务挂起函数INT8U OSTaskSuspend(INT8U prio);6) 任务恢复函数INT8U OSTaskResume(INT8U prio);7) 任务信息查询INT8U OSTaskQuery(INT8U prio,OS_TCB *pdata);UCOSII与任务相关的函数我们就介绍这么多。最后,我们来看看在STM32F4上面运行UCOSII的步骤:1)移植UCOSII 2)编写任务函数并设置其堆栈大小和优先级等参数。3)初始化UCOSII,并在UCOSII中创建任务4)启动UCOSII 2. 添加信号量功能接下来我们看看在UCOSII中,与信号量相关的几个函数(未全部列出,下同)。1)创建信号量函数OS_EVENT*OSSemCreate (INT16U cnt);2)请求信号量函数voidOSSemPend ( OS_EVENT *pevent,INT16U timeout, INT8U *err);3)发送信号量函数INT8UOSSemPost(OS_EVENT *pevent);4)删除信号量函数OS_EVENT*OSSemDel (OS_EVENT *pevent,INT8U opt, INT8U *err)六、实验代码#include sys.h#include delay.h#include usart.h#include led.h#include includes.hvoid start_task(void *pdata);#define LED0_TASK_PRIO 7 #define LED0_STK_SIZE 64OS_STK LED0_TASK_STKLED0_STK_SIZE;void led0_task(void *pdata);#define LED1_TASK_PRIO 6 #define LED1_STK_SIZE 64OS_STK LED1_TASK_STKLED1_STK_SIZE;void led1_task(void *pdata);int main(void) delay_init(168);LED_Init();OSInit(); OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STKSTART_STK_SIZE-1,START_TASK_PRIO );OSStart();void start_task(void *pdata) OS_CPU_SR cpu_sr=0;pdata = pdata; OS_ENTER_CRITICAL();led0_led1=OSSemCreate(0);led1_led0=OSSemCreate(1);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);OSTaskSuspend(START_TASK_PRIO);OS_EXIT_CRITICAL(); /LED0void led0_task(void *pdata)int t;while(1)OSSemPend(led0_led1,0,0);for(t=0;t10;t+)LED0=0;delay_ms(80);LED0=1;delay_ms(92);OSSemPost(led1_led0);void led1_task(void *pdata)int t; while(1)OSSemPend(led1_led0,0,0);for(t=0;t10;t+)LED1=0;delay_ms(300);LED1=1;delay_ms(300);OSSemPost(led0_led1);心得体会:在做B205的实验过程中,掌握了一部分创建嵌入式开发环境的流程,学习了串口通信,ADC转
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论