版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、院系:计算机科学学院专业:自动化年 级:2008级课程名称:嵌入式技术与应用指导教师:张志俊组 号:组 员:覃静2011年11月1日实验题目: USB 接口实验一、设计要求利用 EduKit-M3 实验平台的五个按键实现标准的 USB 接口游戏杆功能。二、硬件电路实现在 EduKit-M3 实验平台上已有一个简易的游戏杆,其SELECTION 、DOWN 、RIGHT 、 LEFT 和UP 键分别与处理器的 PD12 、PD14 、PE1、PE0、 PD8 引脚相连;处理器的 USB 接口已经转换 电路连接到 CN1 连接器。三、软件程序设计该程序的结构比较复杂,除了库文件以及 USB 函数库
2、文件之外,还包含 8 个源文件,其中 STM32F10x.s 是启动代码。下面分别为其他 7 个函数:1、main.c 该函数中主要包含 2 个函数,其中 main 函数初始化系统以及 USB 接口,之 后不断查询游戏杆是否有动作,如果有动作则根据动作向 USB 缓冲器发出相关数据; Delay 函数用于延迟。int main(void)#ifdef DEBUGdebug();#endifSet_System();USB_Interrupts_Config();Set_USBClock();USB_Init();while (1) if (JoyState() != 0) Joystick_S
3、end(JoyState(); void Delay(vu32 nCount) for(; nCount!= 0;nCount-);#ifdef DEBUG2、usb_desc.c 该文件中没有任何函数,只是包含一些定义USB 设备的描述符常数,由于游戏杆是标准 USB 设备,因此比较容易得到相关的参数。若要开发非标准的 USB 设备, 则还需要开发 PC 上运行的非标准设备的驱动程序。3 、stm32f10x_it.c 该文件中包含 USB 中断服务程序,由于 USB 中断有很多情况,这里的 中断服务程序只是调用 usb_Istr.c 文件中的 USB_Istr 函数,由 USB_Istr
4、函数再做轮询处理。4、 usb_Istr.c 该文件中只有一个函数,即USB 中断的 USB_Istr 函数,该函数对各类引起USB 中断的事件作轮询处理。void USB_Istr(void)wIstr = _GetISTR();#if (IMR_MSK & ISTR_RESET)if (wIstr & ISTR_RESET & wInterrupt_Mask) _SetISTR(u16)CLR_RESET);Device_Property.Reset();#ifdef RESET_CALLBACKRESET_Callback();#endif#endif#if (I
5、MR_MSK & ISTR_DOVR)if (wIstr & ISTR_DOVR & wInterrupt_Mask)_SetISTR(u16)CLR_DOVR);#ifdef DOVR_CALLBACKDOVR_Callback();#endif#endif#if (IMR_MSK & ISTR_ERR)if (wIstr & ISTR_ERR & wInterrupt_Mask)_SetISTR(u16)CLR_ERR);#ifdef ERR_CALLBACKERR_Callback();#endif#endif#if (IMR_MSK &a
6、mp; ISTR_WKUP)if (wIstr & ISTR_WKUP & wInterrupt_Mask)_SetISTR(u16)CLR_WKUP); Resume(RESUME_EXTERNAL);#ifdef WKUP_CALLBACK WKUP_Callback(); #endif#endif#if (IMR_MSK & ISTR_SUSP)if (wIstr & ISTR_SUSP & wInterrupt_Mask)if (fSuspendEnabled) Suspend(); elseResume(RESUME_LATER); _SetI
7、STR(u16)CLR_SUSP);#ifdef SUSP_CALLBACK SUSP_Callback();#endif#endif#if (IMR_MSK & ISTR_SOF)if (wIstr & ISTR_SOF & wInterrupt_Mask) _SetISTR(u16)CLR_SOF);bIntPackSOF+;#ifdef SOF_CALLBACKSOF_Callback();#endif#endif#if (IMR_MSK & ISTR_ESOF)if (wIstr & ISTR_ESOF & wInterrupt_Mask
8、) _SetISTR(u16)CLR_ESOF);#ifdef ESOF_CALLBACKESOF_Callback();#endif#endif#if (IMR_MSK & ISTR_CTR)if (wIstr & ISTR_CTR & wInterrupt_Mask) CTR_LP();#ifdef CTR_CALLBACKCTR_Callback();#endif#endif /* USB_Istr */SETUP 包、 IN 包、Set_System 函数USB_Interrupts_ConfigJoyState 函数用于获取5、 usb_prop.c 该文件用
9、于实现相关设备的USB 协议,例如初始化OUT 包等等。6、 usb_pwr.c 该文件中包含处理上电、调电、挂起和恢复事件的函数,7、该文件中包含系统配置的函数,和处理游戏杆动作的函数。其中, 用于配置时钟、 通用端口; Set_USBClock 函数用于配置 USB 端口时钟; 函数用于配置 USB 中断; USB_Cable_Config 函数配置 USB 电缆状态; 游戏杆的状态; Joystick_Send 用于向 USB 端口传送游戏杆的事件。void Set_System(void) GPIO_InitTypeDef GPIO_InitStructure;RCC_DeInit()
10、;/* Enable HSE */RCC_HSEConfig(RCC_HSE_ON);/* Wait till HSE is ready */HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus = SUCCESS)/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);/* HCLK = SYSCLK
11、*/RCC_HCLKConfig(RCC_SYSCLK_Div1);/* PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1);/* PCLK1 = HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* ADCCLK = PCLK2/6 */RCC_ADCCLKConfig(RCC_PCLK2_Div6);/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* Enable PLL */RCC_PLLCmd(
12、ENABLE);/* Wait till PLL is ready */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)/* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) /* Enable GPIOD and GPIOE clock */RCC_APB2Per
13、iphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE| RCC_APB2Periph_GPIOC, ENABLE);/* PD.09 used as USB pull-up */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOD, &GPIO_InitStructure);
14、/* Configure the JoyStick IOs */* Key up + Key down*/GPIO_InitStructure.GPIO_Pin = JOY_UP | JOY_DOWN | JOY_SEL ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOD, &GPIO_InitStructure);/* Key left + Key right */ GPIO_InitStructure.GPIO
15、_Pin = JOY_LEFT | JOY_RIGHT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOE, &GPIO_InitStructure);/* Right_button + Left_button */GPIO_InitStructure.GPIO_Pin = JOY_LEFT_BUTTON|JOY_RIGHT_BUTTON; GPIO_InitStructure.GPIO_Speed = GPIO_S
16、peed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &GPIO_InitStructure);void Set_USBClock(void)/* Select USBCLK source */ RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);/* Enable USB clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);void USB_Interrupts_Config(vo
17、id) NVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM/* Set the Vector T able base location at 0x20000000 */ NVIC_SetVectorT able(NVIC_VectTab_RAM, 0x0);#else /* VECT_TAB_FLASH */* Set the Vector T able base location at 0x08000000 */NVIC_SetVectorT able(NVIC_VectTab_FLASH, 0x0);#endifNVIC_Prio
18、rityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN_RX0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);void USB_C
19、able_Config (FunctionalState NewState)if (NewState != DISABLE)GPIO_ResetBits(GPIOD, GPIO_Pin_9); elseGPIO_SetBits(GPIOD, GPIO_Pin_9); u8 JoyState(void)/* "right" key is pressed */if (!GPIO_ReadInputDataBit(GPIOE, JOY_RIGHT)return RIGHT;/* "left" key is pressed */if (!GPIO_ReadInp
20、utDataBit(GPIOE, JOY_LEFT) return LEFT; /* "up" key is pressed */if (!GPIO_ReadInputDataBit(GPIOD, JOY_UP)return UP; /* "down" key is pressed */if (!GPIO_ReadInputDataBit(GPIOD, JOY_DOWN)return DOWN;/* "sel" key is pressed */if (!GPIO_ReadInputDataBit(GPIOD, JOY_SEL)ret
21、urn SEL; if (!GPIO_ReadInputDataBit(GPIOC, JOY_LEFT_BUTTON)return LEFT_BUTTON; if (!GPIO_ReadInputDataBit(GPIOC, JOY_RIGHT_BUTTON)return RIGHT_BUTTON; /* No key is pressed */else return 0; void Joystick_Send(u8 Keys)u8 Mouse_Buffer4 = 0, 0, 0, 0;s8 X = 0, Y = 0,BUTTON=0;switch (Keys)case LEFT:X += C
22、URSOR_STEP;break;case RIGHT:X -= CURSOR_STEP;break;case UP:Y -= CURSOR_STEP;break;case DOWN:Y += CURSOR_STEP;break;case SEL:BUTTON = BUTTON|0x01;break;case LEFT_BUTTON:BUTTON = BUTTON|0x01;break;case RIGHT_BUTTON:BUTTON = BUTTON|0x02;break;default:return;/* prepare buffer to send */Mouse_Buffer0 = B
23、UTTON;Mouse_Buffer1 = X;Mouse_Buffer2 = Y;/*copy mouse position info in ENDP1 Tx Packet Memory Area*/UserT oPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4); if(Mouse_Buffer0!= 0) Mouse_Buffer0 = 0;UserT oPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4);/* enable endpoint for transmission */SetE
24、PTxValid(ENDP1);四、运行过程 (1) 使用 Keil uVision3 ,通过一根 USB 电缆连接 EduKit-M3 实验平台的 CN1;(2) 打开实验例程目录 USB_TEST 子目录下的 USB.Uv2 例程,编译链接工程;(3) 点击 MDK 的 Debug 菜单,点击 Start/Stop Debug Session ;或者将程序烧写到 EduKit-M3 实验平台上,重启 EduKit-M3 实验平台;(4) 分别使用 EduKit-M3 实验平台上的 Joystick 的 5 个键,观察 PC 机屏幕的鼠标,如果鼠 标跟随 Joystick 的按键动作而移动,
25、则表明程序运行成功。注意:运行程序前请确保跳线JP1 的 2-3 连接。五、实验心得对嵌入式利用 EduKit-M3 实验平台的五个按键实现标准的 USB 接口游戏杆功能。、设计要求实验题目TFT-LCD实验(扩展LCD显示)1、在液晶屏幕上显示自己的名字;2、在液晶屏幕上显示直线;3、在液晶屏幕上显示圆4、将16*16点阵改为24*24的,并在液晶屏幕上显示。、硬件电路设计LCD_CSLCD CLKPUB |一y.LCD orFBI? L>LCD朋FIH |»LCD WRrins |yLCD DOPB14 '、RESET t=卩Mi14 I) hawklighrKI编
26、AAArl4 neo tirMHIJOKLSEB十OMIBI. VD1)KI. Gl)'l|CW81. CO>TROI“ITFT LCDCOLOR l.C 0 MODI L£图10-1-2LCD驱动电路连接图三、实验原理液晶屏 ( LCD:Liquid Crystal Display )主要用于显示文本及图形信息。 液晶显示屏具有轻 薄、体积小、低耗电量、无辐射危险、平面直角显示以及影像稳定不闪烁等特点,因此在许 多电子应用系统中,常使用液晶屏作为人机界面。液晶显示屏按显示原理分为 STN 和 TFT 两种:STN (Super Twisted Nematic,超扭曲向
27、列 )液晶屏STN 液晶显示器与液晶材料、光线的干涉现象有关,因此显示的色调以淡绿色与橘色为主。STN液晶显示器中,使用 X、Y轴交叉的单纯电极驱动方式,即X、Y轴由垂直与水平方向的驱动电极构成, 水平方向驱动电压控制显示部分为亮或暗, 垂直方向的电极则负责驱动 液晶分子的显示。 STN 液晶显示屏加上彩色滤光片, 并将单色显示矩阵中的每一像素分成三 个子像素,分别通过彩色滤光片显示红、绿、蓝三原色,也可以显示出色彩。单色液晶屏及 灰度液晶屏都是 STN 液晶屏。TFT(Thin Film Transistor ,薄膜晶体管 )彩色液晶屏 随着液晶显示技术的不断发展和进步, TFT 液晶显示屏
28、被广泛用于制作成电脑中的液 晶显示设备。TFT液晶显示屏既可在笔记本电脑上应用(现在大多数笔记本电脑都使用TFT显示屏),也常用于主流台式显示器。 分 65536 色及 26 万色, 1600 万色三种,其显示 效果非常出色。TFT的显示采用“背透式”照射方式一一假想的光源路径不是像STN液晶那样从上至下, 而是从下向上。 这样的作法是在液晶的背部设置特殊光管, 光源照射时通过下 偏光板向上透出。由于上下夹层的电极改成 FET电极和共通电极,在FET电极导通时,液晶 分子的表现也会发生改变,可以通过遮光和透光来达到显示的目的,响应时间大大提高到 80ms 左右。本系统采用的液晶屏为SPI接口的
29、TFT屏幕,像素为128 X160。四、软件程序设计1、显示自己的名字int main(void)#ifdef DEBUG debug();#endifDemo_lnit();LCD_Display_Color(OxOOOO);/RADLCD_Display_Color(Oxffff);Lcd_DspHz16(6, 0," 覃静"); while (1)2、画线修改画线的函数LCD_DrawLine,之后再main函数中直接调用即可。void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction) u32 i =
30、0;LCD_Display_Color(BackColor);if(Direction = Horizontal)for(i = 0; i < Length; i+)LCD_DisplayPoint(Xpos+i, Ypos, TextColor); elsefor(i = 0; i < Length; i+) LCD_DisplayPoint(Xpos+i, Ypos+(i*160/250 ), TextColor); 3、画圆 在 main 函数中调用画圆函数 LCD_DrawCircle ,可随意输入圆的横纵坐标和半径值。 void LCD_DrawCircle(u8 Xpo
31、s, u8 Ypos, u8 Radius)s32 D;/* Decision Variable */u32 CurX;/* Current X Value */u32 CurY;/* Current Y Value */D = 3 - (Radius << 1);CurX = 0;CurY = Radius;/LCD_Display_Color(BackColor);while (CurX <= CurY)LCD_DisplayPoint(Xpos + CurX, Ypos + CurY, TextColor);LCD_DisplayPoint(Xpos + CurX, Y
32、pos - CurY, TextColor);LCD_DisplayPoint(Xpos - CurX, Ypos + CurY, TextColor);LCD_DisplayPoint(Xpos - CurX, Ypos - CurY, TextColor);LCD_DisplayPoint(Xpos + CurY, Ypos + CurX, TextColor);LCD_DisplayPoint(Xpos + CurY, Ypos - CurX, TextColor);LCD_DisplayPoint(Xpos - CurY, Ypos + CurX, TextColor);LCD_Dis
33、playPoint(Xpos - CurY, Ypos - CurX, TextColor);if (D < 0) D += (CurX << 2) + 6;else D += (CurX - CurY) << 2) + 10;CurY-;CurX+;4 、点阵修改(1 )、在LCD上显示一串 24 X24的文本void Lcd_DspHz24(u8 Line, u8 Column, u8 *Pu8FontStr)u32 i,j,k,x,y,xx,iOffStr;u8 qm,wm,x0,y0;u32 ulOffset;u8 hzbuf72,u8Mode;x0 =
34、Column*24;/x coordinate of start pointy0 = Line*24;/y coordinate of start pointfor(iOffStr = 0; iOffStr < strlen(const char*)Pu8FontStr); )x0 = iOffStr*8;if(u8)(*(Pu8FontStr+iOffStr) < 161)if ( (u8)(*(Pu8FontStr+iOffStr) > 127 )break;LCD_DisplayChar(y0, x0, *(Pu8FontStr+iOffStr);iOffStr+;/a
35、scii only occupy one byteelse/get the zone and the position./161;*/* qm = *(Pu8FontStr+iOffStr) - 160;wm = *(Pu8FontStr+iOffStr+1) - 160;ulOffset = (u32)(qm-1)*94 + wm-1) * 32;/count the offset in spi flash . then read one 32 Byte from spi flash, put info into hzbufSPI_FLASH_BufferRead(hzbuf, HZAdsI
36、nSpiFlash+ulOffset, HZbuffsize);/diaplay all the info.for(i=0; i<24; i+)for( j=0; j<3; j+)/u8Mode = hzbufi*3+j;/get the font modeu8Mode = g_ucAscii24x24i*3+j;for(k=0; k<8; k+)if( u8Mode & (0x80>>k)LCD_DisplayPoint(x0+j*8+k, y0+i, TextColor);iOffStr += 3;(2 )、自行创立的 24*24 的覃'字的点
37、阵华文新魏字库const uc8 g_ucAscii24x24=0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0xf8, 0xe0, 0x07, 0x84, 0x60, 0x06, 0x3c, 0x60, 0x06, 0x78, 0x60, 0x06, 0x06, 0x60, 0x06, 0x3f, 0x60, 0x07, 0xfc, 0x20, 0x05, 0x29, 0x20, 0x04, 0x69, 0x20, 0x04, 0xc9, 0x20, 0x07, 0x87,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023三年级数学上册 一 两、三位数乘一位数第7、8课时 两三位数乘一位数的连续进位乘说课稿 苏教版
- 2024-2025学年新教材高中政治 第一单元 探索世界与把握规律 1.1 追求智慧的学问说课稿(1)部编版必修4
- 二零二五年度土地承包经营权流转金融服务合同
- 2023三年级数学上册 四 两位数除以一位数的除法第1课时 两位数除以一位数的口算和估算说课稿 西师大版
- 2024年高考化学 实验全突破 专题15 酸碱中和滴定及应用说课稿
- 2024年一年级品生下册《爸爸妈妈不在家》说课稿 辽师大版001
- 13《精卫填海》(第二课时)说课稿-2024-2025学年四年级上册语文统编版
- 2024年高中历史 第14课 当代中国的外交说课稿 部编版选择性必修1
- 二零二五年房地产投资管理合同范本3篇
- 二零二五年度建筑施工现场文明施工管理合同补充条款3篇
- 河南2025年河南职业技术学院招聘30人笔试历年参考题库附带答案详解
- 2025年长沙穗城轨道交通有限公司招聘笔试参考题库含答案解析
- 2024年湖南有色金属职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 2025年山东华鲁海运有限公司招聘笔试参考题库含答案解析
- 成人氧气吸入疗法-中华护理学会团体标准
- 员工工资条模板
- 火力发电厂节能管理制度实施细则
- 2003年版劳动合同范本
- 华为携手深圳国际会展中心创建世界一流展馆
- 2023版思想道德与法治专题2 领悟人生真谛 把握人生方向 第3讲 创造有意义的人生
- 全过程工程咨询服务技术方案
评论
0/150
提交评论