基于STM32的智能笔筒设计

发布者:小悟空111最新更新时间:2015-11-30 关键字:STM32  热插拔  蓝牙 手机看文章 扫描二维码
随时随地手机看文章
笔筒是书案上的重要文具之一,具有较高实用价值与艺术价值,在某种意义上讲也是文化的一种载体。传统笔筒多采用竹木制或瓷制,一旦制作完成就难以改变,且功能单一。目前,笔筒主要被用在办公场所,那种只具有观赏价值或只能放笔的笔筒不能满足工作需要。

针对上述情况,本文基于STM32F103VET6单片机设计了智能笔筒。该设计充分利用此单片机的FSMC,SDIO和SPI等片上资源,结合MP3解码技术、图像解码技术和蓝牙通信技术等多种技术实现笔筒的智能化。此笔筒不仅满足常用的功能,且还可在液晶屏上查看电子相册、听MP3歌曲、玩小游戏。此外还可显示周围环境的温湿度和光线强度,具有节假日和预设提醒等功能。

1 智能笔筒硬件设计

1.1 硬件总体结构

系统硬件以STM32F103VET6为核心,硬件框图如图1所示。

 

a.jpg

 

传感器感知模块包括温湿度传感器、光敏传感器和人体感应传感器,用于获取当前环境的参数;声光模块包括7色LED灯和蜂鸣器,使笔筒更加绚丽并具有提示功能;以触摸屏为核心的人机交互模块,可实时显示当前温湿度、光强和时间,各应用程序的切换,系统参数设置以及系统异常状态的报警提示,各个模块的自检和测试的控制。此外,支持热插拔的设备有传感器感知模块、存储模块和蓝牙模块。

1.2 存储模块电路设计

该设计选择SD卡作为存储模块。目前SD卡已经成为消费设备中技术最成熟、应用最广泛的一种存储卡,具有低价格、大容量、高性能、安全、读写速度快等多种优势。SD卡支持的总线模式为SD模式和SPI模式,而STM32VET6具有一个SDIO接口,故设计中采用SD模式,SD卡连接在SDIO接口上。为了使SD卡支持热插拔,SD卡的接口电路如图2所示。

 

b.jpg

 

此电路中,增加一条I/O口控制线SD_IRQ,用于产生中断,默认状态SD_IRQ为高电平,当插入SD卡后,SD_IRQ变为低电平,且只要卡槽中有SD卡,此线就一直为低电平。通过添加这一条控制线,系统实现SD卡的热插拔,并可检测SD是否存在。

1.3 MP3解码模块电路设计

VS1003B作为本设计的MP3解码芯片,是一个单片MP3/WAM/MIDI音频解码器ADPCM解码器,拥有一个高性能低功耗的DSP处理器核VSDSP,5kB数据缓冲区,0.5kB的数据RAM,支持SPI总线传输数据,有一个高品质可变采样率的ADC和立体声DAC,还有一个耳机放大器和地线缓冲器。根据VS1003B数据手册设计的MP3解码电路,由STM32主控模块的接口SPI2控制,解码相应的音频文件并播放MP3音乐,其中Speak是耳机接口,MP3/LEFT控线连接音频驱动电路。

1. 4 传感器模块热插拔电路设计

热插拔(Hot—Plugging或Hot Swap)即带电插拔,最早出现在服务器领域,是为了提高服务器易用性而提出的。热插拔根本目的:系统在允许不停机或很少需要操作人员参与的情况下拔出故障模块及插入备份模块,且不影响系统运行,以便维修故障或重新配置系统,实现故障恢复和系统重新配置,提供高可靠应用。本设计中传感器感知模块包括温湿度传感器、人体感应传感器和光线强度传感器,在系统电路设计时,为了方便检测各个传感器是否存在和是否正常工作,方便检修更换,故引入了热插拔技术,支持热插拔的硬件电路如图3所示。在电路中各个传感器接口电路均有一个中断控制线,默认状态下中断线为高电平,当插入相应的传感器模块后,此控制线由高电平变为低电平,引起中断,并配合相应的软件即可实现热插拔技术。

 

c.jpg

 

1.5 蓝牙通信模块

TI公司的CC2540采用Bluetooth SpecificationV4.0 BLE协议,支持AT指令,工作频率为2.4 GHz,具有AES-128硬体加密/解密功能。同时考虑到本设计的无线传输及其低功耗需求。因此选择CC2540为主控芯片的蓝牙模块作为本设计的蓝牙通信模块。该模块与STM32主控模块的接口为USART2,默认波特率设置为115 200 bit·s-1,8 bit数据位无校验位,无停止位,工作模式为从设备模式,也可通过人机交互模块设置其波特率等参数。笔筒主要通过蓝牙模块与智能设备进行交互,接收智能设备发送的数据包,进行数据包校验和解码,并对主机做出答复,接收的数据包格式为包ID+包长度+数据+校验位,校验方式为和校验。

2 系统软件设计

