当前位置:文档之家› ARM嵌入式课程设计

ARM嵌入式课程设计

通信与信息工程学院2015/2016 学年第一学期课程设计实验报告模块名称ARM嵌入式开发专业电子信息工程学生班级B120110学生学号B******** 学生姓名钱晨指导教师余雪勇实验内容一、基本要求在基本要求中,需要从11个测试程序中选做8个,以下是对8个程序的实验过程的叙述,包括实验前的硬件连接准备、软件环境配置(串口工具、dnw、ADS、交叉编译环境等)、每个实验的关键代码以及简单分析。

1、硬件连接用USB线、串口线把开发板连到电脑相应的端口,再将电源线插好。

2、软件环境配置设置串口工具SecureCRT解压在“windows 平台开发工具包\”目录下的“SecureCRT.rar”后,即可使用SeureCRT,双击图标,打开SecureCRT,如下图所示:点击图中红色方框图标,出现下图的设置窗口:在 Ptotocol 里面选择Serial,出现如下图所示的对话框,详细设置参考下图,超级终端设置部分,不再重复。

注意:Port 选项部分根据您实际使用的端口进行配置,其他选项请一定配置如下图所示。

配置完毕后,点击上图的“Connect”选项即可连通串口。

DNW 设置DNW 在这里是我们的.bin 文件下载软件,可实现我们向flash 或者内存当中烧写程序的功能。

直接双击“Windows 平台工具\DNW”目录下的DNW 软件,出现下图:配置(2)配置如下图:3、实验前准备串口工具和开发板连接成功后,将选择开关打到norflash,并按一下重启键,开发板则自动按照选择从norflash 启动。

此时,如果 SecureCRT 界面显示如下,则表示串口工具已经工作正常:一般出厂光盘里面已经有许多bin 文件了,其中包括我们此处所说的TQ2440_Test 的bin文件。

我们也可以参考以下步骤,使用ADS1.2 生成自己的“*.bin”文件。

(1)、安装ADS1.2(ARM Developer Suite v1.2,一款针对ARM 的开发套件),并使用ADS打开天嵌科技的出厂自带的测试程序。

(2)、点击compile 键进行编译,点击make 键生成我们此处所需要的“*.bin”文件生成自己的 bin 文件之后,就可以使用SecureCRT 配合dnw 来实现对bin 文件的下载了:操作步骤其实和上面烧写出厂程序一样,在此再详细叙述一下:a,打开串口工具,使开发板从norflash 启动,再串口工具中出现的信息中,选择a,进入等待下载状态;b,双击打开dnw,然后选择USB Port >>Transmit>>找到相应的需要烧写的bin 文件,双节即可完成烧写。

(3)、按照以上步骤进行操作,则我们此时基本已经完成了一次完整的程序的从编译到烧写的过程了。

同时,至此天嵌的出厂测试程序已经被我们烧写到了nandflash 中。

此时,我们再将选择开关打到nandflash 中并重启开发板,使开发板进入我们刚刚烧写的出厂程序中,我们会看到在SecureCRT 界面会出现以下信息:<***************************************>TQ2440 Test ProgramB12011031--钱晨<***************************************>Please input 1-11 to select test1 : BUZZER_PWM_Test,蜂鸣器测试2 : LED_Test,流水灯测试3 : RGB_Test,RGB配色测试4 : Lcd_TFT_Test,按键显示6张图片5 : Lcd_TFT_Test2,自动循环显示6张图片6 : Lcd_TFT_Test3,测试动态图片7 : PWM_Music1_Test,测试歌曲18 : PWM_Music2_Test,测试歌曲29 : RTC_Display,RTC time display10 : Test_Adc,Test ADC11 : KeyScan_Test,Test interrupt and key scan截图如下:4、 8个测试程序分析(1)蜂鸣器测试按“—”号,蜂鸣器声音频率逐渐减小,最小 Freq = 10;按“+”号,蜂鸣器声音频率逐渐增大,最大Freq = 2000。

(加号需要按住“shift”不然是等号)。

