六脚爬虫机器人机械结构设计和程序设计.doc

上传人:xin****828 文档编号:6691478 上传时间:2020-03-02 格式:DOC 页数:64 大小:1.25MB
返回 下载 相关 举报
六脚爬虫机器人机械结构设计和程序设计.doc_第1页
第1页 / 共64页
六脚爬虫机器人机械结构设计和程序设计.doc_第2页
第2页 / 共64页
六脚爬虫机器人机械结构设计和程序设计.doc_第3页
第3页 / 共64页
点击查看更多>>
资源描述
摘要本文详细介绍了六脚爬虫机器人的机械结构以及控制程序的编写。机械结构采用了对称式设计,结构简单;其行走功能由六只脚、18个舵机实现,自由度较高,稳定性、灵活性较好。控制程序的主体是C语言。包括基本步态的编写,以及传感器的在机器人上的高级应用,这样,机器人在满足基本行走运动的同时,也能感知外界环境,并通过控制器对接收到的外界信号进行处理,并控制机器人运动。关键词: 对称式结构,舵机控制器,步态,传感器AbstractThe thesis describes in detail that the mechanic design of Hexcrawler and the compiling of control program. The structure of the robot is in symmetric expression, a simple mechanism; the function of walking is supported by six legs, and eighteen motors, with multiple degrees of freedom. Besides, it is of high stability and flexibility. The program to control the robot is written in C language, including basic gait, the advanced application of sensors. Thereby, the robot can walk in several gaits. At the same time, it can sense the condition around it. Then, it will process the data it received, and control the motion of the robot.Keywords: symmetric expression,PSCU, gait, sensor目录摘要IAbstractII目录III1 绪论- 1 -1.1课题来源- 1 -1.2本课题的目的及其意义- 1 -1.3国内外发展现状- 1 -1.4本课题的研究内容- 5 -2 机械结构设计介绍- 6 -2.1 功能需求与分析- 6 -2.2 材料选择与结构设计介绍- 6 -3 舵机控制板原理与应用- 9 -3.1 舵机原理介绍- 9 -3.2 舵机控制板原理介绍- 10 -3.3 如何使用舵机控制板- 11 -3.4 控制板程序编写- 14 -4 STM32开发板介绍与程序编写- 18 -4.1 STM32F107芯片简介- 18 -4.2 软件与编程初始准备- 18 -4.3 GPIO与AFIO设置与应用- 18 -4.31 GPIO设置与应用.18 4.32 AFIO-I/O口重映射.22 4.4 USART设置与应用- 22 -4.5外部中断设置与应用- 26 -4.6 系统时钟设置与应用- 29 -4.61 系统时钟简介与应用.29 4.62 定时器配置31 4.7 机器人行走步态程序编写- 32 -4.71 机器人行走步态简介33 4.72 三脚步态.35 4.73 四脚步态.37 4.74 单脚(波动)步态.384.75 转弯与横爬步态.404.8 多传感器应用与程序编写- 43 -4.81 指南针传感器.434.82 红外、光敏传感器.454.83 柔性力传感器.464.84 温湿度、发声、射频识别(RFID)传感器.484.85 无线(Zigbee)传感器.494.86 超声传感器525总结- 55 -致谢- 56 -参考文献- 57 -1 绪论1.1课题来源本项目来源于华中科技大学与伍斯特理工学院合作的WPI项目。1.2本课题的目的及其意义机器人是高级整合控制论、机械电子、计算机、材料和仿生学的产物。现在,机器人已经发展到一个全新阶段,各种机器人应运而生,从简单地追求功能到神似,到个性化;从单单发展工业机器人到工业、家用机器人全面开花,并取得了长足进步。六脚机器人作为行走机器人的一种,具有结构简单,稳定性好等优点,而本课题也并未在很高深的机器人理论花大量功夫,而更多地着眼于为大专院校提供机器人教学平台,或者用于科技馆展览。本课题所设计的机器人最大的特点是:理论通俗易懂、操作方便、便于二次开发。对于一些入门者(初步掌握控制论、机械设计、机械电子只是)来说,很容易便能被引领入机器人研究的殿堂。1.3 国内外发展现状对于仿生机器人,尤其是多足机器人,国内外均有大量研究。1990年,美国卡内基梅隆大学研制出用于外星探测的六脚步行机器人AMBLER。该机器人采用了新型的“腿机构,并由一台32位的处理机来规划系统运动路线、制运动和监视系统的状态。但由于体积和质量太大,最终没被用于行星探测计划。1993年,卡内基梅隆大学开发出有缆的八足步行机器人DANTE,用于对南极的埃里伯斯火山进行了考察,其改进型也在实际中得到了应用。1994年二代对距离安克雷奇145km的斯伯火山进行了考察,并传回了各种数据及图像。日本对多足步行机的研究从20世纪80年代开始,并不断进行着技术创新,随着计算机和控制技术的发展,其机械结构由复杂到简单,其功能由单一功能到组合功能,并已研究出各种类型的步行机。主要有四足步行机、爬壁机器人、腿轮分离型步行机器人和手脚统一型步行机器人。1994年,日本电气通信大学的木村浩等研制成功四足步行机器人Patrush二代。该机器人用两个微处理机控制,采用直流伺服电机驱动,每个关节安装了一个光电码盘,每只脚安装了两个微开关,采用基于神经振荡子模型CPG的控制策略,能够实现不规则地面的自适应动态步行,显示了生物激励控制对未知的不规则地面有自适应能力的特点。20002003年,木村浩等又研制成功四足步行机器人Tekken。该机器人用一台PC机系统控制,用瑞士Maxon直流伺服电机驱动,能适应中等不规则表面的自适应步行。我国对于多足机器人的研究起步则较晚。1989年,北京航空航天大学在张启先教授的指导下,孙汉旭博士进行了四足步行机的研究,试制成功一台四足步行机。钱晋武博士研究地壁两用六脚步行机器人,并进行了步态和运动学方面的研究。1990年中国科学院沈阳自动化研究所研制出全方位六脚步行机,不仅能在平地步行,还能上楼梯。1991年,上海交通大学马培荪等研制出JTUWM 系列四足步行机器人。2000年,马培荪等对第一代形状记忆合金SMA驱动的微型六脚机器人进行改进,开发出具有全方位运动能力的微型双三足步行机器人其每条腿的自由度变为3个自由度,总共6个自由度。2003年哈尔滨工程大学的孟庆鑫、袁鹏等进行了两栖仿生机器蟹的研究,通过研究多足步行机的单足周期运动规律,提出适合于两栖仿生机器蟹的单足运动路线规划方法,建立了生成周期运动的神经振荡子模型。目前市场上几款六脚机器人对比如下:(一)DEPUSH HexCrawlerHexCrawlerCompanyDEPUSHMaterial5052 alloy aluminum, 1/16” thick with clear anodizingLeg Movement2 DOFDimensionsBody: 49.68 x 40 cm, Height: between 12.3 and 15.2 cmCost$350+(二)Lynxmotion RB-Lyn-248RB-Lyn-248CompanyLynxmotionMaterial5052 alloy aluminum, 1/16” thick with black anodizingLeg Movement3 DOFDimensionsBody: 19.1 x 14.9 cm, Height: between 5.1 and 13.3 cm, Ground Clearance: up to 8.9 cmCost$261.35+(三)HexCrawler HDATSHexCrawler HDATSCompanyDEPUSHMaterial5052 alloy aluminum, 1/16” thick with clear anodizingLeg Movement3 DOFDimensionsBody: 52 x 49.7 cm, Height: between 12.3 and 15.2 cm, Ground clearance: 12.7 cmCost 10,000 (about $1,500)其中HexCrawler一代机器人使用的编程软件为Parallax公司提供的教育发展版芯片。图1.1为Phoenix公司提供的六脚机器人,图1.2则为Depush公司的六脚机器人一代外形,其每个脚仅有两个自由度。图1.1 Phoenix Hexapod图1.2 DEPUSH HexCrawler 1.01.4本课题的研究内容六脚机器人基本结构的设计,首先使之能够实现三脚步态、四脚步态、波动步态等,以满足行走要求;然后,能够感知外界环境的变化,实现避障报警等功能;最后,实现对机器人的远距离控制。具体要求为:设计机器人机械结构,使其可以完成前进,后退,左转,右转,侧移,扭动身躯等简单动作;可以完成抬脚,简单舞蹈等动作;1、编写机器人各种基本动作的软件代码,使其能完成以上动作;2、机器人可以接受电脑无线控制,编写相应无线控制程序;3、机器人可感知外界环境,编写相应传感器处理程序;4、对所有程序进行综合处理,协调各程序之间的关系。2 六脚机器人机械结构设计介绍2.1 功能需求与分析作为六脚仿生机器人,在追求神似的同时,关键在于能否像爬虫一样完成各种行走动作。本课题对机械结构的要求不高,但需要满足下面几点:灵活度高、稳定性好、能够实现多足机器人的基本步态。针对这几点,同时按照德普士公司的要求,再参照目前市面上存在的六脚仿生机器人,最终拟定的机械结构设计方案为:在DEPUSH HexCrawler 1.0(图1.2)的基础上每只脚增加一个舵机,即将自由度由两个提升为三个。2.2材料选择与结构设计介绍根据目前市面上的六脚仿真机器人,本课题选用5052铝合金作为机器人的主要材料,这样机器人既能满足强度要求,也能满足轻便性要求。同时,对外表进行烤漆处理,显得厚实而稳重,富有质感。如图2.1为机械结构的总三维图。图2.1 六脚机器人三维总图机器人整体上采用对称式结构,由六只脚和底架(身体)组成。每只脚有三个关节,每个关节处为采用舵机连接,可在固定平面内旋转180,如图2.2所示。其中舵机1控制机器人脚前后摆动;舵机2控制机器人上下摆动;舵机3控制机器人内外伸缩。三个舵机配合即可实现机器人的走动。图2.2 六脚机器人单脚结构图机器人身体(图2.3)、脚(图2.2)上均布满各种镂空图案,主要有两点作用:一、减轻机器人重量;二、增加机器人的美观度。由于机器人的完全对称性结构,其前后由认为设定,即图2.1中Leg1、Leg4在前,Leg3、Leg6在后。图2.3 六脚机器人底架结构图 机器人的主要尺寸为: 机器人全长:500.0mm; 底架(身体宽):228.0mm; 舵机1(Leg1)距底架最前方距离:60.0mm; Leg1与Leg2距离:195.0mm; Leg1与Leg3距离:390.0mm;每只脚上舵机2与舵机3距离:120.0mm; 舵机3与脚底距离:150.0mm。3 舵机及舵机控制板原理与应用 本章主要介绍舵机以及舵机控制板(PSCU)的原理、使用方法与程序编写。3.1 舵机原理介绍舵机是一个通过输出轴的转动来控制物体转动的装置。它在特定编码的驱使下可以转动到工作范围内的任意给定位置。因为它的轻便,位置控制简易且精确,在机器人中使用尤多。多舵机的协调工作可满足机器人的多自由度要求。舵机可以实现0180的旋转,当轴处于正确位置时,舵机将停止运动;当所在位置不对时,电路则驱动电机运转到需求位置。舵机是采用比例调节方式控制速度。当舵机转动的距离大时,则加载在舵机上的能量就大,反之亦然。而舵机的转动角度控制是由加载在控制线上的脉冲周期完成的,即所谓的脉冲编码调制。舵机设定为每隔20ms接受一个脉冲,这样的话,实际脉冲长度就可用来控制舵机转动的角度。如图3.1,例如1.5ms的脉冲可使舵机转动90。图3.1 舵机转角与脉冲周期关系图当舵机安装好后,需要获取其初始位置值,为编程做准备,具体可见3.3节关于PSCI软件的介绍。3.2 舵机控制板原理介绍由上述机械结构介绍可知,本六脚机器人是通过控制18个舵机来实现机器人的运动的。但如何协调好各舵机的动作,让其满足功能需求?这就需要用到舵机控制板。舵机控制板按控制舵机数目(接口数)的多少,可分为8路舵机控制器,16路舵机控制器,32路舵机控制器等等。考虑到成本以及控制舵机的数量,本课题采用两块16路舵机控制器串联的方式来控制舵机。选用型号为PARALLAX公司提供的Propeller Servo Controller USB(#28830,简称PSCU)。如图3.2所示:图3.2 舵机控制板PSCU具有下述多项特点:可串联两块控制板实现32路舵机控制; 独立的螺旋式接线柱为控制板供电,舵机则可通过开关控制关停; 其所用固件开放源代码; 可通过USB接口或者串行通信接口编程; 舵机速度可控。 PSCU规格及性能: 电源要求:逻辑电平5VDC60mA,4.87.5VDC控制舵机; 通信:异步串行通信2400bps或者38.4kbps(TTL或USB); 工作温度:32158F(070C); 尺寸:2.26x1.80x0.65in(57.3x45.7x16.5mm);3.3如何使用舵机控制板在使用控制板前,需通过螺旋式接线柱给控制板提供4.87.5V的直流电,同时为使舵机运动,还需给舵机提供5V的直流电。此项可通过USB接口(如图3.3)或者通过舵机控制板左上方的Serial In 处的杜邦针供电(TTL电平,如图3.4)。图3.3 PSCU-USB供电电路连接图图3.4 PSCU-主控制板供电电路连接图USB调试:安装FTDI VCP驱动(下载地址:www.parallax.com/usbdrivers);安装PSCI软件(访问网址www.parallax.com,并搜索28823)。双击软件图标,即可获得图3.5所示,连接好USB线,在界面上选择COM口,获取PSC版本,即可使用。图3.5 PSCI控制界面图中每个channel的进度条,可发现对应舵机会向相应方向发生一定度数的旋转。这可用来进行舵机控制调试,从而获取舵机位置值,来书写步态。注意:图中数据在编入ARM程序中时,应先除以2倍,才是实际数据,即图中的中心出1500对应实际的750。更多功能可参照PARALLAX公司提供的Propeller Servo Controller USB说明文档。当使用双块板时,其连接方式为:首先将主板的Serial In(两排,选上排)引出按高低电平信号线要求插在主控制板(STM32板)上,其中红色线接5V电源,黑色线接地,白色线接信号线,即PA9。然后将副板的Serial In(上排)引出插在主板的Serial In处(下排)。最后通上电源即可。了解了PSCI的基本功能,并按要求连接好电路后,首要做的就是将舵机位置的初始值找出。通过拖动进度条,并观察机器人各腿的位置,从而确定舵机初值。笔者提供的舵机初始值均为六脚与身体垂直时的值,且2、3关节夹角近似为90。本项目采用的事Hi-Tec公司生产的HS-322HD舵机,如图3.6。图3.6 HS-322HD舵机其主要技术参数如下:重量:43g尺寸:402036.5mm拉力:4.8V 3Kg.cm拉力:6.0V 3.7Kg.cm转速:4.8V 0.19sec/60转速:6.0V 0.15sec/60计算电流:0.35A3.4 控制板程序编写 基本工作准备与注意事项:前述工作准备停当,即可开始程序的编写。PARALLAX公司提供的说明文档中提供了BS2程序,需要通过C语言转译,才可供ARM板识别。首先注意的是PSCU板的默认波特率为2400bps,所以在编写串行通信程序时,应将串行通信的波特率设置为2400bps(具体见4.4节关于USART设置的介绍)。当然本控制板亦可通过程序设置,将波特率改为38.4kbps,具体内容下面会介绍到。此外,控制板接收的异步通信数据格式要求还有,正相,8个数据位,无奇偶校验位,1个或2个停止位。其次控制板分为主副板,则对应的舵机控制通道号即为031;即副板的通道号再原号基础上加16即可。如果按序连接舵机,可使编程变得较为简单,通过简单的数学关系进行数据处理,但线路凌乱,看起来不是很美观;本课题采用的是对称连线,即选用通道号08,2331;当然,这样编程相对就复杂一些。最后关于主副板的界定还需提醒一句,由于硬件可能出现bug,实际上控制板可能通道号等没有按照说明书的来,在调试过程中,可多试几次,按照实际结果编程。本课题在调试过程中即出现了问题,实际的主副板是颠倒的,且必须将副板与主控制板(STM32)连接才可使用。通信协议规则:PSCU为用户提供了多种控制功能,但每种控制字符串均是以!SC开始,以0x0D结束,中间有间隔4个主控制字符,下面将一一介绍:位置命令设置舵机的位置控制字符串为:“!SC” 其中channel为通道号,即前述的031;ramp speed为一字节值,用于舵机转速控制,其变化范围为063,且数值越大,转速越小;lowbyte为舵机位置的低字节,highbyte为舵机位置的高字节。通过改变lowbyte与highbyte值即可改变舵机位置,其值变化范围为2501250。位置命令控制板最基本的命令,往往也是唯一用到的功能。通过此命令,可以实现舵机按要求的转动,从而满足行走等多功能要求。SBR设置波特率控制字符串为:“!SCSBR” 其中mode是用来设置波特率的,0代表2400bps,1代表38.4kbps。控制板的默认波特率为2400bps,无需设置,但如果需要使用38.4bps的波特率进行通信时,可使用该程序对波特率进行更改。RSP返回位置值控制字符串为:“!SCRSP” 其中channel为通道号。与VER?一样,需要进行输入输出的设置,方能返回位置值,这对编程很有用处,可以通过读取位置值,判断其是否到位来实现延迟,精确性较高。本课题未使用。读者可拓展功能。PSS设置软件口控制字符串为: “!SCPSS” 其中mode为0代表015;1代表1631。可能由于板子的问题,实际过程中并未起作用,当控制板没问题时,可以根据个人喜好设置控制板的端口号,为编程提供便利。PSD使端口无效控制字符串为: “!SCPSD” 其中channel为通道号。此功能与PSE功能配合使用,在适当时候可能才生意想不到的效果。PSE使端口恢复有效控制字符串为: “!SCPSE” 其中channel为通道号。此功能用于PSD后,用来恢复端口的正常使用。其余的功能控制命令此处便不再赘述,因为一般情况下无法用到。C语言程序编写简介:由于说明书中只提供了BS2程序,较难普及,需使用应用较广的C语言编写。从控制命令的格式可以看出,无论哪种方式,都是8字节的字符串,于是,可定义一个联合体(结构体亦可),来储存这一串字节:typedef union _SERVO_PACKET char stream8; struct char CR : 8; char B3 : 8; char B2 : 8; char B1 : 8; char B0 : 8; unsigned SC : 24; packet; SERVO_PACKET; SERVO_PACKET pac;并将三字节的SC初始化为0x215343或”!SC”,将CR初始化为0x0D。这样在编写各种控制命令函数时,只要改变B0B3的值即可。例,位置命令函数:void SendPacket(char RS, char Channel, int Position) int i = 0; pac.packet.B0 = Channel; pac.packet.B1 = RS; pac.packet.B2 = LOWBYTE(Position); pac.packet.B3 = HIGHBYTE(Position); for(i = 7 ; i = 0 ; i-) ser_putbyte(pac.streami); /该函数4.4节介绍,作用为发送单个字节 其中LOWBYTE()、HIGHBYTE()函数的定义为:#define LOWBYTE(v) (unsigned char) (v) #define HIGHBYTE(v) (unsigned char) (unsigned int) (v) 8)其功能为获取数值(位置值)的低八位与高八位。这即可为编程提供很大方便。以此类推,其它命令的函数可以根据需要只要参考上述的位置命令函数编写即可。在此基础上以及之前用PSCI软件调试出的舵机初始值,即可编写舵机初始化程序了。void Initservo(void) int i=0; for(i=0;iCRL=(GPIOD-CRL&(0x0000000F04)|0x00000003CRL=(GPIOD-CRL&(0x0000000F04)|0x0000000404其中第一行将PD1设置为推挽输出模式,第二行将PD1设置为浮空输入模式。在使用时,只需在程序前,加入一行DAT_OUT;或者DAT_IN来切换PD1输入输出。当书写其它I/O口的程序时,只需将GPIOD换成相应I/O口,如果端口号为07,则只需将右边的04改成端口号*4的积,例如PA0则为00,如果端口号为815,则需将CRL换成CRH,同时DR = (data & 0xFF); return (data); 函数二:int SendChar (int ch) USART_SendData(USART1, (unsigned char) ch); while (!(USART1-SR & USART_FLAG_TXE); return (ch); 上述两个函数的功能等同,在写程序时可以随意调用,例如3.4节提到的SendPacket()函数便调用了上述的函数一。接收一个字节u8 RByte(void) u8 out=0;while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) = RESET) /等待接收完毕 out = (USART_ReceiveData(USART1); /接收一个字节return out; 该函数用于接收单个字节,在无线通信时可用到。发送一个字符串void Print_String(u8 *p)/发送一串数据 while(*p) USART_SendData(USART1, *p+); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET) 当连续发送的字符很多时,可以选用该函数以字符串形式发送。接收一个字符串void SerialIn(u8 *buf,u8 len) unsigned char i;for (i = 0; i len; i+) bufi = RByte(); 同样,当需要连续发送多个字节数据时,则可选用该函数。上面提到的都是USART1的设置以及拓展功能函数的书写。而其它串口通信的设置与U1一致,功能函数则只需将U1换成U2或U3即可。由于主板的问题,本项目中并未使用U2、U3来实现其它串口通信,而是将所有的串口通信均由U1来实现,这也是权宜之计,即采用分时复用的原理。具体说来,就是发声传感器和无线传感器都需要通过异步传输来与处理器通信。对于每个传感器以及PSCU,它们能够识别的信号是由特定字符串组成的。这样,只要将PA9、PA10口多引出几个引脚,分别接到传感器以及PSCU的相应口即可,在传输指令时,分时传送,对于无法识别的字符串,则不处理,这样便解决了串口不够的问题。如果要实现抢占,则将它们配置成中断模式即可,并配置好优先级。4.5 外部中断设置与应用当主控制板遇到异常时,便会触发中断,并进行处理。NVIC,中文叫做嵌套矢量中断控制器,是用来处理中断的对于STM32F107的普通用户来说,只要掌握EXTI线中断,USART中断以及TIM中断即可。下面仅对EXTI中断作简略介绍。外部中断/事件控制器(EXTI)由19个产生事件/中断请求的边沿检测器组成。每个输入线可独立地配置输入类型和对应的触发事件(上升沿、下降沿或双边沿触发)每个输入线都可以被独立地屏蔽,由挂起寄存器保持着状态线的中断要求。如果要产生外部中断,首先必须配置好并激活中断线。配置内容包括:根据需要的边沿检测设置2个触发寄存器、在中断屏蔽寄存器的相应位写1以允许中断请求。当外部中断线上出现设定的边沿信号时,将产生一个中断请求等待处理。完成中断服务后,可以清除该中断请求。下面具体介绍如何配置硬件中断/事件请求。(1)首先要了解中断线与I/O口的关系,如图4.2可知,PAPE的015口分别对应EXTI的015口;EXTI16与PVD输出连接、EXTI17与RTC闹钟事件连接、EXTI18与USB唤醒事件连接。图4.2 中断线与GPIO口对应关系(2)对EXTI线配置,以EXTI0为例,配置函数如下:void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAMNVIC_SetVectorTable(NVIC_VectTab_RAM,0x0); #elseNVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); #endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 为中断地址配置;表示选择优先级1组,即占先式优先级以1位数字表示,副优先级以三位数字表示,如表4.2所示表4.2 中断优先级分组表示选用EXTI0中断线,注意在有些教材中等号右边为EXTI0_IRQChannel,但在实际操作中,可能无法编译,应写成上面形式。如果是选用中断线EXTI11,应写作EXTI15_10_IRQn;EXTI8则为EXTI9_5_IRQn。为配置占先式优先级(主优先级):高占先式优先级的中断会打断当前的主程序/中断程序运行,即所谓的中断嵌套。优先级数值越大,优先级越低。为配置副优先级(子优先级):在占先式优先级相同的情况下。在低副优先级中断运行中,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应非抢断式响应(不能嵌套)。但如果同时这两个中断同时到达,则先执行中断优先级高的,执行完后,再执行低优先级中断;如果两个中断的所有优先级均一样,则哪个中断先到达,就先执行哪个中断。对于副优先级,数值越大,优先级越低。(3)对中断线进行I/O口配置从图4.2中可知,每个中断线对应5个I/O口,所以在使用前,一定要先进行I/O口配置。仍以EXTI0为例,由开发板原理图可知,PA0可直接配置为EXTI0中断,无需电路设计。如有需要,也可按照图4.3所示,配置其它中断。图4.3 PA0中断线电路配置程序为:void EXTI_Configuration(void) EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); 即表示选用PA0配置中断;表示中断线为EXTI0;表示下降沿触发中断。(4)配置中断处理程序外部中断关键在于使用,下面为通过EXTI0中断来控制LED灯的程序:void EXTI0_IRQHandler(void) if(EXTI_GetITStatus(EXTI_Line0)!= RESET) ledflash();
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!