为使该设计成为“娱乐+实用”的电子产品,软件包括文件系统、图片和MP3解码、蓝牙通信、图形界面设计、传感器驱动、AD采样等。图4是该设计的软件流程。按系统设计要求,系统开机首先对各个模块自检,如出现异常情况,跳转异常状态,并给用户做出相应的提示,否则将在正常开机同时初始化文件系统。接着读取触摸屏的校正参数,若无,则重新校正触摸屏并保存,最后进入主循环。

 

d.jpg

 

2.1 文件系统

FatFs是一个通用的文件系统模块,具有清晰的层次结构,如图5所示,用于在小的嵌入式系统上实现FAT文件系统。FatFs的编程遵守ANSI C格式语法,故FatFs独立于具体的硬件,可在不做修改或少量修改的情况下移植到常用的微控制器,如51、PIC、AVR、ARM等中。最重要的是该文件系统通过修改配置文件可实现任意裁剪,且支持中文长文件名;采用分离缓冲FAT结构的技术,可快速访问多个文件;支持多个驱动器和分区;支持FAT12、FAT16和FAT32文件系统。因此设计移植的文件系统为FatFs,支持读写和中文长文件名,存储介质为SD卡,主要用于存放系统配置文件,系统图标和MP3、图片等应用文件,移植步骤见文献。

 

e.jpg

 

2.2 电子相册设计

电子相册与传统相册相比具有无法比拟的优越性,如图、文、声、像并茂的表现手法;随意修改编辑的功能;具有欣赏方便、选择性强、易于保存、生动活泼、成本低廉、内容易换等优点。因此,在智能笔筒中也添加了电子相册功能,可让用户在闲暇休息时观看图片,也可将自己喜爱的图片设为背景。系统中电子相册是触摸操作,向左或向右滑动彩屏实现翻页,具有自动播放等功能,程序流程图如图6所示。首先从文件系统中读取图片文件,判断文件的格式,然后解码,最后把读到的文件送到相应的解码算法中,解码后的图片可自动调整尺寸显示在彩色液晶屏上。

 

f.jpg

 

2.3 MP3播放设计

在本设计中,STM32微处理器是播放器的“大脑”,用来接受用户选择的播放控制,从文件系统中读取MP3文件,将当前播放的歌曲信息显示在液晶屏上。然后向MP3解码芯片VS1003B发出指令,使其准确地处理音频信号,MP3播放器的软件框图如图7所示。此外MP3播放器的控制界面含有上一曲、下一曲、暂停、播放等控件,其程序的设计流程和电子相册的类似。

 

g.jpg

 

2.4 系统热插拔程序设计

按系统设计要求,热插拔的程序在中断函数里执行,这里以传感器感知模块中的温湿度传感器SHT11程序为例。由硬件图可知,插入设备时,中断线由低电平变为高电平,拔出时反之,且均可产生中断信号,然后执行中断函数。SHT11中断程序的流程如图8所示,首先进入中断函数,并通过延时来消除电平抖动的影响,然后判断引脚的高低电平,最后做出处理。

 

h.jpg

 

3 系统测试

利用STM32单片机资源丰富、功能强大的优势,最终设计出一款基于STM32单片机的智能笔筒,如图9所示,并对系统进行了测试,测试结果如表1和表2所示。

 

i.jpg

 

 

j.jpg

 

表1为系统的热插拔的测试结果,SD卡的失败率较高,驱动程序需要进一步改进。表2为系统的稳定性进行测试结果,开机未出现异常,电子相册出现死机达4%,MP3死机为2%,使用蓝牙控制游戏出现死机高达8%,但复位后系统继续可正常运行。经观察和分析原因可能出现在软件上,JPG解码算法比较复杂,而蓝牙串口接收的数据包容易堵塞,需要进一步优化代码。

4 结束语

根据测试的结果,本文设计的智能笔筒达到了设计要求,稳定可靠,实现了实时显示温湿度和光强,播放MP3,电子相册显示等功能,并可通过蓝牙可传输文件,其它智能设备可通过蓝牙控制游戏的进行。此外,也可作为物联网的一个终端,获得数据并上传。

关键字:STM32  热插拔  蓝牙 引用地址:基于STM32的智能笔筒设计

上一篇:基于S3C6410目标搜索飞行器的设计与研究
下一篇:USB Type-C 接口上的大统一?

推荐阅读最新更新时间:2024-05-03 00:07