使用 ADS 打开出厂程序如下:双击,打开 Main.c 文件,找到while(1)循环,在其中的CmdTip函数上面右键,Go to 一下,就转到了:struct {void (*fun)(void);char *tip;}CmdTip[] = {{ Temp_function, "Please input 1-11 to select test" } ,{ BUZZER_PWM_Test, "Test PWM" } ,{ RTC_Display, "RTC time display" } ,{ Test_Adc, "Test ADC" } ,{ KeyScan_Test, "Test interrupt and key scan" } ,{ Test_Touchpanel, "Test Touchpanel" } ,{ Lcd_TFT_Test, "Test TFT LCD" } ,{ Test_Iic, "Test IIC EEPROM" } ,{ PlayMusicTest, "UDA1341 play music" } ,{ RecordTest, "UDA1341 record voice" } ,{ Test_SDI, "Test SD Card" } ,{ Camera_Test, "Test CMOS Camera"},{ 0, 0}};从下面struct 结构当中去寻找到BUZZER_PWM_Test ,并右键go to ,跳转到: void BUZZER_PWM_Test( void )这个函数。

void BUZZER_PWM_Test( void ){U16 freq =800;// lci 1000 ;Uart_Printf( "\nBUZZER TEST ( PWM Control )\n" );Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !\n" ) ;Uart_Printf( "Press 'ESC' key to Exit this program !\n\n" );Buzzer_Freq_Set( freq ) ;while( 1 ){U8 key = Uart_Getch();if( key == '+' ){if( freq < 2000 ) //lci 20000freq += 10 ;Buzzer_Freq_Set( freq ) ;}if( key == '-' ){if( freq > 11 )freq -= 10 ;Buzzer_Freq_Set( freq ) ;}Uart_Printf( "\tFreq = %d\n", freq ) ;if( key == ESC_KEY ){Buzzer_Stop() ;return ;}}}我们仔细地分析过这个函数之后不难发现,在我们if( key == '-' )的时候没有问题,是因为此处的减号就是我们键盘上的减号,但是,在我们很多键盘上面是没有if( key == '+' )中的这个加号的,我们要想解决这个漏洞有两个办法:一是,在我们调试出厂程序的时候,使用shfit 加“+”号键来组合实现对于频率控制时候的增加功能;二是,在这里直接把if( key == '=' ),这样就可以是我们在调试程序的时候更加直观了。

其实仅仅是改变按键,包括频率的变化范围、变化步长都可以在这个函数中改变。

(2)按键显示六张照片我们要实现在原厂程序的Lcd_TFT_Test 实验当中实现切换六张自己喜欢的图片,我们所需要做的工作如下:a、在TQ_LOGO.c 文件中添加数组:unsigned char tu1_320240[] = {};unsigned char tu2_320240[] = {};unsigned char tu3_320240[] = {};unsigned char tu4_320240[] = {};unsigned char tu5_320240[] = {};unsigned char tu6_320240[] = {};添加方法和之前一样,按照之前的方法写在正确的位置就可以了。

b、在LCD_TFT.h 文件中添加对应数组的外部声明:extern unsigned char tu1_320240[];extern unsigned char tu2_320240[];extern unsigned char tu3_320240[];extern unsigned char tu4_320240[];extern unsigned char tu5_320240[];extern unsigned char tu6_320240[];不添加这些语句的话就不可以在其他文件当中引用这些数组,所以我们当然要这个外部声明。

至于有些同学不懂得这个工作怎么做?对于基础比较差的同学,建议大家尽快培养一种思路,多去看别人代码,多去看别人的写法,多去模仿别人的语句来书写自己的语句。

添加的位置有之前的数组可以供大家参考,此处具体做法为:参考原代码的对应的外部数组声明的位置,我们不妨使用以下代码:“extern unsigned char tu1_320240[];extern unsigned char tu2_320240[];extern unsigned char tu3_320240[];extern unsigned char tu4_320240[];extern unsigned char tu5_320240[];extern unsigned char tu6_320240[];”覆盖掉原代码段:“#if((LCD_Type == LCDW35) || (LCD_Type == LCDS35)) // 3.5 寸屏extern unsigned char TQ_LOGO_320240[];//自定义的图片#elif(LCD_Type == LCDT35) // 3.5 寸屏extern unsigned char TQ_LOGO_240320[];//自定义的图片#elif(LCD_Type == LCDW43) // 3.5 寸屏extern unsigned char TQ_LOGO_480272[];//自定义的图片#elif(LCD_Type == VGA) //VGAextern unsigned char TQ_LOGO_640480[];//自定义的图片#elif(LCD_Type == LCDA70) // 7 寸屏extern unsigned char TQ_LOGO_800480[];//自定义的图片#endif”即可。

相关主题