图3.8 TFTFLCD模块原理图
此模块使用TFT的16位并口数据总线,而没有使用8位的,是可以增加数据传输的速度。因为彩色照片的信息量较大,所以在使用TFT时都要求使用大数据量传输接口。
该模块的80并口有如下一些信号线: CS:TFTLCD片选信号。 WR:向TFTLCD写入数据。 RD:从TFTLCD读取数据。 D[15:0]:16位双向数据线。 RST:硬复位TFTLCD。
RS:命令/数据标志(0,读写命令;1,读写数据)。 TFTLCD显示需要的相关设置步骤如下:
1)与TFT链接的I/O口初始化(包括时钟、方向与模式),本设计使用FSMC功能。 2)初始化TFTLCD模块。
3)通过函数将字符和数字显示到TFTLCD模块上。 3.1.4 FSMC介绍
STM32的内部外设丰富,可选择性强,让用户在各种不同的应用中都能满足设计的要求。现代的液晶显示功能已经渗透到各行各业当中,生活中最为常见的就是我们的手机,其它比如电脑、平板、MP3、MP4、各种家用设备。液晶屏的出现,拉近了人与机器的距离,让人与机器之间可以沟通交流。因为液晶技术的兴起,FSMC技术也将随之兴起,FSMC即存储器扩展技术,其满足不同的大容量静态存储器的拓展。
FSMC(Flexihie Static Memory Controller,可变静态存储控制器)是增强型的STM32单片机特有的存储机制。FSMC机制不是针对某一款存储器定制的,对寄存器设置可以改变FSMC的功能,在其它的存储器上使用。 FSMC的框图如图3.9所示:
16
图3.9 FSMC框图
FSMC技术优势
①支持多种静态存储器类型。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连[9];
②支持丰富的存储操作方法。FSMC不仅支持多种数据宽度的异步读/写操作,而且支持对NOR/PSRAM/NAND存储器的同步突发访问方式[9];
③支持同时扩展多种存储器。FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器[9]。当系统中扩展和使用多个外部存储器时,FSMC会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突[9];
④支持更为广泛的存储器型号。通过对FSMC的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间[9];
⑤支持代码从FSMC扩展的外部存储器中直接运行,而不需要首先调入内部SRAM[9]。
3.2 硬件电路详细设计
3.2.1 温度采集模块设计
在本系统中,我一共设计了四路温度的采集,这四路温度的采集来自不同的四个温度传感器,在实际应用中这四个温度传感器可以放在四个不同的地方来检测不同环境下的温度。在这里我用了控制器的四个IO口,因为考虑到系统用的控制器IO口数目多且采用这样的方式不需要频繁的读取地址码,节省了系统软件运行的时间,提高了效率。而且但总线控制时,总线上面挂的多个DS18B20的地址不同,使用时不但要发送地址,如果某个传感器坏掉以后,要对其更换,就必须将程序的地址序列修改,不然无法识别新的DS18B20。但总线的设计,大大降低了系统的通用性,一旦设计完成,如果要更换传感器,必须要到专门的地点,专业的人员对程序进行修改。每一路温度都和其他路的
17
温度没有关系并且互不冲突,能够很好的实现四路温度同时监测。下图为温度采集系统的电路图,图中PG11,PC1,PC2,PC3表示接到控制器相应的IO口
图3.10 温度采集电路图
3.2.2 显示模块设计
本设计中我采用开发板附带的TFTLCD显示屏,它内部有ILI9325控制器来驱动TFT,TFT采用四线制电阻屏,刷屏速度快,带有触摸屏功能,可以省去部分按键电路的制作。TFTLCD可以直接接在控制器的IO口上,实际上控制器内部对其进行了相应的控制,利用控制器内部自带的FSMC技术把它当做了SRAM存储器来使用,因此使用起来方便快捷,无需更多的驱动的电路。下图为显示图块电路图(图中红色标注表示与控制器相应引脚的连接)
图3.11 显示模块电路图
由上图可知,它的数据线是采用16位并口线来连接的,并且它有如下一些信号线: CS:TFTLCD片选信号。 WR:向TFTLCD写入数据。 RD:从TFTLCD读取数据。 D[15:0]:16位双向数据线。 RST:硬复位TFTLCD。
RS:命令/数据标志(0,读写命令;1,读写数据)。
这里还需要注意,我们标注的DB1~DB8,DB10~DB17,是相对于LCD控制IC标注的,实际上大家可以把他们就等同于D0~D15,这样理解起来就比较简单一点。
18
3.2.3 按键模块设计
按键采用独立式按键,共用四个按键。按键部分电路如下图
图3.12 按键模块电路图
由上图可以知道,KEY0,KEY1,KEY2是低电平有效的,KEY_UP是高电平有效的,而且在这里都没有上下拉电阻,因为在STM32的内部已经设置好了上下拉电阻。 具体按键功能:
KEY1:温度值设定按键“+”,设置报警温度限值值。 KEY0:温度值设定按键“-”,设置报警温度限值值。 KEY_UP:选择查看哪路温度显示。
KEY2:温度值设置。按下此键开始设置报警温度值。 3.2.4报警模块设计
本设计采用蜂鸣器和led灯光报警,当检测到的温度值超过我们预先设置的报警温度时,蜂鸣器会发出声音并且led灯会亮起来,以此来提醒我们温度超限了。电路如图:
图3.13 报警电路图
从图中可以看到我采用了一个三极管,这是因为STM32的单个 IO 最大可以提供 25mA 电流(来自数据手册),而蜂鸣器的驱动电流是 30mA 左右,两者十分相近,但是如果直接驱动蜂鸣器的话,STM32的其他部分用电可能就不够用了,所以,我采用了一个三极管扩大电流后再来驱动蜂鸣器,这样就不需要STM32提供很大的驱动电流了。
19
3.2.5 系统总体电路图
图3.14 系统总电路图
20