STM32单片机使用ST-LINK调试程序时不能设断点
我使用的是STM32单片机,昨天使用ST-LINK调试程序时,发现有些语句不能设断点。程序编译时OK的,没有错误,将程序烧录入单片机后程序看着也能正常运行,但是点击keil中debug按钮后程序进入调试状态,程序并没有停留在main函数的第一条语句,而是停留在别处。main函数第一条语句不能设置断点。 经过在网上查阅资料,发现可能是由于keil软件代码优化的问题。经过测试,发现果然是代码优化的问题。关于以上问题的解决方法:点击keil中“options for target”- 点击 C/C++ ,修改其中的 Optimization 一栏,选择“Level 0”即可。重新按keil中debug按钮进入调试状态,语
[单片机]
Arduino_Core_STM32---pinMode()实现分析
pinMode()定义 Arduino平台的易于使用性主要就体现在屏蔽的大量底层细节的实现,对于该函数来说也不例外。虽然该函数只有两个参数(arduino引脚号和模式),但这两个参数需要多层的映射才能转化为具体适合STM32芯片的配置信息,并调用底层接口完成配置。 从下面源码中可以看出主要由两个函数来完成引脚模式配置的:digitalPinToPinName()和pinfunction()。在具体深入下面两个函数之前我们需要一些预备知识—该库对于STM32硬件端口和引脚的封装。 void pinMode(uint32_t ulPin, uint32_t ulMode) { PinName p = digitalPinTo
[单片机]
HAL库的官方历程
需求: 我们以前用标准库的时候是一个压缩包,然后压缩包中有官方的历程,我们使用片上资源的时候会去参考查询,但是ST推出HAL库之后搭配的是STM32CubMX自动生成的,我们也需要参考官方历程,这时候就需要HAL库的官方历程。 路径: 1.打开STM32CubeMX,然后电机Help下的Updater Settings 2.找到如下路径: 3.然后顺着刚刚路径后面继续打开如下路径:STM32Cube_FW_G0_V1.2.0ProjectsNUCLEOG070RBExamplesPWRPWR_STANDBY
[单片机]
HAL库的官方历程
STM32的FSMC详解
STM32的FSMC真是一个万能的总线控制器,不仅可以控制SRAM,NOR FLASH,NAND FLASH,PC Card,还能控制LCD,TFT. 一般越是复杂的东西,理解起来就很困难,但是使用上却很方便,如USB. 不过FSMC也有很诡异的地方.如 *(volatile uint16_t *)0x60400000=0x0; // 实际地址A21=1,而非A22. *(volatile uint16_t *)0x60800000=0x0; // 实际地址A22=1,而非A23 为什么呢?那时我还以为软件或硬件还是芯片有BUG, 我就是从上面的不解中开始研究FSMC的….. 1.FSMC信号引脚 S
[单片机]
<font color='red'>STM32</font>的FSMC详解
基于STM32的无线通信模块使用——HC_05蓝牙串口
一、模块介绍 1、供电电压3.3V~3.6V; 2、支持AT指令集配置模块; 3、采用CSR主流蓝牙芯片,蓝牙V2.0协议标准; 4、波特率最高为1382400bps; 5、配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。 6、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机最好串联一个1K电阻再与模块直接连接,无需MAX232也不能经过MAX232! 二、PC端配置模块,手机端连接模块 如果要配置模块的参数,那么就必须要进入AT命令模式,我们首先通过PC机来配置一个模块。
[单片机]
基于<font color='red'>STM32</font>的无线通信模块使用——HC_05<font color='red'>蓝牙</font>串口
STM32读写flash保存用户数据
在实际的项目中,我们可能需要保存一些数据,希望下次启动的时候数据还可以使用。在这里介绍使用STM32内部flash来保存数据的方法。 在这里我使用STM32F103C8T6这款芯片做介绍。flash大小64K。本例子0x0800 0000~0x800 3000作为bootloader使用,0x0800 3000~0x0800 C000作为程序存放地址,0x0800 C000~0x0800 FFFF作为本例子的数据存放区域。 程序: #include stm32f10x_flash.h #define PageSize 1024 u32 data = {1,2,3,4,5,6,7,8,9,10}; u32 data_t
[单片机]
<font color='red'>STM32</font>读写flash保存用户数据
STM32学习之路-外部中断(1)
所有的GPIO口都有外部中断的能力,为了使用外部中断线,端口必须设置成输入模式. 输入模式有三种:上拉、下拉、浮空 请看图: 上拉输入模式:区别在于没有输入信号的时候默认输入高电平 下拉输入模式:区别在于没有输入信号的时候默认输入低电平 对于浮空输入模式顾名思义也就是输入什么信号才是什么信号,对于浮空输入要保证有明确的输入信号 例子: (板子:奋斗V5) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉 GPIO_Init(GPIOC, &GPIO_InitSt
[单片机]
<font color='red'>STM32</font>学习之路-外部中断(1)
STM32最小系统硬件是怎么组成的?
0组成:电源 复位 时钟 调试接口 启动 1、电源 :一般3.3V LDO供电 加多个0.01uf去耦电容 2、复位:有三种复位方式:上电复位、手动复位、程序自动复位 通常低电平复位:(51单片机高电平复位,电容电阻位置调换) 上电复位,在上电瞬间,电容充电,RESET出现短暂的低电平,该低电平持续时间由电阻和电容共同决定,计算方式如下:t = 1.1RC(固定计算公式) 1.1*10K*0.1uF=1.1ms 需求的复位信号持续时间约在1ms左右。 手动复位:按键按下时,RESET和地导通,从而产生一个低电平,实现复位。 编辑 3、时钟 :晶振+起振电容 +(反馈电阻MΩ级) 如使用内部时钟: 1)对于大于100脚或144脚的产
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved