嵌入式系统应用技术STM32.docx
- 文档编号:17038856
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:28
- 大小:1.09MB
嵌入式系统应用技术STM32.docx
《嵌入式系统应用技术STM32.docx》由会员分享,可在线阅读,更多相关《嵌入式系统应用技术STM32.docx(28页珍藏版)》请在冰点文库上搜索。
嵌入式系统应用技术STM32
嵌入式系统应用技术
课程设计
题目基于STM32嵌入式光敏红外遥感报警
系统的设计与实现
学生姓名专业班级
指导教师职称
所在单位
教学部主任
完成日期
1前言1
1.1课题研究背景1
1.2实验研究目的和意义 1
2.STM32F103实验平台介绍1
2.1硬件资源1
3详细设计6
3.1程序下载与调试6
3.1.1简介6
3.1.2硬件设计6
3.2跑马灯模块6
3.2.1跑马灯简介6
3.2.2硬件设计6
3.3蜂鸣器模块7
3.3.1蜂鸣器简介7
3.3.2硬件设计7
3.4串口通讯模块8
3.4.1串口通讯简介8
3.4.2硬件设计8
3.5ADC模块8
3.5.1ADC模块简介8
3.6.2硬件设计8
3.6光敏传感器模块9
3.6.1光敏传感器简介9
3.7.2硬件设计9
3.6.3软件设计10
3.6.4设计效果10
3.7红外遥控模块11
3.7.1红外遥控简介11
3.7.2硬件设计11
3.7.3软件设计12
3.7.4设计效果13
参考文献15
附录部分代码16
1前言
1.1课题研究背景
上世纪八十年代初,日本率先在电视产品中使用了红外遥控技术,使用集成发射芯片来实现遥控码的发射,如东芝TC9012,飞利浦SAA3010等,它的主要特点是遥控器内预置固定编码,一只遥控器只能控制单一型号的电器。
随着电子技术的发展,家用电器越来越普遍,人们希望以一只遥控器遥控所有家用电器,多用遥控器产生了。
它的主要特点是:
遥控器内预置多套编码,可供用户选择。
如今,随着嵌入式的广泛应用,部分厂商推出了具备红外学习的遥控器,它的主要特点是:
遥控器内置一个动态编码库,具备红外学习功能,可由用户自主录入编码。
红外遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点。
同时,由于红外遥控器件,工作电压低,功耗小,外围电路简单,因此,在日常生活中广泛应用,如彩电,录像机,音响空调,风扇,等其它的小型电器上。
遥控距离在几米到十几米。
在现代工业中已经广泛的使用,在高压,辐射,有毒气体,粉尘等环境下才用红外线遥控不仅安全可靠还可以有效的隔离干扰。
红外线遥控的特点是不影响周围环境,不干扰其他设备。
1.2实验研究目的和意义
随着科学技术的进步,光谱信息成像化,雷达成像多极化,光学探测多向化,地学分析智能化,环境研究动态化以及资源研究定量化,大大提高了遥感技术的实时性和运行性,使其向多尺度、多频率、全天候、高精度和高效快速的目标发展,例如在水质监测、裸土湿度、遥感考古、赤潮遥感监等等,这些技术的发展极大地促进了生产生活的进步。
通过对具备红外学习功能的遥控器进行市场调查,国内红外遥控编码学习技术虽比较成熟,但产品化程度较低,市场推广不够,主要原因在于设计者对用户需求的调查不够全面,以致产品不够实用,性价比较低。
从用户操作方便实用的角度出发,本文自主设计具备红外学习、彩屏虛拟遥控界面借此促进红外遥控学习技术在国内市场的产品化推广。
使用红外线遥控器也越来越频繁。
因为各种红外线遥控编码的不同。
使着各种红外线遥控器不能兼容。
经常需要更换遥控器,这也给人们的生活带来不便。
单片的机迅速发展,使这一问题得到了很好的改善。
2.STM32F103实验平台介绍
2.1硬件资源
1)MCU
它拥有的资源包括:
64KBSRAM、512KBFLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器(共12个通道)、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口、1个FSMC接口以及112个通用IO口。
该芯片的配置十分强悍,并且还带外部总线(FSMC)可以用来外扩SRAM和连接LCD等,通过FSMC驱动LCD,可以显著提高LCD的刷屏速度,是STM32F1家族常用型号里面,最高配置的芯片
2)引出IO口
图2.1.1引出IO口
图中P1P2为MCU主IO引出口,这两组排针共引出了106个IO口,STM32F103ZET6总共有112个IO,除去RTC晶振占用的2个,还剩110个,这两组主引出排针,总共引出了106个IO,剩下的4个IO口分别通过:
P3(PA9&PA10)和P5(PA2&PA3)这2组排针引出。
3)USB串口/串口1选择接口
USB串口和STM32F103ZET6的串口是通过P3连接起来的,如图所示:
图2.1.2USB串口/串口1选择接口
图中TXD/RXD是相对CH340G来说的,也就是USB串口的发送和接收引脚。
而USART1_RX和USART1_TX则是相对于STM32F103ZET6来说的。
这样,通过对接,就可以实现USB串口和STM32F103ZET6的串口通信了。
同时,P3是PA9和PA10的引出口。
4)JTAG/SWDJTAG/SWD
标准20针JTAG/SWD接口电路如图所示:
图2.1.3JTAG/SWD
5)LCD模块接口
LCD模块接口电路如图所示:
图2.1.4LCD模块接口
图中的T_MISO/T_MOSI/T_PEN/T_SCK/T_CS连接在MCU的PB2/PF9/PF10/PB1/PF11上,这些信号用来实现对液晶触摸屏的控制(支持电阻屏和电容屏)。
LCD_BL连接在MCU的PB0上,用于控制LCD的背光。
液晶复位信号RESET则是直接连接在开发板的复位按钮上,和MCU共用一个复位电路。
6)复位电路
复位电路如图所示:
图2.1.5复位电路
因为STM32是低电平复位的,所以我们设计的电路也是低电平复位的,这里的R2和C10构成了上电复位电路。
同时,开发板把TFT_LCD的复位引脚也接在RESET上,这样这个复位按钮不仅可以用来复位MCU,还可以复位LCD。
7)启动模式设置接口
启动模式设置端口电路如图所示:
图2.1.6启动模式设置接口
一般情况下如果我们想用用串口下载代码,则必须配置BOOT0为1,BOOT1
为0,而如果想让STM32一按复位键就开始跑代码,则需要配置BOOT0为0,BOOT1随便设置都可以。
8)光敏传感器
一个光敏传感器,可以用来感应周围光线的变化,该部分电路如图所示:
图2.1.7光敏传感器电路
图中的LS1就是光敏传感器,其实就是一个光敏二极管,周围环境越亮,电流越大,反之电流越小,即可等效为一个电阻,环境越亮阻值越小,反之越大,从而通过读取LIGHT_SENSOR的电压,即可知道周围环境光线强弱。
LIGHT_SENSOR连接在MCU的ADC3_IN6(ADC3通道6)上面,即PF8引脚。
2.2软件资源及开发环境
MDK源自德国的KEIL公司,是RealViewMDK的简称。
在全球MDK被超过10万的嵌入式开发工程师使用。
目前最新版本为:
MDK5.14,该版本使用uVision5IDE集成开发环境,是目前针对ARM处理器,尤其是CortexM内核处理器的最佳开发工具。
MDK5向后兼容MDK4和MDK3等,以前的项目同样可以在MDK5上进行开发(但是头文
件方面得全部自己添加),MDK5同时加强了针对Cortex-M微控制器开发的支持,并且对传统的开发模式和界面进行升级,MDK5由两个部分组成:
MDKCore和SoftwarePacks。
其中,SoftwarePacks可以独立于工具链进行新芯片支持和中间库的升级。
SoftwarePacks(包安装器)又分为:
Device(芯片支持),CMSIS(ARMCortex微控制器软件接口标准)和Mdidleware(中间库)三个小部分。
3详细设计
3.1程序下载与调试
3.1.1简介
MDK的一个强大的功能就是提供软件仿真,通过软件仿真,我们可以发现很多将要出现的问题,避免了下载到STM32里面来查这些错误,这样最大的好处是能很方便的检查在的问题,因为在MDK的仿真下面,你可以查看很多硬件相关的寄存器,通过观察这些寄存器,你可以知道代码是不是真正有效。
另外一个优点是不必频繁的刷机,从而延长了STM32的FLASH寿命(STM32的FLASH寿命≥1W次)。
程序下载有多种方法:
USB、串口、JTAG、SWD等,这几种方式,都可以用来给STM32下载代码。
不过,我们最常用的,最经济的,就是通过串口给STM32下载代码。
串口只能下载代码,并不能实时跟踪调试,而利用调试工具,比如JLINK、ULINK、STLINK等就可以实时跟踪程序。
3.1.2硬件设计
1)串口
2)flymcu软件
3.2跑马灯模块
3.2.1跑马灯简介
LED灯逐个闪亮,voidLED_Init(void),该函数的功能就是用来实现配置PB5
和PE5为推挽输出。
这里需要注意的是:
在配置STM32外设的时候,任何时候都要先使能该外设的时钟。
GPIO是挂载在APB2总线上的外设,在固件库中对挂载在APB2总线上的外设时钟使能是通过函数RCC_APB2PeriphClockCmd()来实现的。
PB5输出高低电平从而控制LED0,也可以固件库操作和寄存器操作来实现IO口操作。
3.2.2硬件设计
1)指示灯DSO
DS0接PB5,DS1接PE5。
其连接原理图如图下所示:
图3.2.1LED与STM32F1连接原理图
3.3蜂鸣器模块
3.3.1蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣
器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
3.3.2硬件设计
1)指示灯DS0
2)蜂鸣器
蜂鸣器在硬件上也是直接连接好了的,蜂鸣器的驱动信号连接在STM32的PB8上。
如图所示:
图3.3.1蜂鸣器与STM32连接原理图
3.4串口通讯模块
3.4.1串口通讯简介
串口作为MCU的重要外部接口,同时也是软件开发重要的调试手段,STM32的串口资源相当丰富的,功能也相当强劲。
ALIENTEK精英STM32开发板所使用的STM32F103ZET6最多可提供5路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持LIN、支持调制解调器操作、智能卡协议和IrDASIRENDEC规范、具有DMA。
3.4.2硬件设计
1)指示灯DS0
2)串口1
用到的串口1与USB串口并没有在PCB上连接在一起,需要通过跳线帽来连接一下。
这里我们把P6的RXD和TXD用跳线帽与PA9和PA10连接起来。
如图所示:
图3.5.1硬件连接图示意图
3.5ADC模块
3.5.1ADC模块简介
STM32拥有1~3个ADC(STM32F101/102系列只有1个ADC),这些ADC可以独立使用,也可以使用双重模式(提高采样率)。
STM32的ADC是12位逐次逼近型的模拟数字转换器。
它有18个通道,可测量16个外部和2个内部信号源。
各通道的A/D转换可以单次、连续、扫描或间断模式执行。
ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
3.6.2硬件设计
1)指示灯DS0
2)TFTLCD模块
3)ADCADC属于STM32F1内部资源。
4)杜邦线
3.6光敏传感器模块
3.6.1光敏传感器简介
精英STM32F103板载了一个光敏二极管(光敏电阻),作为光敏传感器,它对光的变化非
常敏感。
光敏二极管也叫光电二极管。
光敏二极管与半导体二极管在结构上是类似的,其管芯是
一个具有光敏特征的PN结,具有单向导电性,因此工作时需加上反向电压。
无光照时,有很
小的饱和反向漏电流,即暗电流,此时光敏二极管截止。
当受到光照时,饱和反向漏电流大大增
加,形成光电流,它随入射光强度的变化而变化。
当光线照射PN结时,可以使PN结中产生电
子一空穴对,使少数载流子的密度增加。
这些载流子在反向电压下漂移,使反向电流增加。
因
此可以利用光照强弱来改变电路中的电流。
利用这个电流变化,我们串接一个电阻,就可以转换成电压的变化,从而通过ADC读取
电压值,判断外部光线的强弱。
3.7.2硬件设计
1)指示灯DS0
2)蜂鸣器
3)TFTLCD模块
4)ADC
5)光敏传感器
光敏传感器与STM32F1的连接如图所示:
图3.6.1光敏传感器与STM32F1连接示意图
3.6.3软件设计
voidLsens_Init(void)函数进行初始化光敏传感器,使能PORTF时钟,是初始化PF8为模拟输入,然后通过Adc3_Init函数初始化ADC3。
Lsens_Get_Val(void)函数用于获取当前光照强度,该函数通过Get_Adc3得到ADC3_CH6转换的电压值,经过简单量化后,处理成0~100的光强值。
0对应最暗,100对应最亮。
voidLED_Init(void)函数进行使能PB,PE端口时钟,LED0-->PB.5推挽输出,根据设定参数初始化DPIOD.5。
voidBEEP_Init(void)函数进行使能GPIOB端口时钟,BEEP-->GPIOB.8端口配置
推挽输出,速度为50MHz根据参数初始化GPIOB.8。
intmain(void)主函数进行延时函数的初始化设置中断优先级分组为组2,将串口初始化为115200。
初始化与LED连接的硬件接口,初始化LCD,初始化光敏传感器。
设置显示提示信息字体为红色,光照值设置字体为蓝色。
然后进入死循环,通过Lsens_Get_Val获取光敏传感器得到的光强值(0~100),并显示在TFTLCD上面。
以上详细代码请见代码部分。
3.6.4设计效果
在代码编译成功之后,我们通过下载代码到开发板上,可以看到LCD显示如图所示:
图3.6.2光敏传感器实验测试图
图3.6.3光敏传感器实验测试图
当LSENS_VAL值小于50时,只有DS0不停闪烁,DS1不亮,当LSENS_VAL值大于50时,DS0的不停闪烁,DS1常亮。
3.7红外遥控模块
3.7.1红外遥控简介
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。
由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。
这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。
由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。
3.7.2硬件设计
本实验采用定时器的输入捕获功能实现红外解码,本章实验功能简介:
开机在LCD上显示一些信息之后,即进入等待红外触发,如过接收到正确的红外信号,则解码,并在LCD上显示键值和所代表的意义,以及按键次数等信息。
同样我们也是用LED0来指示程序正在运行。
所要用到的硬件资源如下:
1)指示灯DS0
2)TFTLCD模块
3)红外接收头
4)红外遥控器
前两个,在之前的实例已经介绍过了,遥控器属于外部器件,遥控接收头在板子,与MCU的连接原理图如3.7.1所示:
3.7.1红外遥控接收头与STM32的连接电路图
3.7.3软件设计
代码包含3个函数,首先是Remote_Init函数,该函数用于初始化IO口,并配置TIM4_CH4为输入捕获,并设置其相关参数,这里的配置跟输入捕获实验的配置基本接近。
TIM4_IRQHandler函数是TIM4的中断服务函数,在该函数里面,实现对红外信号的高电平脉冲的捕获,同时根据我们之前简介的协议内容来解码,该函数用到几个全局变量,用于辅助解码,并存储解码结果。
首先输入捕获设置的是捕获上升沿,在上升沿捕获到以后,立即设置输入捕获模式为捕获下降沿(以便捕获本次高电平),然后,清零定时器的计数器值,并标记捕获到上升沿。
当下降沿到来时,再次进入捕获中断服务函数,立即更改输入捕获模式为捕获上升沿(以便捕获下一次高电平),然后处理此次捕获到的高电平。
最后是Remote_Scan函数,该函用来扫描解码结果,相当于按键扫描,输入捕获解码的红外数据,通过该函数传送给其他程序。
接下来打开remote.h,该文件代码比较简单,宏定义的标识符REMOTE_ID是开发板配套的遥控器的识别码。
以上详细代码请见代码部分。
3.7.4设计效果
在代码编译成功之后,我们通过下载代码到开发板上,可以看到LCD显示如图所示:
图3.7.2红外遥感实验测试图
图3.7.2红外遥感实验测试图
在代码编译成功之后,我们通过下载代码到ALIENTEK精英STM32F103上,可以看到LCD显示如图所示的内容,此时我们通过遥控器按下不同的按键,则可以看到LCD上显示了不同按键的键值以及按键次数和对应的遥控器上的符号。
在按下“1”的时候蜂鸣器发出声音,按下“2”时蜂鸣器停止鸣叫。
总结
通过两周的课程设计让我对嵌入式的界面设计和编程有了初步的了解,同时初步掌握了嵌入式的命令的操作,在刚开始的时候,对整个实验的流程一点概念都没有,虽然之前有接触过嵌入式的理论课程,但是真正意义上的理解和实践还是不够夯实。
经过这次的实训,我真真确确的感受到了计算机在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。
当然,在学习的过程中并不是- -帆风顺的,在这之中,因为要操作的东西很多,有时错一步,后面的结果就无法显示,而自己的计算机水平还有待提高,根本检查不出来是哪里出了错这时候。
在平时我们就需要好好的查阅书籍或者上网搜集相关资料去解决问题。
此次实训最大的收获不是我学习到了多少知识而是这几天实训给我的感悟:
首先是心态。
一定要有一个积极的心态,独立解决问题的意识,培养扎实基础的认识。
不要什么东西都感觉跟简单就不去做了或者不屑一做,以至于习惯性网上搜搜就可以了,这样很不好。
有自己的东西有自己的付出才会有程序运行成功时的喜悦和小自豪,这样也有助于培养自己的兴趣。
通过本次课程设计,将课本上的理论知识和实际应用有机结合起来,培养了我又动脑,又动手,独立思考分析问题的能力,提高了我运用所学知识解决实际问题的综合素质。
通过本次课程设计我明白了只有不断的努力,不断的学习,才能在将来遇到的问题中能够游刃有余,才能够不会捉襟见肘。
参考文献
[1]陈鑫.《嵌入式软件技术的现状与发展动向[M]》.北京:
软件世界.2001
[2]彭舰.陈良银.《嵌入式系统设计》.重庆:
重庆大学出版社.2012
[3]张洪涛.连明.张一文.《物联网关键技术及系统应用》.北京:
机械工业出版社.2012
[4]田泽.《嵌入式系统开发与应用实验教程[M]》.北京:
北京航空航天大学出版社.2004
[5]田泽.《嵌入式系统开发与应用[M]》.北京:
北京航空航天大学出版社.2005
附录部分代码
1)光敏传感器
#include"lsens.h"
#include"delay.h"
#include"led.h"
//初始化光敏传感器
voidLsens_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);//使能PORTF时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//PF8anolog输入
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入引脚
GPIO_Init(GPIOF,&GPIO_InitStructure);
Adc3_Init();
}
//读取LightSens的值
//0~100:
0,最暗;100,最亮
u8Lsens_Get_Val(void)
{
u32temp_val=0;
u8t;
for(t=0;t { temp_val+=Get_Adc3(LSENS_ADC_CHX);//读取ADC值 delay_ms(5); } temp_val/=LSENS_READ_TIMES;//得到平均值 if(temp_val>4000)temp_val=4000; return(u8)(100-(temp_val/40)); } u8PanDuan(u8adcx){ if(adcx<50){ LED1=1; }elseif(adcx>50){ LED1=0; } return0; } 2)红外遥控传感器 #include"remote.h" #include"delay.h" #include"usart.h" //红外遥控初始化 //设置IO以及定时器4的输入捕获 voidRemote_Init(void) { GPIO_InitTypeDefGPIO_InitStructure; NVIC_InitTypeDefNVIC_InitStructure; TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_ICInitTypeDefTIM_ICInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PORTB时钟 RCC_APB1PeriphClockCmd(RCC_APB1Pe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 应用技术 STM32
![提示](https://static.bingdoc.com/images/bang_tan.gif)