西安邮电大学嵌入式板级电路装配课程设计实验报告Word下载.docx
《西安邮电大学嵌入式板级电路装配课程设计实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《西安邮电大学嵌入式板级电路装配课程设计实验报告Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
存储器采用400KHz的I2C总线接口。
CAT1025包含1个精确的Vcc监控测电路和2个开漏输出:
RESET和!
RESET。
当Vcc低于复位门槛电压时,!
RESET引脚将变为高电平,RESET将变为低电平。
CAT1025还包含一个写保护输入(WP)。
如果WP连接高电平,则写操作被禁止。
nRST连接到芯片LPC2132的复位引脚,当复位按键RST1按下时,CAT1025的复位引脚输出有效信号,使芯片LPC2132复位。
3.系统时钟电路
LPC2132微控制器可使用外部晶振或外部时钟源,片外晶振频率范围:
1~30MHz,如下图中Y1-11.0592MHz,内部锁相环电路PLL可调整系统时钟,通过片内PLL可实现最大为60MHz的CPU操作频率,实时时钟具有独立的时钟源,如下图中Y2-32.768KHZ晶振。
4.JTAG接口电路
采用ARM公司提出的标准20脚JTAG仿真调试接口,JTAG信号的定义以及与LPC2132的连接如下图:
5.按键及显示电路
LPC2132开发板具有4个按键、4个LED灯。
4个LED灯一边已经与DP3V3连接,另一边经过1个470R的电阻后与JP1跳线相连,当JP12连通的时候,LED1的一侧与芯片的P0.17口就会连通,P0.17口输出低电平,LED1就会点亮,如果P0.17输出高电平,LED1就会熄灭。
4个按键中复位键已经在前面介绍了,剩下三个按键KEY1、KEY2、KEY3一边接地,另一边接了4K7的电阻然后与正极相连,还接了JP2跳线组,如果JP2的12连通,那么P0.16就和KEY1连通,当按键按下的时候,P0.16输出低电平,当按键没有按下的时候P0.16输出高电平,因为按键检测电路可以编写为检测是否有低电平来判断按键是否按下。
6.UART接口电路
CH340G是一个USB转串口芯片,可以把电脑的USB口映射为串口用。
当使用串口电路进行UART调试的时候,需要将JP6短接,连通P0.0和CH340G的TXD口,连通P0.1和CH340G的RXD口。
另一边CH340G的X1和X0接入了X1-12MHz的晶振。
三、开发板硬件安装调试过程
1焊接最小系统
首先焊接电源模块,复位电路模块,晶振模块,构成最小系统,然后对最小系统进行测试。
测试方法:
将电源线和开发板的电源模块连接,观察电源指示灯是否点亮,如果点亮,使用万用表测量U1点电压,数值范围为:
3.29V~3.31V,标准值为3.30V,表明电源电路模块正常。
然后用示波器观察晶振引脚的波形,查看晶振是否正常。
2焊接外接电路板。
在洞洞板上面焊接一个LED灯,然后引出接口,一个为正,一个为负,然后将正负极分别与排针焊接在一起;
将蜂鸣器的正负极分别于排针焊接;
将按键的两边与排针焊接在一起。
将LED正负极分别与开发板的DP3.3V和GND连接,可以观察到LED灯点亮。
蜂鸣器的正负极与开发板的DP3.3V和GND连接,可以听到蜂鸣器发声。
将开发板正极和蜂鸣器正极相连,蜂鸣器负极与开关一边相连,然后开关另一边接低电平,按下按键后蜂鸣器会发出声音,证明开关电路完好。
3焊接LED灯
焊接LED电路,将LED1-LED7焊接在开发板上面,然后焊接R4-R7四个电阻,这是二极管的分压电阻。
给开发板通电,然后依次给JP1的1、3、5、7接低电平,会发现LED1-LED4依次点亮,如果有不亮的,说明焊接有误,检查二极管的正负是否正确,用万用表检测是否有短路。
4焊接开关
将KEY1、KEY2、KEY3焊接到开发板上面,然后将3个4K7的电阻焊接到R1、R2、R3三个位置,最后在JP2上面焊接一组排针。
给开发板供电,用万用表检测KEY1-KEY3的电压,正常范围应该是3.28V-3.31V,当KEY1键按下的时候,JP2的1电压应该为0V;
当KEY2键按下的时候,JP2的3电压应该为0V;
当KEY3键按下的时候,JP2的4电压应该为0V。
5焊接串口模块
将CH340G焊接到开发板对应位置,要注意焊接的时候容易将周围引脚连接在一起,必须非常小心的操作。
给开发板供电,然后USB口与电脑连接,电脑的设备管理器可以检测到串口输入,如下图:
6焊接JTAG模块
JTAG模块很简单,只需要将JTAG后面的引脚依次焊接即可。
检测方法:
开发板供电后,用JTAG线连接开发板的电脑,然后打开H-JTAGServer,
点击搜索可以检测到芯片。
如下图:
在H-Flasher窗口的“FlashSelection”项选择仿真的器件型号LPC2132,在H-Flasher窗口的“Programming”项窗,点击<
Check>
按钮,H-JTAG将检测到的器件类型显示于本窗口。
四、遇到问题分析及硬件调试体会
1、遇到的问题
焊接好LED灯模块后,测试LED灯的时候发现LED3不亮,用万用表检测后发现是LED3的引脚虚焊,重新焊接后问题解决。
2、硬件调试体会
焊接过程中需要足够的耐心,不能看到别的同学进度比自己快就急躁,急于求成做出来的产品只能是差的甚至是坏的,我们应该从焊接中总结经验,提高自己的焊接能力,掌握焊接技巧,焊接出最好,最完美的电路板。
第二周:
软件编程与调试
一、调试环境搭建
1启动ADS1.2IDE集成开发环境。
2
在ADS主窗口主菜单选择File->
New,使用asmforlpc2132工程模板建立一个工程(图例中工程名称为:
ZQL_LIB1),指定工程路径(图例中工程路径为D:
\ARM_Lib_Bak\ARM_asm)。
3点击确认<
按钮>
,创建工程。
4
在ZQL_LIB1工程窗口,双击模板文件main.S,打开该文件。
5可在主窗口菜单选择Edit->
Perferences,设置字体和字号。
6
在main.S文件编辑窗的“addtheusercodehere.添加用户代码”行下建立用户汇编程序代码。
7
选择Project->
Make(或快捷键<
F7>
),编译链接整个工程。
若编译成功,则Erros&
Warnings对话框会报告编译错误为0,此时即可对工程进行仿真。
二、调试方法
1单步运行;
在AXD调试器主窗口,选择Execute->
Step(或快捷键<
F10>
),处理器执行一行代码;
2设置断点;
在AXD调试器“代码调试窗口”双击目标代码行,若出现红色实心圆点,则表示断点设置成功;
然后选择Execute->
Go全速运行,处理器执行程序停止在断点行;
3运行到光标行;
在AXD调试器“代码调试窗口”单击选择目标代码行,然后在AXD调试器主窗口,选择Execute->
RuntoCursor运行到光标处;
通过断点调试可以观察
ARM寄存器和存储单元的数值变化,具体操作方法在后面的实验中会作详细介绍。
二、完成实验内容
本人主要负责内容:
GPIO输入输出基础实验,交通灯综合实验中的蜂鸣器、中断服务程序、GPIO初始化模块以及键盘扫描部分编写。
1、GPIO输入输出实验
(1)实验目的
1掌握LPC2132工程模板的使用。
2掌握EasyJTAG仿真器的安装和使用。
3能够在EasyARM教学实验开发平台上运行第一个程序。
4熟悉LPC2000系列ARM7微控制器的GPIO控制。
(2)实验原理
LPC2132系列的ARM7微控制器的所有GPIO口,均为双向I/O口。
引脚可以根据需要配置为I/O口或其它功能,和GPIO相关的寄存器一共有6个见下表:
通过编程控制BEEP(P0.7)输出低电平,从而实现蜂鸣器持续发声。
(3)实验过程
1启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2132工程模板建立一个工程BeepCon_C。
2在user组里编写主程序代码main.c。
3选用DebugInRam生成目标,然后编译链接工程。
4将EasyARM教学实验开发平台上的P0.7管脚与Beep跳线短接
5选择Project->
Debug,启动AXD进行JTAG仿真调试。
6全速运行程序,程序将会在main.c的主函数中停止(因为main函数起始处默认设置有断点)。
7单击ContextVariable图标按钮(或者选择ProcessorViews->
Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。
选择SystemViews->
DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。
8可以单步运行程序,可以设置/取消断点;
或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。
(4)问题分析与解决方法
GPIO功能选择之后没有进行IO0DIR方向选择,导致P0.7口依然为输入口,无法输出低电平信号,故而蜂鸣器没有发声,添加这行代码后,成功实现功能。
2、定时器与中断控制
1熟悉LPC2000系列ARM7微控制器的定时器0的基本设置及匹配输出应用。
使用定时器0实现1秒定时,控制蜂鸣器蜂鸣。
采用中断方式实现定时控制。
备注:
EasyARM2132实验板上的系统时钟默认为11.0592MHz;
系统中已定义了符号常量Fpclk=11059200;
1启动ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一个工程TimeOut_C。
2在user组中的main.c中编写主程序代码。
3选用DebugInExram生成目标,然后编译连接工程。
4选择【Project】->
【Debug】,启动AXD进行JTAG仿真调试。
5将LPC2132开发板上的P0.7接入蜂鸣器
6全速运行程序,蜂鸣器会响一秒,停一秒,然后再响一秒……依次循环。
代码如下:
#include"
config.h"
#defineBEEP1<
<
7/*P0.7控制BEEP,低电平蜂鸣*/
/*****************************************************************************************
**函数名称:
IRQ_Timer0()
**函数功能:
定时器0中断服务程序,取反LED2控制口。
**入口参数:
无
**出口参数:
******************************************************************************************
*/
void__irqIRQ_Timer0(void)
{
if((IO0SET&
BEEP)==0)
IO0SET=BEEP;
/*关闭BEEP*/
else
IO0CLR=BEEP;
T0IR=0x01;
/*清除中断标志*/
VICVectAddr=0x00;
/*通知VIC中断处理结束*/
}
/*
*****************************************************************************************
main()
使用定时器实现1秒钟定时,控制LED9闪烁。
中断方式。
**调试说明:
需要将跳线JP11连接BEEP。
intmain(void)
PINSEL1=0x00000000;
/*设置管脚连接GPIO*/
IO0DIR=BEEP;
/*设置BEEP控制口输出*/
IRQEnable();
/*IRQ中断使能*/
/*定时器0初始化*/
T0TC=0;
/*定时器设置为0*/
T0PR=0;
/*时钟不分频*/
T0MCR=0x03;
/*设置T0MR0匹配后复位T0TC,并产生中断标志*/
T0MR0=Fpclk;
/*1秒钟定时;
系统中已定义Fpclk=11059200*/
T0TCR=0x01;
/*启动定时器*/
/*设置定时器0中断IRQ*/
VICIntSelect=0x00;
/*所有中断通道设置为IRQ中断*/
VICVectCntl0=0x20|0x04;
/*设置定时器0中断通道分配最高优先级*/
VICVectAddr0=(uint32)IRQ_Timer0;
/*设置中断服务程序地址*/
VICIntEnable=1<
0x04;
/*使能定时器0中断*/
while
(1);
return0;
下板后蜂鸣器不发声,检查后发现是蜂鸣器一边接了低电平,另一边接了P0.7引脚,输出低电平后,俩边都是低,所以蜂鸣器不发声,重新接线后恢复正常。
3、外中断控制
学习LPC2000系列ARM7微控制器的向量中断控制器及外中断的应用技术。
主程序闪烁LED,EINT使能/停止BEEP的鸣响。
1跳线LED1、Key1和Beep分别连接到P1.18、P0.16和P0.7管脚;
使用KEY1模拟外中断;
2启动ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一个工程TimeEINT_C。
3在user组中的main.c中编写主程序代码;
使用系统宏IRQEnable(),使能IRQ中断。
4装载并使能外中断;
5选用DebugInExram生成目标,然后编译连接工程。
6选择【Project】->
7全速运行程序,LED闪烁;
8每一次按键Key,蜂鸣器就会转换静音或鸣响状态。
代码如下:
#defineBEEPCON1<
7//P0.7引脚控制Beep,低电平蜂鸣
#defineLED11<
18//P1.18引脚控制LED1,低电灯亮
/****************************************************************************
*名称:
DelayNS()
*功能:
长软件延时
*入口参数:
dly---延时参数,值越大,延时越久
*出口参数:
****************************************************************************/
voidDelayNS(uint32dly)
{uint32i;
for(;
dly>
0;
dly--)
{
for(i=0;
i<
5000;
i++);
}
IRQ_EINT0()
外中断服务程序,取反BEEPCON控制口。
void__irqIRQ_Eint0(void)
BEEPCON)==0)//反转BEEPCON管教输出状态
IO0SET=BEEPCON;
IO0CLR=BEEPCON;
while((EXTINT&
0x01)!
=0)
EXTINT=0x01;
//清除EINT0中断标志
//通知VIC中断处理结束
*文件名:
main.c
主程序闪烁LED1;
KEY1模拟外中断方式,每次外中断事件反转Beep鸣响状态。
*说明:
intmain(void)
intx;
PINSEL0=0x00000000;
//设置管脚连接GPIO
PINSEL1=0x00000001;
//设置管脚P0.16为EINT0
IO0DIR=BEEPCON;
//设置P0.7为输出
IO1DIR=LED1;
//设置P1.18为输出
EXTMODE=0x00;
VICDefVectAddr=(int)IRQ_Eint0;
//设置EINT0为非向量IRQ中断
EXTINT=0x01;
//清除EINT0中断标志
VICIntEnable=1<
0x0e;
//使能EINT0中断
while
(1)//等待EINT0中断
if(x!
=0){IO1SET=LED1;
x=0;
else{IO1CLR=LED1;
x=1;
DelayNS(100);
return(0);
LED闪烁正常,但是按键后蜂鸣器没有任何反应,通过一步步排查,最终发现,引脚定义到了KEY3,但是按键却按下了KEY1,更改引脚定义后,问题解决。
4、UART串口通信
通过实验,掌握UART查询1方式程序的设计。
通过串口0接收上位机发送的字符串,如“HelloEasyARM2132!
”,然后返回上位机显示。
启动ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一个工程DataRet_C。
在user组中的main.c中编写主程序代码,在项目中的config.h文件中加入#include<
stdio.h>
。
选用DebugInRam生成目标,然后编译连接工程。
将EasyARM2132开发板上的JP6跳线分别选择TxD0和RxD0端时,方可进行UART0通信实验。
使用串口延长线把LPC2132教学实验开发平台的CZ2(UART0)与PC机的COM1连接。
PC机运行EasyARM软件,设置串口为COM1,波特率为115200,然后选择【设置】->
【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。
选择【Project】->
【Debug】,启动AXD进行JTAG仿真调试。
全速运行程序,在PC机上的EasyARM软件发送如“HelloEasyARM2132!
”字样的字符串,EasyARM2132开发板接收到数据后,并将接收到的数据回发给PC机。
#include“config.h”
#defineUART_BPS115200//串口通信波特率
dly延时参数,值越大,延时越久
{
uint32i;
/*********************************************************************************
**函数名称:
UART0_Init()
**函数功能:
串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
**入口参数:
**出口参数:
************************************************************************