微机原理实验指导书.docx
《微机原理实验指导书.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书.docx(18页珍藏版)》请在冰豆网上搜索。
微机原理实验指导书
四.实验任务
4.1实验一按键检测和LED显示
1.实验目的
(1)掌握STM32的I/O模块的使用;
(2)理解独立按键检测和阵列按键检测原理,编程并实现按键检测功能;
(3)理解八段数码管显示原理,编程并实现数码管的显示;
(4)熟悉JTAG调试工具和调试技术。
2.重点、难点
重点:
按键检测及数码管显示的实现。
难点:
按键去抖技术、在线调试技术。
3.作业及课外学习要求
课前预习,撰写预习报告,课后书写实验报告。
4.实验原理
单微处理器与外部芯片或设备最常见的交互,就是通过对I/O口的操作实现的。
无论MCU对外界进行何种数字控制,或接受外部的何种数字控制,都可以通过I/O口进行。
键盘、LED、等外设都是通过I/O口的输入、输出来进行读取或控制的。
LED显示电路如下。
(1)独立按键检测原理
图4.1按键检测基础知识
本实验箱用的按键为弹性按键,存在按下和弹起的抖动问题,可通过延时去抖法实现按键检测。
如图4.1中的流程图所示。
实验例程参见“实验一_IAR_GPIO_独立按键测试”。
本实验箱独立按键和独立LED的硬件定义如下:
#defineLED0(x)GPIO_WriteBit(GPIOA,GPIO_Pin_8,x)
#defineLED1(x)GPIO_WriteBit(GPIOC,GPIO_Pin_9,x)
#defineLED2(x)GPIO_WriteBit(GPIOC,GPIO_Pin_8,x)
#defineLED3(x)GPIO_WriteBit(GPIOC,GPIO_Pin_7,x)
#defineLED4(x)GPIO_WriteBit(GPIOC,GPIO_Pin_6,x)
#defineLED5(x)GPIO_WriteBit(GPIOG,GPIO_Pin_7,x)
#defineLED6(x)GPIO_WriteBit(GPIOG,GPIO_Pin_6,x)
#defineLED7(x)GPIO_WriteBit(GPIOB,GPIO_Pin_0,x)
#defineKEY0GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_8)//读取按键0
#defineKEY1GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_9)//读取按键1
#defineKEY2GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_10)//读取按键2
#defineKEY3GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)//读取按键3
(2)阵列按键检测原理
在MCU系统中键盘中按钮数量较多时,为了减少I/O口的占用,常常将按钮排列成矩阵形式,如下图4.2所示。
图4.2阵列按键原理图与实物图对应关系
矩阵连接式键盘键按矩阵排列,各键处于矩阵行/列的结点处,CPU通过对连在行(列)的I/O线送已知电平的信号,然后读取列(行)线的状态信息。
逐线扫描,得出键码。
其特点是键多时占用I/O口线少,硬件资源利用合理,但判断按键速度慢。
多用于设置数字键,适用于键数多的场合。
按键识别方法:
先把某一行置为低电平,其余各行置为高电平,检查各列线电平的变化,如果某列线电平为低电平,则可确定此行此列交叉点处的按键被按下。
实验例程参见“实验一_IAR_GPIO_阵列按键扫描_数码管显示”。
本实验箱阵列按键硬件定义如下:
staticstructio_portkey_output[4]={//输出行线
{GPIOF,GPIO_Pin_6},
{GPIOC,GPIO_Pin_10},
{GPIOF,GPIO_Pin_7},
{GPIOC,GPIO_Pin_13}};
staticstructio_portkey_input[4]={//输入列线
{GPIOC,GPIO_Pin_14},
{GPIOE,GPIO_Pin_5},
{GPIOC,GPIO_Pin_15},
{GPIOE,GPIO_Pin_6}};
本实验箱8段数码管硬件定义如下:
SEG_led0--PE2
SEGled1--PE3
SEGled2--PB1
SEGled3--PB8
SEGled4--PG14
SEGled5--PG13
SEGled6--PD2
SEGled_DP--PG11
SEGled_s0--PD7
SEGled_s1--PG9
SEGled_s2--PD6
SEGled_s3--PD3
注意:
本实验箱的8段数码管为4位一体共阳数码管。
数码管与STM32直接相连,用户可通过STM32直接输出信号至数码管。
由于七段数码管LED公共端连接到VCC(共阳极),当STM32对应的I/O引脚输出低电平时,对应的七段数码管LED中的LED点亮;当STM32对应的I/O引脚输出高电平时,对应的七段数码管LED中的LED熄灭。
通过控制led_s0--led_s34个管脚,分时控制4个数码管的亮面,通过视觉暂留效应,达到4个数码管同时显示的效果。
5实验任务
实验任务1:
按键检测和LED显示实验
1.1实际运行例程1“实验一_IAR_GPIO_独立按键测试”
1.1.1学习、理解IO口初始化,掌握IO口操作的相关操作方法
1.1.2说明程序用SW0点亮LED0,用SW1点亮LED1,两者的点亮方式有何不同。
1.2编程,按下按键SW0后,8个LED灯从左向右依次发亮。
实验任务2:
阵列按键扫描与数码管显示
2.1运行例程2“实验一_IAR_GPIO_阵列按键扫描_数码管显示”
学习,理解阵列按键扫描与数码管显示器的相关概念。
掌握阵列按键与数码管显示器的编程方法。
2.2编程,扫描键盘,
若按下“1”,用7段LED显示你的学号后4位数。
若按下“2”,用7段LED显示你的学号前4位数。
6实验报告要求
◆实验报告必须有下列内容:
●实验目的
●实验原理
●简要说明库函数作用
•GPIO_Init
•GPIO_SetBits
•GPIO_ResetBits
•GPIO_WriteBit
•GPIO_ReadInputDataBit
●实验任务1.2
•实验原理
•主要编程要点
•主要程序代码
●实验任务2.2
•实验原理
•主要编程要点
•主要程序代码
4.2实验二IO中断和定时器中断
1.实验目的
(1)理解I/O中断的概念,掌握采用I/O中断的按键识别技术;
(2)理解定时器的工作原理,掌握定时器中断的工作方式;
(3)掌握采用定时器的独立按键扫描及阵列按键扫描功能。
2.重点、难点
重点:
I/O中断及定时器的使用,采用定时器的独立按键扫描及阵列按键扫描功能。
难点:
中断的概念及编程实现技巧。
3.作业及课外学习要求
课前预习,撰写预习报告,课后书写实验报告。
4.实验原理
一、IO中断
IO中断模式,可使得外部设备可以主动请求MCU与其传输状态或数据,提高MCU对事件的相应速度。
STM32的所有I/O端口可作为外部中断输入,同时可有16个中断输入源,其中PA0可作为从待机模式唤醒的管脚,PC13可作为侵入检测管脚。
外部中断的库函数将表4.1。
I/0中断的使用请参考“STM32中文参考手册.pdf”中“通用和复用功能I/O(GPIO和AFIO)”的描述,库函数的详细描述见“STM32F10xxx_库函数_cn.pdf”相应章节。
表4.1STM32外部中断的库函数
STM32的中断服务函数,均在Library->src->stm32f10x_it.c中。
本实验例程“实验二_IAR_IO中断”采用SW3做为IO中断,对应的管脚为PC0,中断线为EXTI0_IRQChannel,中断服务函数为voidEXTI0_IRQHandler(void)。
STM32所有模块在使用前,必须先利用“RCC_APB2PeriphClockCmd”或者“RCC_APB1PeriphClockCmd”函数配置时钟。
在配置IO中断前,必须配置系统时钟及GPIOC和AFIO的时钟,见例程“实验二_IAR_IO中断”的函数“NVIC_Configuration”中。
例程“实验二_IAR_IO中断”效果:
每按下SW3按键,LED1灯闪烁几下。
定时器voidTIM2_IRQHandler(void)
二、定时器
定时器主要用于计时、定时或产生PWM信号,广泛应用于工业检测、控制系统中。
本实验例程“实验二_IAR_定时器中断”使能STM32的定时器2(TIM2)和SysTick两个定时器,其TIM2中断服务函数分别为Library->src->stm32f10x_it.c中的“voidTIM2_IRQHandler(void)”,SysTick用于延时,工作于查询模式。
TIM2为10ms中断,主要用于按键扫描。
采用延时函数去抖,占用了大量的CPU资源(Delay函数),而采用定时器实现按键扫描,可以大大提高CPU效率。
图4.3给出了采用定时器中断实现扫描按键的流程图。
例程“实验二_IAR_定时器中断”利用定时器中断,产生了一个50Hz的方波,通过“SPI测试点”区的TP19测试点输出,同时实现了SW2独立按键的定时器扫描功能。
例程“实验二_IAR_定时器中断”效果:
(1)、利用示波器可在TP19测试点测试得到50Hz的方波;
(2)每按下SW2按键,LED2灯的状态就会翻转一下。
5.实验任务
实验任务一:
利用IO中断和SysTich延时函数(在IO中断中延时去抖),编写程序,实现每按下SW3按键,LED1状态翻转一次。
实验任务二:
图4.3定时器按键扫描流程图
利用TIM2中断扫描按键(不能有延时函数),实现按下SW0、SW1时,不同流水灯效果。
●按下SW0,按从左向右的顺序分别点亮LED0~LED7;
即,亮LED0,熄灭LED0;亮LED1,熄灭LED1;亮LED2,熄灭LED2;……
LED0(ON);delay_ms(100);LED0(OFF);delay_ms(100);
LED1(ON);delay_ms(100);LED1(OFF);delay_ms(100);
LED2(ON);delay_ms(100);LED2(OFF);delay_ms(100);
……
●按下SW1,按从右向左的顺序分别点亮LED0~LED7。
实验任务三:
利用TIM2中断编写阵列按键扫描程序(不能有延时函数),要求实现2位数*2位数的计算器功能。
利用*作为乘法,#号作为等于,C清零。
要求八段数码管的显示也在定时器中断中完成(不能有延时函数)。
4.3RS232串口通信
1.基本要求
(1)理解RS232通信时序,掌握RS232模块的使用;
(2)理解RS232外围电平转换芯片的功能,利用示波器测试RS232通信时序;
(3)掌握串口调试技术。
2.重点、难点
重点:
掌握RS232模块的使用。
难点:
通信时序的概念。
3.作业及课外学习要求
课前预习,撰写预习报告,课后书写实验报告。
4实验原理
在微处理器众多的片上外设中,UART模块是最常用的模块之一。
UART通过2根线(RXD、TXD)或4根线(RXD、TXD、RTS、CTS),可将微处理器与专用模块或者其他系统联系起来,实现更复杂的功能或通信,大大扩展了微处理器的应用领域,比如可通过微处理器的UART控制GPRS模块,实现接打电话、收发短信和上网等等。
UART(UniversalAsynchronousReceiver/Transmitter)通用异步收发器,是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
UART首先将接收到的并行数据转换成串行数据来传输。
消息帧从一个低位起始位开始,后面是7~8个数据位,一个可用的奇偶位和一个或几个高位停止位。
接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。
如果选择了奇偶校验,UART就在数据位后面加上奇偶位。
奇偶位可用来帮助校验错误。
在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。
图4.4串口通信时序
本实验例程“实验三_IAR_串口通信”,利用串口1与计算机通信,利用PC端的串口调试助手,实现PC发送给STM32的数据,STM32回传给PC的功能。
UART1的接收中断服务函数是Library->src->stm32f10x_it.c中的“voidUSART1_IRQHandler(void)”。
注意,UART1的收发中断的服务函数均为这个函数,当前进入中断的具体中断源,需要在此函数中通过if语句查询确认,参见本例程。
5.实验任务
实验任务一:
编写一个流水灯程序,利用串口调试助手向MCU发送字符,发送不同的字符时,8个LED灯轮流闪烁效果不同,至少做出两种及以上效果。
同时利用示波器观察并画出PC机向STM32发送数据的波形(UART_TX、UART_RX,TX_+12、RX_+12),解析波形对应的字节。
实验任务二:
编写程序,利用TIM2中断扫描阵列键盘(不能有延时函数),并将扫描到的值通过串口打印到PC端,同时在八段数码管上显示扫描到的键值(不能有延时函数)。
实验任务三:
编写程序,在PC端利用串口调试助手发送不同的字符串,在串口接收中断中编写字符串接收程序,识别字符串,并根据收到的不同字符串,点亮相应的LED等。
字符串为自己的学号和班级号两种。
4.4IIC通信及LCD显示
1.基本要求
(1)理解IIC通信时序,利用示波器测试IIC通信时序;
(2)掌握I/O口模拟IIC的编程以及IIC模块的使用;
(3)掌握IIC接口的液晶显示编程。
2.重点、难点
重点:
掌握IIC模块的使用以及LCD显示编程。
难点:
通信时序的概念。
3.作业及课外学习要求
课前预习,撰写预习报告,课后书写实验报告。
4实验原理
IIC总线以其连线简单(2线传输)、可挂接多达128个设备的特点,在MCU系统中,获得了广泛的应用。
电视机内的MCU通过IIC总线来控制LED驱动器从而控制LED的输出,服务器中的系统温度传感器和风扇等器件都是连接在IIC总线上的。
利用IIC总线MCU可以与很多器件进行通信,如E2PROM、LCD、RTC日历时钟、系统外接DA等。
IIC即集成电路总线(Inter-IntegratedCircuit),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路。
IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源,这种方式简化了信号传输总线。
图4.5给出了IIC总线连接图,IIC总线特征如下:
●只要求两条总线线路:
一条串行数据线SDA,一条串行时钟线SCL。
●每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器。
●它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏。
●串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。
图4.5IIC总线连接图
图4.6IIC总线时序图
图4.6给出了IIC总线时序图。
在SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件;当SCL是高电平时,SDA线由低电平向高电平切换表示停止条件。
起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态在停止条件的某段时间后,总线被认为再次处于空闲状态。
发送到SDA线上的数据每个字节必须是8位,每次可以传输的字节数目不受总线限制,但是每发送完成一个字节必须有一个响应位。
如果从机要完成一些其他功能后才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续。
如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束,从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。
在起始条件S后,第一个发送的数据是一个从机地址,这个地址共有7位(7位地址模式),紧随着的第8位是数据标志位R/W,0表示发送写,1表示发送读。
一般由主机发出停止位P后通信终止,但是如果主机仍然希望在总线上传输数据,那么它可以发出重复起始条件Sr和寻址另一个从机,而不是首先发出一个停止条件,在这种数据传输中,可能会出现不同的读写格式的组合。
实验例程“实验四_IAR_IIC_EEPROM”分别利用STM32的IO口模拟IIC控制器和STM32片内硬件IIC控制器,对EEPROM进行读写,实现数据的掉电保存功能;实验例程“实验四_IAR_IIC_LCD”对液晶屏进行操作,实现液晶屏幕内部的字符串。
可根据显示的内容,得到需要显示的字符串的液晶屏内部地址,实现字符串的显示。
5.实验任务
实验任务一:
编写一个程序,通过串口调试助手,在PC端发送过来自己的学号后,将此学号送入到EEPROM中,按下复位按键,自动读取EEPROM内的学号,并通过串口显示;在此期间,用示波器测试“I2C_LCD测试点”区的“I2C1_SDA”和“I2C1_SCL”信号,理解I2C的通信过程。
实验任务二:
编写一个程序,利用硬件IIC方式,控制液晶屏,显示自己的学号和班级。
并用示波器测试“I2C_LCD测试点”区的“I2C1_SDA”和“I2C1_SCL”信号,理解I2C的通信过程。
4.5AD及并行总线
1.基本要求
(1)理解AD工作原理;
(2)掌握AD模块的使用,并利用AD模块实现直流电压的采集和串口显示;
(3)理解并行总线FSMC通信时序,利用示波器测试该通信时序;
(4)掌握利用FSMC接口实现SRAM操作的编程;
2.重点、难点
重点:
掌握AD、FSMC模块的使用。
难点:
AD模块的使用、通信时序的理解。
3.作业及课外学习要求
课前预习,撰写预习报告,课后书写实验报告。
4.实验原理
在MCU应用中,经常需要测量温度、湿度、压力、电压等模拟量,而MCU是一个数字系统,内部用“0”和“1”数字量进行运算,因此必须把模拟量转换为数字量MCU才能进行识别。
模拟量通过输入接口,即模数转换器(ADC)转换成数字量传送给MCU[6]。
ADC主要性能指标:
(1)分辨率。
ADC的分辨率是能够分辨的最小量化信号的能力,即输出的数字量变化1所需输入模拟电压的变化量,通常用位数来表示。
对于一个实现n位转换的ADC来说,它能分辨的最小量化信号的能力为2n位,即分辨率为2n位。
例如,对一个10位的ADC分辨率为210=1024位。
(2)转换精度。
因为数字量是离散值,模拟量是连续值,所以一般在某个范围中的模拟量都对应于同一个数字量。
例如,有一个ADC,理论上5V电压对应数字量800H,但是实际上4.997V,4.998V,4.999V也对应数字量800H。
这就意味着,在A/D转换时模拟量并不严格一一对应数字量。
这样就有一个转换精度的问题,转换精度反映了ADC的实际输出接近理想输出的精确程度。
A/D转换的精度通常是用数字量的最低有效应(LSB)来表示的。
设数字量的最低有效位对应于模拟量△,这时称△为数字量的最低有效位当量。
转换时间和转换率。
完成1次A/D转换所需要的时间,称为ADC的转换时间。
用ADC的转换时间的倒数表示ADC的转换速度,即转换率,例如,一个12位逐次逼近式ADC,完成一次A/D转换所需时间20µs,其转换率为50KHZ。
ADC的转换时间约为几个µs至200µs。
STM32F103ZCT6内嵌3个12位的模拟/数字转换器(ADC),每个ADC共用多达21个外部通道,可以实现单次或扫描转换。
在扫描模式下,自动进行在选定的一组模拟输入上的转换。
实验板上,PC1口连接了一个电位器,通过旋转电位器可以得到0~1.7V的模拟电压(“电压测试点”区的TP9测试点),同时本实验板上的并行总线连接了一个512KB的SRAM和一个TFT液晶显示屏。
通过对SRAM或TFT的操作,可以理解FSMC总线的通信时序。
实验例程“实验例程五_AD_FSMC”提供了利用定时器Timer2驱动AD采样,并将采样得到的数据通过FSMC写入到SRAM的功能。
5.实验任务
实验任务一:
编写一个程序,在实验例程“实验例程五_AD_FSMC”基础上,对采样得到的值,转换为电压值,并利用串口打印出电压的字符串,例如:
”Voltage:
1.7V”
实验任务二:
编写一个程序,以1KHz采样率,采集频率为100Hz,峰峰值为3V的正弦波,共采集50个点,并在采集的同时将采集到的值写入SRAM中。
在采集完成后,读取SRAM的内容,并通过串口显示所采样得到的50个点的数据的高8位。
4.6DA及DDS
1.基本要求
(1)理解DA的工作原理;
(2)掌握DA模块的使用,并利用DA模块实现直流电压的输出;
(3)理解DDS的工作原理,并利用DA实现正弦波的产生;
2.重点、难点
重点:
掌握AD模块的使用。
难点:
DDS工作原理。
3.作业及课外学习要求
课前预习,撰写预习报告,课后书写实验报告。
4.实验原理
数模转换器作为数字域与模拟域的桥梁,有很重要的应用,如CD播放器中的高分辨率DAC可将数字记录变为模拟音频输出,还可利用DAC进行AGC电路的增益设置、产生任意波形等。
STM32F103ZCT6包含两个12位带缓冲的DAC通道可以用于转换2路数字信号成为2路模拟电压信号并输出。
这项功能内部是通过集成的电阻串和反向的放大器实现。
这个双数字接口支持下述功能:
具有两个DAC转换器并各有一个输出通道,有8位或12位单调输出;具有同步更新功能,可以产生噪声波、三角波;双DAC通道独立或同步转换,并且每个通道都可以使用DMA功能;由外部触发开始进行DAC转换。
DAC通道可以由定时器的更新输出触发,更新输出也可连接到不同的DMA通道。
利用STM32的DAC管脚和定时器,可以方便的实现数字信号的模拟化,DAC模拟信号可通过的第PA4和PA5管脚输出。
利用DA及低通滤波器可以实现直接数字信号合成器(DDS)。
简易DDS工作原理:
在保证DA输出频率(采样速率)不变的情况下,通过控制相位表的查表步长,即可实现输出一个完整正弦波的时间不同,从而实现不同正弦波频率的输出。
具体操作步骤为:
1、在MCU内部建立一个正弦波,一个周期10000个点。
2、以200kHz的定时器驱动DA转换,则DDS的采样速率即为200kHz,此时若逐点输出正弦波表的10000个点,则可产生20Hz的正弦波
3、在步骤2的基础上,若改变数据点的间隔,则可以得到不同的输出频率。
实验例程“综合实验_IAR_DDS”提供了一个利用DA产生100Hz正弦波的实例。
5.实