您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 东南大学智能仪器实验报告
东南大学《智能仪器》实验报告实验一软硬件平台基本操作实验姓名:姜舒学号:22011308专业:测控技术与仪器实验室:常州楼518实验时间:2013年05月15日报告时间:2013年05月20日评定成绩:审阅教师:《智能仪器设计技术》实验报告学号22011308一、实验内容新建一个STM32工程。完成软件的编译和在线调试。二、实验目的1、学会Keil4编程环境中新建工程的步骤;2、掌握工程的编译及在线调试方法。三、实验说明在KeilMDK环境下使用STM32固件库开发,一般分四步完成:第一步,获得库文件,并进行适当的整理;第二步,建立工程,并建立条理清晰的Group;第三步,修改工程的Option属性;第四步:使用J-link仿真调试。访问ST的官网上就可以获得最新的固件库,对这些文件进行整理,把相关文件放在一起,并取一个标准化的名字,这些文件夹的名字一般和原始固件库文件夹的名字相同,只是把需要的文件放在一起。在工程目录下面建立几个文件夹(User,CMSIS,StdPeriph_Driver和StartUP),另外建立两个文件夹,一个取名为Listing,另一个取名为Object,这两个文件夹保存Keil编译连接过程中产生的一些文件。对于一些常用或者必用文件,简介如下:core_cm3.c/core_cm3.h内核访问层的源文件和头文件。stm32f10x.h外设访问层的头文件,是最重要的头文件之一。例如定义了CPU是哪种容量的CPU、中断向量等等。除了这些还定义了和外设寄存器相关的结构体,那么在应用文件中(例如自己编写的main源文件)只需要包含stm32f10x.h即可。system_stm32f10x.c/h也可以称为外设访问层的头文件和源文件。在该文件中可以定义系统的时钟频率,定义低速时钟总线和高速时钟总线的频率。本教程在stm32的初始化工作中并未使用这两个文件,而是使用了自己编写的Clock_Init.c/h,更加简单方便,容易上手。stm32f10x_conf.h需要使用哪些外设就取消哪些外设的注释。例如需要使用GPIO功能,但不使用SPI功能,就可以这样操作。main.c《智能仪器设计技术》实验报告学号22011308工程主函数。STM32F10x_BUS.HSTM32核心板与实验箱的总线连接。里面提供了对实验箱外设的读写操作等函数。stm32f10x_it.c/h这两个文件包含了stm32中断函数,在源文件和头文件中并没有把所有的中断入口函数都写出来,而只写了ARM内核的几个异常中断,其他的中断函数需要用户自己编写。StdPeriph_Driver文件夹一个是src文件夹,面放的是元件;另一个是inc文件夹,里面放的是头文件。这两个文件夹包含了所有STM32的外设驱动函数。四、实验步骤1、建立工程(1)新建一个文件夹存放工程,将桌面“智能仪器”文件夹中Project文件夹下的四个文件夹(User,CMSIS,StdPeriph_Driver和StartUP)拷入该文件夹,该文件夹下再新建两个文件夹Object和Listing。打开桌面“智能仪器”文件夹下KeiluVision4软件;(2)若有之前的工程,Project菜单项中点击CloseProject,关闭旧的工程;若无,则忽略此步;(3)新建工程,Project菜单项中点击NewuVisionProject,然后保存工程文件,路径自由设定并可以包含中文。选择指定的CPU型号,如图1-1所示。选择STM32F103RC;接着弹出一个添加启动代码的窗口,如图1-2。在这里点击“否”。因为这个启动代码是旧版本库的启动代码,新版的启动代码和这个不同,需要自己添加。所谓启动代码就是在main函数之前运行的代码。(4)选择CPU型号后就需要建立一个条理清晰的Group,尽可能把同类文件放在一起,并取名和工程文件目录中相同的名字,便于管理。在Target1选项上右击,在弹出菜单上选择managecomponents,或者直接点击工具栏上的三色图标。如图1-3所示。(5)建立相应的Group。如User,CMSIS,StdPeriph_Driver和StartUP,这些Group的名称和工程文件夹的名称保持一致,如图1-4所示。为每个Group添加同名文件夹下的源文件或者头文件。根据自己的工程需要添加。注:①User,CMSIS分组添加相应文件夹下所有.c文件;《智能仪器设计技术》实验报告学号22011308②StdPeriph_Driver分组添加对应文件夹下src中相应的模块。工程用到哪些模块就添加哪些模块,如建立一个LED流水灯的工程,这个工程除了进行必要的初始化之外,只需要包含GPIO的操作函数,当然需要使用GPIO就必须要使能GPIO的时钟,RCC,flash是绝对少不了的。所以只需要包含misc.c,stm32f10x_gpio.c,stm32f10x_flash.c和stm32f10x_rcc.c。也可全部添加,但会导致工程编译缓慢。③StartUP分组根据所使用的CPU型号添加启动文件。这里我们只需添加startup_stm32f10x_hd.s文件。(6)修改工程Option属性。修改工程属性主要目的是指定相关头文件的路径。右击工程目录GPIO则会出现Option选项卡,或者单击工具栏中类似于小魔棒的图标打开Option选项卡。注:Keil只能识别单级目录,因此设置包含路径时需设置到每个子文件夹。(7)使用J-link调试设置。单击图1-12中的Setting,进入如下Flash设置。我们使用的CPU属于大容量产品,选择STM32F10x-High-densityFlash。2、硬件连接序号连接孔1连接孔21PC0K02PC1K13PB8L04PB9L1注:连接孔1位于Cortex实验扩展模块上,连接孔2位于实验箱的LED/开关模块。3、编译调试(1)在main.c中编写工程主函数(见参考程序),完成后点击工具栏中进行编译,无误后即可点击下载,通过实际运行观察实验结果(下载完后CPU需复位一下方可运行,按一下S1按键即可)。(2)如果运行结果与设计不符,可点击进入调试模式查找原因。(3)进入调试模式后可使用工具栏上的调试选项,单步调试、进入函数调试、执行到断点等,如图1-14。图1-14调试常用工具栏《智能仪器设计技术》实验报告学号22011308五、程序源代码main.c#includestm32f10x.h#includeClock_Init.hvoidInit(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB端口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//L0~L1--PB8~PB9端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_ResetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9);//PB8,PB9输出低RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PC端口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;//K0~K1--PC0~PC1端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉输入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);}intmain(){u8K0,K1;RCC_Configuration();delay_init(72);Init();while(1){K0=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0);K1=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1);if(K0)GPIO_SetBits(GPIOB,GPIO_Pin_8);//K0为高,点亮L0elseGPIO_ResetBits(GPIOB,GPIO_Pin_8);//否则熄灭L0delay_ms(5);if(K1)GPIO_SetBits(GPIOB,GPIO_Pin_9);//K1为高,点亮L1elseGPIO_ResetBits(GPIOB,GPIO_Pin_9);//否则熄灭L1delay_ms(5);}}《智能仪器设计技术》实验报告学号22011308东南大学《微机系统与接口(含实验)》实验报告实验二键盘扫描显示实验姓名:姜舒学号:22011308专业:测控技术与仪器实验室:常州楼518实验时间:2013年05月15日报告时间:2013年05月20日评定成绩:审阅教师:《智能仪器设计技术》实验报告学号22011308一、实验内容利用实验箱提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。二、实验目的1、掌握键盘和显示器的接口方法和编程方法。2、掌握键盘扫描和LED八段码显示器的工作原理。3、掌握STM32GPIO的双向使用。三、实验说明本实验箱提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。地址中的X是由KEY/LEDCS决定,参见地址译码。做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。以便用相应的地址来访问。例如将KEY/LEDCS信号接CS0上,则列扫描地址为08002H,行码地址为08001H。列扫描码还可以分时用作LED的位选通信号。图2-1键盘数码管电路原理图四、实验框图《智能仪器设计技术》实验报告学号22011308图2-2主函数流程图五、实验步骤1、参考实验一步骤,建立工程,编写相关代码(见参考程序);或者直接使用Demo工程,在main.c中编写相关代码。2、硬件连接序号连接孔1连接孔21注:连接孔1位于实验箱的地址选择模块,连接孔2位于实验箱的键盘/数码管模块。3、Cortex-M3实验扩展模块K0选择BUS(拨向下),实验箱数码管驱动方式选择“内驱”。4、调试并下载程序,将S1复位后观察实验结果。六、程序源代码main.c#includeSTM32F10x_BUS.H#defineIN0x8001#defineOUTBIT0x8002#defineOUTSEG0x8004#defineLEDLen6//定义LED显示位数,最大6,最小1《智能仪器设计技术》实验报告学号22011308unsignedcharLEDBuf[LEDLen];//显示缓冲unsignedcharLEDMAP[]={//八段管显示码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voidDelay(unsignedcharCNT){unsignedinti;while(CNT--!=0)for(i=1000;i!=0;i--);}voidDisplayLED(){unsignedchari;unsignedcharPos;unsignedcharLED;Pos=0x20;//从左边开始显示for(
本文标题:东南大学智能仪器实验报告
链接地址:https://www.777doc.com/doc-6282894 .html