MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 ·...
Transcript of MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 ·...
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
I/29
MiroMouse102 工程样机用户手册Date: 2007/08/13 V1.2
广州致远电子有限公司 www.embedtools.cn
类别 内容 关键词 电脑鼠、IEEE、走迷宫、机器人
摘 要 介绍 IEEE 电脑鼠 MiroMouse102 的硬件电路原理、
软件设计方法等。
IEEE 国际标准电脑鼠 User mannual
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
II/29
目 录
1. 硬件结构 .............................................................................................................................................1
1.1 简介 ...............................................................................................................................................1 1.2 硬件原理 .......................................................................................................................................2
2. 反射式红外线传感器 .........................................................................................................................9
2.1 反射式红外线传感器设计方案....................................................................................................9 2.2 一体化红外接收头工作原理......................................................................................................10 2.3 检测障碍物的软件设计 .............................................................................................................10
3. 迷宫挡板检测 ...................................................................................................................................12
3.1 原理分析 .....................................................................................................................................12 3.2 调制信号产生 .............................................................................................................................12 3.3 抗干扰处理 .................................................................................................................................13 3.4 软件设计参考 .............................................................................................................................14
4. 电机的调速 .......................................................................................................................................20
4.1 电机的调速 .................................................................................................................................20 4.2 程序设计 .....................................................................................................................................21
5. MICROMOUSE 车速检测 ..............................................................................................................24
5.1 车速检测程序设计 .....................................................................................................................24
6. 使用 JTAG 引脚作 GPIO................................................................................................................26
6.1 使用方法 .....................................................................................................................................26
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
1/29
1. 硬件结构
1.1 简介
MicroMouse102 电脑老鼠,采用美国 LuminaryMicro 公司生产的 32 位 ARM CortexM3处理器 LM3S102,控制和检测红外传感器;主 CPU 根据检测到的传感信号,控制电机驱
动电路调整行走路径,直到到达终点。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
2/29
1.2 硬件原理
MicroMouse102 电脑鼠原理图如图 1.1 所示。
图 1.1 MicroMouse102 电脑鼠原理图
IN19
IN21
VCC2
OUT23
NC4
GND5
VS6
OUT17
VREF8
U4TA7291SC150.1u
DP5V0
12 JP7MOTOR1
DP5V0
RWC2
RWC1IN1
9
IN21
VCC2
OUT23
NC4
GND5
VS6
OUT17
VREF8
U3TA7291SC140.1u
DP5V0
12 JP6
MOTOR2
DP5V0
LWC2
LWC1
LEFT WHEELRIGHT WHEEL
DP5V0
1 2 JP1
PB7/nTRST1
PB6/CCP1/C0+2
PB5/C0O3
PB4/C0-4
nRST5
LDO6
VDD7
GND8
OSC09
OSC110
PA0/U0Rx11
PA1/U0Tx12
PA2/SSICLk13
PA3/SSIFss14
PC0/TCK/SWCLK28
PC1/TMS/SWDIO27
PC2/TDI26
PC3/TDO/SWO
25
PB3/I2CSDA24
PB2/I2CSCL23
VDD22
GND21
PB1/32KHz20
PB0/CCP019
GND18
VDD17
PA5/SSITx16
PA4/SSIRx15
U5LM3S101/102
+C13300μF/25V
DP5V0
R1710K
D8RF
Q28050
SEND
INFRAREDIN
R1847
R1910K
DP5V0_INF
OUT1
GND2
VCC3
U6
IR-RX
C16475
INFRAREDOUT2
R1110K
D6RF
Q18050
SEND
INFRAREDIN
R1247
R1310K
DP5V0_INF
OUT1
GND2
VCC3
U2
IR-RX
C6475
INFRAREDOUT1
R2110K
D9RF
Q38050
SEND
INFRAREDIN
R2247
R2310K
DP5V0_INF
OUT1
GND2
VCC3
U7
IR-RX
C17475
INFRAREDOUT3
RWC1
RWC2
LWC2
LWC1
SENDINFRARED
INFRAREDOUT1INFRAREDOUT2INFRAREDOUT3
DP3V3GND
DP3V3GND
GNDDP3V3
12
34
56
78
910
1112
1314
1516
1718
1920
CON1
JTAG
RP110K
RP210K
DP3V3
JTAG_nTRSTJTAG_TDIJTAG_TMSJTAG_TCK
JTAG_TDO
JTAG_nTRST
JTAG_TDIJTAG_TMSJTAG_TCK
JTAG_TDO
Y16M
C718P
C1318P
OSC0
OSC1
OSC0OSC1
nRST
Vin1
GND2
EN3
Vout5
RSN4
U1SP6201
KEY1
RS1
R510K
R1470K
DP5V0
R60
R7470
D3POWERnRST
C12104
C10104
C11475
DP3V3
LDO
C8104C9105
KEY2
KEY3
KEY2
KEY3
KEY2KEY3
LEFT_PULSE
R24200
RIGHT_PULSE
R2510K
DP3V3
LEFT_PULSERIGHT_PULSE
R310kR410k
DP3V3
C4104
C5104
D1LED
R2220
D2LED
R8220
D4LED
R9220
D5LED
R10
220
D7LED
R14
220
DP3V3
JTAG_nTRST
JTAG_TDI
JTAG_TMS
JTAG_TCK
JTAG_TDO
LDO
1
JP2+5V
DP5V0
1
JP11RWC2
1
JP5INFRAREDOUT1
1
JP13INFRAREDOUT2
1
JP8LWC1
1
JP9LW
C2
1
JP3
+3.3V
DP3V3
1
JP12INFRAREDOUT3
1
JP10RW
C1
DP3V3
1
JP4INFRAREDIN
D11PHOTO
D10LED
R26200
R2710K
DP3V3
D13PHOTO
D12LED
R20
200
R15
200R28
200
R16
200
INFRAREDIN
INFRARED
C2475
C3105
C1822u
C1922uC2022u
LX1
GND2
VOUT3
SHDN4
VBATT5
U2
SP6641A-5V
DP3V3
C2122u
L122uH
D141N5819
C22
22u
C23
104 DP5V0_INF
(5V输入)
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
3/29
1.2.1 电源电路
电脑鼠的电源采用 4 节 1.5V 的 5 号电池供电,电源插座为 2.54-2T 型插座,如图 1.2所示。
DP5V0
12
JP1+ C1
3300μF/25V
DP5V0(5V输入)
图 1.2 电源接口电路
1.2.2 LDO 和复位电路
LDO 和复位电路如图 1.3 所示。LDO 和复位电路采用 Sipex 公司性价比高的单芯片解
决方案 SP6201EM5-3.3。5V 电源经过 SP6201 可以输出 3.3V 最大 200mA 电流给微处理器
和用户外设供电。SP6201 还有使能输入和 Reset Not 输出引脚,通过这些引脚实现对微处
理器的复位控制。
Vin1
GND2
EN3
Vout 5
RSN 4
U1
SP6201
KEY1
RS1
R510K
R1
470K
DP5V0
R6
0
R7
470
D3POWERnRST
DP3V3
C2475
C3105
图 1.3 LDO 和复位电路
使能(非关断)输入:LDO 通过拉底 EN 管脚关闭,通过拉高 EN 管脚打开。如果不
需要关断 LDO,EN(管脚 3)应连接到 IN(管脚 1),来保持调节器输出在任何时候都有
效。使能阈值为 9V,在整个温度和 VIN 电压范围内的变化不能大于 100mV。使能阈值的
变化总在 100mV 以内。关断电流保证小于 1uA,用户不需要总是将使能管脚拉底(0V)。
标准的 TTL 或 CMOS 电平可使器件从完全运行到完全关闭。 Reset Not(VOUT良好)输出:所有固定输出的版本器件都提供一个 VOUT 良好指示器,
管脚 4(RSN)。这是一个开漏、逻辑输出管脚,当由 VOUT 提供的电压超过规定调节范围
的 4%时,它可用来使微处理器或微控制器保持复位。Reset Not 功能包含一个 1%的滞后,
使得不会因为 LDO 的输出噪声而发出错误的警告。Reset Not 功能在 10~50us 内起作用。
1.2.3 升压电路
升压芯片采用 Sipex 公司的低静态电流、高效率的升压芯片 SP6641A,升压电路如图 1.4 所示。输入电压 3.3V,输出电压 5V。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
4/29
LX 1
GND2 VOUT 3
SHDN4 VBATT5U2
SP6641A-5V
DP3V3
C21
22u
L1
22uH
D141N5819
C22
22u
C23
104
DP5V0_INF
图 1.4 升压电路
1.2.4 JTAG 接口电路
电脑鼠(MicroMouse102)的 JTAG 电路采用 ARM 公司提出的标准 20 脚 JTAG 仿真
调试接口,JTAG 信号的定义及与 LM3S 系列单片机的连接图如图 1.5 所示。
1 23 45 67 89 1011 1213 1415 1617 1819 20
CON1
JTAG
RP110K
RP210K
DP3V3
JTAG_nTRSTJTAG_TDIJTAG_TMSJTAG_TCK
JTAG_TDO
图 1.5 JTAG 接口电路
1.2.5 LED 电路
电脑鼠有 5 个独立的 LED,通过 LM3S 系统单片机的 GPIO 口直接控制,如图 1.6 所示。
电路采用了 I/O 口灌电流的驱动方式来驱动 LED,LM3S 系统单片机的灌电流为 2~8mA(可配置),所以不需要驱动就可以点亮 LED。GPIO 引脚输出高电平时 LED 熄灭,低电
平时 LED 点亮。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
5/29
D1 LED R2
220
D2 LED R8
220
D4 LED R9
220
D5 LED R10
220
D7 LED R14
220
DP3V3
JTAG_nTRST
JTAG_TDI
JTAG_TMS
JTAG_TCK
JTAG_TDO
图 1.6 LED 电路
1.2.6 独立按键电路
电脑鼠设计有 2 路独立的输入按键,都直接输入到 CPU 的 GPIO 输入引脚,如图 1.7所示。当按键未按下时,由于 R3、R4 上拉电阻的作用,CPU 检测到引脚为高电平;当按
键按下时,CPU 检测到引脚为低电平。
KEY2
KEY3
KEY2
KEY3
R310k
R410k
DP3V3
C4 104
C5 104
图 1.7 独立按键电路
1.2.7 电机驱动电路
电机采用直流减速电机,最高输出转速为 800 转/分钟,工作电压为 DC3V。电机驱动
电路采用专用的单相直流电动机桥式驱动芯片,如图 1.8 所示。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
6/29
IN1 9
IN2 1
VCC 2
OUT2 3
NC 4
GND 5
VS 6
OUT1 7
VREF 8
U4
TA7291S C150.1u
DP5V0
12
JP7
MOTOR1
DP5V0
RWC2
RWC1IN1 9
IN2 1
VCC 2
OUT2 3
NC 4
GND 5
VS 6
OUT1 7
VREF 8
U3
TA7291S C140.1u
DP5V0
12
JP6
MOTOR2
DP5V0
LWC2
LWC1
LEFT WHEEL RIGHT WHEEL
图 1.8 电机驱动电路
TA7291S 是 TOSHIBA 公司生产的单相直流电动机桥式驱动芯片,工作电压 4~20 伏,
最大输出电流 400mA。电动机驱动由输入端 IN1 和 IN2 控制,控制方法如表 1.1 所示。
表 1.1 电机控制
IN1 IN2 OUT1 OUT2 电动机工作模式
0 0 ∞ ∞ 停止,待机(STOP)
1 0 H L 正转(CW)
0 1 L H 反转(CCW)
1 1 L L 刹车(BREAK)
注:电机的正转和反转与 OUT1 和 OUT2 与直流电机的接线有关,这里主要是相对的。
1.2.8 车速检测电路
车速检测用于检测并记录车体运行的路径,通过车速检测记录车体做迷宫的坐标,同
时也起到控制车速和保持左右双轮的速度一致。 检测原理:在左轮和右轮的内则都贴有的光电码盘,码盘由两种颜色组成白色和黑色。
红外发射管安装在车轮光电检测码盘的检测区域,当红外发射与接收管正对着黑色边时,
红外线没有被反射,接收管的电阻很大;当红外发射与接收管正对着白色边时,红外线被
反射,接收管的电阻很小。检测电路如图 1.9 所示。
R24200
R2510K
DP3V3
LEFT_PULSE RIGHT_PULSE
D11PHOTO
D10LED
R26200
R2710K
DP3V3
D13PHOTO
D12LED
图 1.9 车速检测电路
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
7/29
在图 1.9 的检测电路中,红外发射与接收管正对着黑色边时,PULSE 输出高电平;正
对着白色边时,PULSE 输出低电平;从黑色边到白色边,PULSE 输出一个下降沿信号;
从白色边到黑色边,PULSE 则输出一个上升沿信号。 LM3S102 单片机可以检测输出脉冲的下降沿信号判断车轮转到的角速度,当检测到
13 个下降沿信号时,轮子转动了一圈。
1.2.9 红外检测电路
红外检测电路是用于迷宫挡板的检测,分为左侧、右侧、前方三个方向,三个方向的
检测原理相同,某一个方向的检测电路如图 1.10 所示。
INFRAREDIN
R2110K D9
RF
Q38050
SEND
INFRAREDIN
R2247
R2310K
DP5V0_INF
OUT1
GND2
VCC3
U7
IR-RX
C17
475
INFRAREDOUT3 R28
200
R16INFRARED
C20
22u
图 1.10 红外检测电路
U7(IR-RX)为一体式红外线接收传感器,当连续收到 38KHz(INFRAREDIN)的红
外线信号时,将产生脉宽 10ms 左右的低电平。如果没有收到信号,便立即输出高电平。 Send 为发射控制端,高电平时发射 38KHz 的红外信号。Out(INFRAREDOUT3)为
接收输出端,低电平表示收到信号。 R16 为发射端的限流电阻,起保护 Q3 管作用;R28 为接收端的限流电阻,防止过大
的 I/O 端口电压,起保护 LM3S 系统单片机的 I/O 口作用。
1.2.10 CPU 及晶振电路
电脑鼠的单片机、晶体振荡器和LDO输出原理如图 1.11所示。该单片机选用LM3S102微处理器。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
8/29
PB7/nTRST1
PB6/CCP1/C0+2
PB5/C0O3
PB4/C0-4
nRST5
LDO6
VDD7
GND8
OSC09
OSC110
PA0/U0Rx11
PA1/U0Tx12
PA2/SSICLk13
PA3/SSIFss14
PC0/TCK/SWCLK 28
PC1/TMS/SWDIO 27
PC2/TDI 26
PC3/TDO/SWO 25
PB3/I2CSDA 24
PB2/I2CSCL 23
VDD 22
GND 21
PB1/32KHz 20
PB0/CCP0 19
GND 18
VDD 17
PA5/SSITx 16
PA4/SSIRx 15
LM3S101/102
RWC1
RWC2LWC2
LWC1
SENDINFRARED
INFRAREDOUT1INFRAREDOUT2INFRAREDOUT3
DP3V3GND
DP3V3GND
GNDDP3V3
JTAG_nTRST
JTAG_TDIJTAG_TMSJTAG_TCK
JTAG_TDO
Y16M
C7 18P
C13 18P
OSC0
OSC1
OSC0OSC1
nRST
C12104
C10104
C11475
DP3V3
LDO
C8104
C9105
KEY2KEY3
LEFT_PULSE
RIGHT_PULSE
LDO
图 1.11 CPU 及晶振电路
LM3S102 微处理器有 3 组电源输入引脚,用于多点输入和多点接地,这样提高了微处
理器的抗干扰能力。对于每一组电源都接了 0.1uF 的高频电容,起到高频旁路作用;接一
个 475 的电容是为了使 DP3V3 电源更稳定。 LDO 输入引脚接了一个 0.1uF 的高频旁路电容和 1uF 的滤波电容,可输出稳点的 2.5~
2.75V 电压。 晶体振荡器标配 6.000MHz 的石英晶振,晶振引脚是经过连接器与微处理器连接,可
方便地更换晶振。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
9/29
2. 反射式红外线传感器
2.1 反射式红外线传感器设计方案
反射式红外传感器探测障碍物的原理参见图 2.1 所示,发射管与接收管平行同向安装,
接收管只能接收到发射回来的红外线信号。发射管向外发射红外线后,如果在有效距离范
围内存在反射表面,则反射回来的信号将会被检测到。如果不存在反射表面或则反射表面
距离太远,接收传感器将不能检测到信号。
图 2.1 反射式红外线传感器探测原理
方案一:不调制的反射式红外发射-接收器。由直流电直接驱动红外管发光,这样电路
简单,成本较低。但由于所有物体只要温度高于零摄氏度,都会向外发送红外线,且太阳
光和日光灯中最强,所以该很容易受到外界干扰。驱动电路如图 2.2 所示。
图 2.2 不调制的反射式红外发射-接收电路
方案二:脉冲调制的反射式红外发射-接收传感器。考虑到环境干扰主要是直流分量,
如果采用带有交流分量的调制信号,在平均电流不变的情况下,瞬时电流可以很大,这样
也大大提高了信噪比,可以有效避免外界环境变化对系统检测精度的影响。 电路原理图如图 2.3 所示,由可调电阻 R1,红外线发光管 D1 和三极管 Q1 构成的电
路为红外线发射电路。R1 可以调节红外线发光管的发光强度,Q1 起驱动作用。 在接收电路中,U1 为一体式红外线接收传感器 IRM8601S,,它内部集成自动增益控
制电路、带通滤波电路、解码电路及输出驱动电路。但由于它是开漏输出,所以输出端需
接一个上拉电阻,见图 2.3 中的 R3。其中 R2 是限流电阻,C1 滤出电源高频干扰。
反
射
表
面
发射
接收
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
10/29
Send
Pulse
D1RF
Q1
8050
RP1
10K R310K
C2475
R247
VCC
OUTR1
270
OUT1
GND2
VCC3
U1
IRM8601
C1
104
图 2.3 电路原理图
2.2 一体化红外接收头工作原理
一体式红外线接收传感器 IRM8601S,它内部集成自动增益控制电路、带通滤波电路、
解码电路及输出驱动电路。当连续收到 38KHz 的红外线信号时,将产生脉宽 10ms 左右的
低电平。如果没有收到信号,便立即输出高电平。如图 2.4 所示,Send 为发射控制端,高
电平时发射 38KHz 的红外信号。Out 为接收输出端,低电平表示收到信号。
图 2.4 波形图
2.3 检测障碍物的软件设计
根据接收头是否检测到经过反射的红外线信号,就可以判断是否存在障碍物。由于接
收头检测到信号时只产生一个负脉冲,所以只需要在检测时使能红外线发射,一次检测结
束后使能无效,程序设计参考流程图如图 2.5 所示。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
11/29
图 2.5 程序流程图
接收头有一定的
响应时间
开始发送 38KHz
的红外线
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
12/29
3. 迷宫挡板检测
3.1 原理分析
Micromouse 中文名为“电脑鼠”,电脑鼠在迷宫中行进时是靠侦测路面情况前进的。
它的左右传感器不但要检测是否存在支路(没有挡板就是一条支路)还要避免和挡板碰触。
因此电脑鼠每一侧在正常情况就需要两组红外传感器,一组检测稍微远一点的距离,判断
是否存在支路,一组检测稍微近一点的距离,判断是否即将碰触挡板。 由此看出,电脑鼠每侧都需要两组传感器,但是如果只用一组传感器来完成两个参数
的检测是否可行呢?我们知道,如果使用非调制的普通红外接收头,就可以根据接收到的
信号的强弱来计算距离,可是非调制的抗干扰差,但是如果使用调制的一体化接收头,检
测信号输出的是数字信号,这样通过检测传感器输出信号的强弱来计算距离的方法肯定行
不通,但还有没有其他方法可以实现距离的测量呢?答案是肯定的。 把上面测距的原理反过来,我们可以通过改变发射出的接收传感器能够识别的信号强
度,当接收头刚好能接收到信号时,记录下此时发射的强度,这样也就可以大致测算出距
离。 改变输出接收传感器所能识别信号的强度的方法有两种: 1. 改变输出信号的能量,改变输出信号的能量又有两种方法:
改变输出信号的幅度,如图 2.3 所示,改变 Send 端的输出电压或调节可调电
阻 R1 的阻值就可以实现 改变输出信号的占空比,如图 2.3 所示,改变输出的 38KHz 信号的占空比就
可以实现 2. 改变输出信号的频率,由于一体化接收头是 38KHz 的带通滤波器,所以发射信号
的频率偏离 38KHz 越多,能检测到的有效信号就越少。这样也就可以改变有效发射信号的
强度。
如果通过改变输出信号的幅度,就需要还需要一个 D/A 转换器或手动调节 R1,这样
要不增加了成本要不不适用于自动控制。如果通过改变占空比的方式就需要使用 PWM 功
能,但 PWM 功能已经被驱动小车的电机占用,所以只能通过改变输出信号的频率来实现
测距,这样只需要一个定时器就可以完成功能。
3.2 调制信号产生
本设计中采用定时器 1 产生 38KHz 的调制信号,由 PB5 输出,该端口连接到图 2.3 中
的 Pulse 端口。在中断中翻转 PB5 输出信号,所以要产生频率为 f 的脉冲,定时器的频率
要为 2f。在本设计中要产生 38KHz 的频率,定时器中断频率为 76KHz。
程序清单 3.1 为定时器 1 的初始化函数,程序清单 3.2 为中断服务函数,在这里翻转
PB5 口输出状态。
程序清单 3.1 定时器 1 初始化
void PULSEIni(void)
{
GPIODirModeSet(GPIO_PORTB_BASE, SEND | PULSE, GPIO_DIR_MODE_OUT); // 设置为输
出
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
13/29
GPIOPinWrite( GPIO_PORTB_BASE,SEND | PULSE,0); // 红外线初始时停止发射
SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER1 ); // 使能定时器 1 外设
TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER); // 设置定时器 1 为周期触发
TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/76000); // 设置定时器装载值
TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
TimerEnable(TIMER1_BASE, TIMER_A);
IntEnable(INT_TIMER1A);
}
程序清单 3.2 定时器 1 服务函数
void Timer1A_ISR(void)
{
TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器 1 中断
GPIOPinWrite(GPIO_PORTB_BASE, PULSE,GPIOPinRead(GPIO_PORTB_BASE, PULSE) ^ PULSE);
// 翻转 GPIO B5 端口
}
3.3 抗干扰处理
红外线在空气中传播和反射受外界的干扰,如果测量距离刚好处在能够检测到信号的
临界状态,保持距离不变,传感器输出信号也可能不确定。这样就需要在软件中进行抗干
扰处理。参考程序如程序清单 3.3 所示。
程序清单 3.3 抗干扰处理程序
GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND); // 发送脉冲
Delay(150); // 延时
for(i=0,j=0;i<10;i++) // 检测接收信号
{
if(GPIOPinRead(GPIO_PORTA_BASE, OUT_L)==0)
j++;
}
GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND); // 停止发送
if(j>5) // 左边存在挡板
{
}
else // 左边存在支路
{
}
图 3.1 为抗干扰程序在 Micromouse 中运行后用逻辑分析仪抓到的波形图,Pulse 为
38KHz 的输出信号,Send 高电平有效,有效时发送红外线脉冲,OUT 为一体化接收头输
……
……
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
14/29
出端,该图所示为接收头探测到障碍物,软件在 Send 信号无效(下降沿)前完成检测 OUT输出信号,从图中可以看出,此时正处于 OUT 有效信号的中间,所以软件里延时参数能
保证正确检测到信号。
图 3.1 传感器检测波形图
3.4 软件设计参考
图 3.2 为用一组红外实现两组参数(是否存在挡板和是否太接近挡板)的检测流程图。
在 Micromouse 中,用到了三组(左、前、右)反射式红外检测传感器,左边和右边的传
感器各自都需要检测两组参数,而前方的传感器只需要探测有无挡板,存在挡板就必须根
据策略转换行进方向,若不存在就可以继续前进。如图 3.3 所示为 Micromouse 红外检测的
程序设计流程图。红外检测参考程序见程序清单 3.4 所示,该程序中使用了五个 LED 用来
指示传感器检测的状态,由于这几个LED硬件上连接到 JTAG,关于如何切换GPIO和 JTAG功能参见 6 使用 JTAG 引脚作 GPIO。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
15/29
图 3.2 探测远近两个参数的流程图
图 3.3 Micromouse 红外检测流程图
此频率仅作为参考,要
根据实际检测距离来确定。
结合可调电阻 R1 变可
以实现挡板和防碰撞的检
测。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
16/29
程序清单 3.4 Micromouse 红外检测函数
//--------------------------------------------------------------------------------------------------------------------------------------
--
// 函数名称: Check_Infrared
// 函数功能: 红外检测函数
// 入口参数: option,选择检测的参数。
// 0,检测所有参数
// 1,检测左侧挡板
// 2,检测前方挡板
// 3,检测右侧挡板
// 4,检测左侧安全距离
// 5,检测右侧安全距离
// 出口参数: State,反应传感器状态。State 每四位代表一个参数状态。从左至右 20 位(0xXXXXX)分别
// 表示五个参数:左侧远距,左侧近距,前方,右侧近距,右侧远距。如值为 0x11100 表示左侧有挡板,
// 且太靠近左侧挡板,前方有挡板,右方没有挡板。
//--------------------------------------------------------------------------------------------------------------------------------------
--
unsigned long Check_Infrared(unsigned char option)
{
unsigned long State = 0;
unsigned char j = 0,i = 0;
if(option == 4 || option == 5) // 如果只需测近距,直接跳到装载定时器为 35KHz 的程序处
goto jinju;
TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/76000); // 设置定时器装载值
if(option==0||option==1)
{
GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND); // 发送调制脉冲
Delay(150);
GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND); // 停止发送调制脉冲
for(i=0,j=0;i<10;i++) // 传感器输出信号检测
{
if(GPIOPinRead(GPIO_PORTA_BASE, OUT_L)==0)
j++;
}
if(j>5) // 左边存在挡板
{
if(option == 1) // 只测此一个参数
return 1; // 直接返回
GPIOPinWrite(GPIO_PORTC_BASE, DLL, 0); // 点亮指示灯 DLL
State |= 1 << 16;
}
else // 左边存在支路
{
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
17/29
if(option == 1)
return 0;
GPIOPinWrite(GPIO_PORTC_BASE, DLL, DLL); // 熄灭指示灯 DLL
State |= 0 << 16;
}
}
if(option==0||option==2)
{
GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);
Delay(150);
GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);
for(i=0,j=0;i<10;i++)
{
if(GPIOPinRead(GPIO_PORTA_BASE, OUT_F)==0)
j++;
}
if(j>5) // 前面存在挡板
{
if(option == 2)
return 1;
GPIOPinWrite(GPIO_PORTC_BASE, DF, 0); // 点亮指示灯 DF
State |= 1 << 8;
}
else // 前面没有挡板
{
if(option == 2)
return 0;
GPIOPinWrite(GPIO_PORTC_BASE, DF, DF); // 熄灭指示灯 DF
State |= 0 << 8;
}
}
if(option==0||option==3)
{
GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);
Delay(150);
GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);
for(i=0,j=0;i<10;i++)
{
if(GPIOPinRead(GPIO_PORTA_BASE, OUT_R)==0)
j++;
}
if(j>5) // 右边存在挡板
{
if(option == 3)
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
18/29
return 1;
GPIOPinWrite(GPIO_PORTB_BASE, DRR, 0); // 点亮指示灯 DRR
State |= 1 << 0;
}
else // 右边存在支路
{
if(option == 3)
return 0;
GPIOPinWrite(GPIO_PORTB_BASE, DRR, DRR); // 熄灭指示灯 DRR
State |= 0 << 0;
}
}
jinju:
TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/70000); // 设置定时器装载值
if(option == 0||option == 4)
{
GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);
Delay(150);
GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);
for(i=0,j=0;i<10;i++)
{
if(GPIOPinRead(GPIO_PORTA_BASE, OUT_L)==0)
j++;
}
if(j>8) // 左边太靠近挡板,应向右调
整
{
if(option == 4)
return 1;
GPIOPinWrite(GPIO_PORTC_BASE, DL, 0); // 点亮指示灯 DL
State |= 1 << 12;
}
else // 左边正常
{
if(option == 4)
return 0;
GPIOPinWrite(GPIO_PORTC_BASE, DL, DL); // 熄灭指示灯 DL
State |= 0 << 12;
}
}
if(option ==0 || option == 5)
{
GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);
Delay(150);
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
19/29
GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);
for(i=0,j=0;i<10;i++)
{
if(GPIOPinRead(GPIO_PORTA_BASE, OUT_R)==0)
j++;
}
if(j>8) // 右边太靠近挡板,应向左调
整
{
if(option == 5)
return 1;
GPIOPinWrite(GPIO_PORTC_BASE, DR, 0); // 点亮指示灯 DR
State |= 1 << 4;
}
else // 右边正常
{
if(option == 5)
return 0;
GPIOPinWrite(GPIO_PORTC_BASE, DR, DR); // 熄灭指示灯 DR
State |= 0 << 4;
}
}
return(State); // 返回
}
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
20/29
4. 电机的调速
4.1 电机的调速
直流电机的转速控制在本设计中通过PWM来控制,LM3S102单片机则刚有两路PWM输出,非常适合用于控制两个电机的转速。
两路 PWM 是 LM3S102 通用定时器 0(Timer0)的三种工作模式之一,16 位 PWM 模
式。该模式是将一个 32 位的定时器,折分成两个 16 位的定时器 TimerA 和 TimerB。这些
定时器为计数寄存器(GPTMTnR)递减计数,递减到 0 时自动加载预装载值(GPTMTnILR)。当然预装载值也是由用户设定,该直也就决定了定时周期,也即 PWM 的输出周期。
当计数器的值与预装载值相等时,输出 PWM 信号有效,当计数器的值与匹配寄存器
(GPTMnMATCHR)的值相等时,输出 PWM 信号失效。通过软件可以设定 PWM 输的信
号有效和信号无效的电平状态。当 GPTMCTL 寄存器的 TnPWML 位值为 0 时,信号有效
为高电平,信号无效为低电平;TnPWML 位值为 1 时,则反之。如图 4.1 所示。
输出信号
计数
0x411A
0xC350
TnPWML=0
TnPWML=1
TnEN置位
GPTMTnR=GPTMnMR GPTMTnR=GPTMnMR
时间
图 4.1 16 位 PWM 模式输出
占空比的约定:占空比为在一个周期内,输出有信号有效电平占整个周期时间的比率。
在这里为以统一软件控制的约定,用户 API 函数输入的占空比值越大,电机转速越快,正
向运行和反向运行都一样。 为了简化占空比输出的计算,将计数寄存器与匹配寄存器值相等时,输出的电平信号
为驱动电机的有效信号。例如将 PWM 周期时间设定为 60000 个时钟节拍,需要输出驱动
电机的占空比为 75%,则设置匹配寄存器值为 75*6000。 由于电机的转向不一样,所以电机驱动的有效电平也需要调整,通过控制 TnPWML实现。
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
21/29
4.2 程序设计
Timer0 的两路 16 定时器 TimerA 和 TimerB 的 PWM 输出引脚分别为 PB0 和 PB6,PB0和 PB6 分别控制左轮和右轮驱动器 TA7291S 的 IN1 引脚,而它们的 IN2 引脚分别由 GPIO输出的 PA4 和 PA5 控制。 左轮的控制函数如程序清单 4.1 所示。 该函数的第 1 个参数 sel 为选择轮子的控制方式:0 为停止,1 为轮子向前,2 为轮子
向后;percen 参数为占空比,其最大值为 99,最小值为 1,对于轮子的停止控制该参数无
效。
程序清单 4.1 左轮控制函数
void LeftWheelRun(int sel,unsigned char percen)
{
switch(sel)
{
/*轮子停止转动*/
case 0:
TimerDisable(TIMER0_BASE,TIMER_A); // 禁止定时器
GPIOPinWrite(GPIO_PORTA_BASE,LWC2,0xff); // 控制引脚输出高电平
GPIODirModeSet(GPIO_PORTB_BASE, LWC1, GPIO_DIR_MODE_OUT); // GPIO 输出
GPIOPinWrite(GPIO_PORTB_BASE,LWC1, 0xff); // GPIO 输出高电平
break;
/*左轮向前*/
case 1:
GPIOPinWrite(GPIO_PORTA_BASE,LWC2, 0xff); // PA4 输出高电平
TimerControlLevel(TIMER0_BASE,TIMER_A,true); // PWM 有效电平方向
GPIODirModeSet(GPIO_PORTB_BASE, LWC1, GPIO_DIR_MODE_HW); // PWM 输出
TimerMatchSet(TIMER0_BASE,TIMER_A,percen*600); // 设置占空比
TimerEnable(TIMER0_BASE,TIMER_A); // 使能定时器
break;
/*左轮向后*/
case 2:
GPIOPinWrite(GPIO_PORTA_BASE,LWC2, 0); // PA4 输出低电平
TimerControlLevel(TIMER0_BASE,TIMER_A,false); // PWM 有效电平方向
GPIODirModeSet(GPIO_PORTB_BASE, LWC1, GPIO_DIR_MODE_HW); // PWM 输出
TimerMatchSet(TIMER0_BASE,TIMER_A,percen*600); // 设置占空比
TimerEnable(TIMER0_BASE,TIMER_A); // 使能定时器
break;
}
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
22/29
}
右轮的控制函数如程序清单 4.2 所示。 该函数的第 1 个参数 sel 为选择轮子的控制方式:0 为停止,1 为轮子向前,2 为轮子
向后;percen 参数为占空比,其最大值为 99,最小值为 1,对于轮子的停止控制该参数无
效。
程序清单 4.2 右轮控制函数
void RightWheelRun(int sel,unsigned char percen)
{
switch(sel)
{
/*轮子停止转动*/
case 0:
TimerDisable(TIMER0_BASE,TIMER_B); // 禁止定时器
GPIOPinWrite(GPIO_PORTA_BASE,RWC2,0xff); // 控制引脚输出高电平
GPIODirModeSet(GPIO_PORTB_BASE, RWC1, GPIO_DIR_MODE_OUT); // GPIO 输出
GPIOPinWrite(GPIO_PORTB_BASE,RWC1,0xff); // GPIO 输出高电平
break;
/*右轮向后*/
case 2:
GPIOPinWrite(GPIO_PORTA_BASE,RWC2, 0xff); // PA4 输出高电平
TimerControlLevel(TIMER0_BASE,TIMER_B,true); // PWM 有效电平方向
GPIODirModeSet(GPIO_PORTB_BASE, RWC1, GPIO_DIR_MODE_HW); // PWM 输出
TimerMatchSet(TIMER0_BASE,TIMER_B,percen*600); // 设置占空比
TimerEnable(TIMER0_BASE,TIMER_B); // 使能定时器
break;
/*右轮向前*/
case 1:
GPIOPinWrite(GPIO_PORTA_BASE,RWC2, 0); // PA4 输出低电平
TimerControlLevel(TIMER0_BASE,TIMER_B,false); // PWM 有效电平方向
GPIODirModeSet(GPIO_PORTB_BASE, RWC1, GPIO_DIR_MODE_HW); // PWM 输出
TimerMatchSet(TIMER0_BASE,TIMER_B,percen*600); // 设置占空比
TimerEnable(TIMER0_BASE,TIMER_B); // 使能定时器
break;
}
}
需要注意的是,当 PWM 信号禁止后,其输出引脚的电平状态是保持静止时的状态(可
能为低电平也可能为高电平),导致电机可能不能停止,所以在制停电机时,需要将 PWM引脚改为 GPIO 输出,并且出高电平,使电机刹车停止。 定时器 PWM 初始化函数如程序清单 4.3 所示。
程序清单 4.3 定时器 PWM 初始化
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
23/29
void PWMTimer0AIni(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); // 使能定时器 0 模
块
GPIODirModeSet(GPIO_PORTB_BASE, LWC1|RWC1 , GPIO_DIR_MODE_OUT);
/* 控制引脚输出*/
GPIOPinWrite(GPIO_PORTB_BASE, LWC1|RWC1 , 0xff); // GPIO 输出高电
平
GPIODirModeSet(GPIO_PORTA_BASE, LWC2|RWC2 , GPIO_DIR_MODE_OUT); // 控制引脚输出
GPIOPinWrite(GPIO_PORTA_BASE, LWC2|RWC2 , 0xff); // GPIO 输出高电
平
/* 定时器配置*/
TimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR
|TIMER_CFG_A_PWM|TIMER_CFG_B_PWM); // 16 位 PWM 输出
TimerControlLevel(TIMER0_BASE,TIMER_A,false); //有效信号为低电
平
TimerControlLevel(TIMER0_BASE,TIMER_B,false);
TimerLoadSet(TIMER0_BASE,TIMER_A,60000); // 设定 PWM 频率
TimerLoadSet(TIMER0_BASE,TIMER_B,60000);
}
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
24/29
5. Micromouse 车速检测
5.1 车速检测程序设计
本设计中选用了 LM3S102 的 PA0 和 PB1 分别检测左轮和右轮的下降沿的脉冲个数,
为了快速向应检测信号,使用了下降沿触发中断。LM3S102 单片机的特点,任何一个 GPIO引脚都可以配置为中断输入,并且可以作任意设定为高电平触发、低电平触发、下降沿触
发、上升沿触发和上升或下降沿触发 5 种模式。本应用中使用下降沿触发,其初始化如程
序清单 5.1 所示。
程序清单 5.1 轮子脉冲检测初始化
void WheelPulseIni(void)
{
// 配置引脚为输入
GPIODirModeSet(GPIO_PORTA_BASE, PULSE_R, GPIO_DIR_MODE_IN);
GPIODirModeSet(GPIO_PORTB_BASE, PULSE_L, GPIO_DIR_MODE_IN);
// 配置引脚下降沿触发中断
GPIOIntTypeSet(GPIO_PORTA_BASE,PULSE_R,GPIO_FALLING_EDGE);
GPIOIntTypeSet(GPIO_PORTB_BASE,PULSE_L,GPIO_FALLING_EDGE);
// 使能引脚输入中断
GPIOPinIntEnable(GPIO_PORTA_BASE,PULSE_R);
GPIOPinIntEnable(GPIO_PORTB_BASE,PULSE_L);
// 使能 GPIO PA 口和 GPIO PB 口中断
IntEnable(INT_GPIOA);
IntEnable(INT_GPIOB);
}
左右轮检测脉冲中断处函数如程序清单 5.2 所示。
程序清单 5.2 左右轮检测脉冲中断处函数
//------------------------------------------------------------------------------------
// 函数名称: GPIO_Port_A_ISR
// 函数功能: 右轮检测脉冲中断处函数
//------------------------------------------------------------------------------------
void GPIO_Port_A_ISR (void)
{
unsigned char IntStatus;
IntStatus = GPIOPinIntStatus(GPIO_PORTA_BASE,true); // 读 PA 口中断状态
if(IntStatus&PULSE_R) // 是否为左轮脉冲中断
{
PulCount_R++;
if(PulCount_R >= RightPulse)
{
RightWheelRun(0, 1);
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
25/29
WheelStop_R= 1;
}
GPIOPinIntClear(GPIO_PORTA_BASE,PULSE_R); // 清中断
}
}
//------------------------------------------------------------------------------------
// 函数名称: GPIO_Port_B_ISR
// 函数功能: 左轮检测脉冲中断处函数
//------------------------------------------------------------------------------------
void GPIO_Port_B_ISR (void)
{
unsigned char IntStatus;
IntStatus = GPIOPinIntStatus(GPIO_PORTB_BASE,true); // 读 PA 口中断状态
if(IntStatus&PULSE_L) // 是否为右轮脉冲中断
{
PulCount_L++;
if(PulCount_L>= LeftPulse)
{
WheelStop_L= 1;
LeftWheelRun(0, 1);
}
GPIOPinIntClear(GPIO_PORTB_BASE,PULSE_L); // 清中断
}
}
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
26/29
6. 使用 JTAG 引脚作 GPIO
由于 LM3S102 管脚资源有限,我们需要使用 PB7 和 PC0~3 做 GPIO 使用,并且可以
从 GPIO 功能转换为 JTAG 引脚功能。该五个引脚都分别与 LED 相连,LED 可以在程序调
试时做指示灯使用。需要特别注意的是,该五个引脚若无法恢复 JTAG 功能,则该芯片无
法再次编程。
6.1 使用方法
使用 GPIODirModeSet()很轻易地将 PB7 和 PV3~0 引脚设置为 GPIO 的输入/输出和
JTAG 功能,系统复位后这几个引脚恢复默认的 JTAG 功能,所以程序只需要解决怎样使这
些引脚在 GPIO 和 JTAG 功能间互换。 在程序清单 6.1 中,是通过上电或复位后首先检测 KEY2 引脚,如果按键有效则进入
死循环,这些引脚则保持 JTAG 功能。否则这些引脚被设置为 GPIO 功能,并继续执行主
程序。 所以要使这些引脚作为 JTAG 功能,首先按住 KEY2 键,然后复位。要使 MCU 复位
后设置这些引脚为 GPIO 口且可以继续执行 flash 内的程序,则在复位时放开 KEY2。
程序清单 6.1 JTAG 引脚作 GPIO
//PB
#define KEY2 GPIO_PIN_3
#define DRR GPIO_PIN_7
//PC
#define DLL GPIO_PIN_3
#define DL GPIO_PIN_0
#define DF GPIO_PIN_1
#define DR GPIO_PIN_2
main()
{
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB ); // 使能 GPIO B 口外设
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOC ); // 使能 GPIO C 口外设
GPIODirModeSet(GPIO_PORTB_BASE, KEY2, GPIO_DIR_MODE_IN);
if(GPIOPinRead(GPIO_PORTB_BASE, KEY2)==0) // 如果按下 KEY2 就进入
JTAG
{
while(1);
}
/* 把五个 JTAG 口设置为 GPIO 输出口 */
GPIODirModeSet(GPIO_PORTC_BASE, DLL | DL | DF | DR, GPIO_DIR_MODE_OUT);
GPIODirModeSet(GPIO_PORTB_BASE, DRR , GPIO_DIR_MODE_OUT);
MicroMouse102广州致远电子有限公司
IEEE 国际标准电脑鼠
产品用户手册 Date:2007/08/13
V1.2
©2007 Guangzhou Zhiyuan Electronics CO., LTD
27/29
while(1)
{
}
}
……
……