基于STM32的学习型通用红外遥控设备的设计实现(三)

3.1 红外脉宽存储及FLASH的读写

根据STM32型号的不同,FLASH容量由16K到1024K不等。

FLASH模块主要由三部分组成:主存储器、信息块、闪存存储器接口寄存器。模块组织见《STM32中文参考手册》小节《2.3.3 嵌入式闪存》。

主存储器用来存放代码和数据常数,对于大容量产品,划分为256页,每页2K字节;中小容量产品每页则是1K。信息块的启动程序代码用来存储ST自带的启动程序,用于串口下载,用户选择字节一般用来配置写保护、读保护。闪存存储器接口寄存器是整个闪存模块的控制机构,控制闪存的读写。

FLASH可以在通用地址空间直接寻址,任意32位数据的读操作都能访问FLASH内容,得到相应数据。FLASH的最快访问速度≤24MHz,如果CPU频率超过24MHz,必须加入等待时间。对于72MHz的主频,FLASH的等待周期必须设置为2。

FLASH的编程和擦除。STM32的FLASH编程由FPEC模块操作,在系统复位后,FPEC模块会被保护起来,不能写入。只有写入特定的序列到FLASH_KEYR寄存器打开FPEC模块解除写保护后才能操作相关寄存器。

注意:STM32闪存编程每次必须写入16位的数据,且要求写入地址的FLASH已经擦出,否则写入无效。

在指定地址写入指定个数的数据,操作流程图如下图所示:

程序代码如下: 

见附件

使用硬件仿真功能测试数据的读写是否正确。在Debug模式下,单步执行写数据函数FLASH_WriteData()和读数据函数FLASH_ReadData(),写入和读出的数据如下图所示:

3.2 中断方式实现的学习按键

学习按键的程序用外部中断的中断线2实现,代码如下:

见附件

3.3 红外信号的调制发送

由于学习是对红外脉冲的完整复制,故发送只需把FLASH里的红外数据取出调制到载波上发送出去即可,实现流程图如下图所示:

 程序代码如下:

/********************************************************************
* Function Name  : SendPort_Init(void)
* Function       : 红外发送端口控制初始化
* parameter      :
* Description    : void
* Return         : void
*********************************************************************/
void SendPort_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	/* 使能PD端口时钟 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	/* 使能PD端口配置 */
	GPIO_InitStructure.GPIO_Pin	= GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3;  //LED0-->PF6~~~PF10 端口配置
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	GPIO_SetBits(GPIOC, GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2);	 // PD0~~~PD2输出高
	GPIO_ResetBits(GPIOD, GPIO_Pin_3);	// 注意!!!!!!!!!!!!
}

/*****************************************
--	示波器接收的键码  52:  0101 0010
--  单片机接收的键码  4A:  0100 1010
--		  发送的键码  4A:  0100 1010
--  验证平台: 长虹电视机、单片机
	验证通过: 电视机可接收
*****************************************/
u16 sendCode[200] = {0};
void IR_SendData(u32 SendAddr)
{
	u8 i;
//	u16 sendCode[200] = {0};
//---------- 已通过验证
//	for(i=0; i<199; i++){
//		sendCode[i] = PulseTab[i];
//	}
//---------- 已通过验证
	FLASH_ReadData(SendAddr,sendCode,200);	 // 从相应FLASH地址取出数据
	for(i=0; i<100; i++){
		if((sendCode[2*i]!=0) && (sendCode[2*i+1]!=0)){
			IR_SEND = 0;
			delay_us(sendCode[2*i]);
			IR_SEND = 1;
			delay_us(sendCode[2*i+1]);
		}
	}
//	IR_SEND = 0;
//	/* 下面两句及其重要,否则出错!!! */
//	delay_us(555);
	IR_SEND = 1;
}

仿真如下图所示:

3.4 TFT显示模块

TFT是Thin
Film Transistor(薄膜场效应晶体管)的简称,这种液晶显示器上的每一像素点都由集成在后面的薄膜场效应晶体管驱动。故而这种显示器速度快、亮度高、对比度高,分辨率也较其他类型的液晶显示器高。

TFT液晶的驱动时序如下图所示:

3.5 整个系统

整个系统的效果图如下图:

整个系统完整的程序见附件(为减小文件,删除了一些编译时产生的文件,故工程需要重新编译)

时间: 2024-10-18 16:37:53

基于STM32的学习型通用红外遥控设备的设计实现(三)的相关文章

基于STC12系列单片机的通用红外遥控信号分析程序(一)

前言 最近学51单片机学习到红外遥控解码与发送部分,开发板的相关教程只有NEC协议的解码,基本的解码套路是1838接收头输出管脚接单片机外部中断0,当接收到红外信号时产生下降沿触发中断,在中断函数中先延时9ms判断电平再延时4.5ms判断电平,从而跳过引导码:再分别延时560us.1690us左右不等的时间判断电平来解码“0”或“1”,直到结束:红外发送思路就是根据NEC协议及红外码值的二进制码分别控制高低电平,并延时相应的时间.但存在这么几个问题: 1. 解码逻辑写死在中断处理函数中,不方便扩

【无人驾驶技术揭秘】从机器学习角度揭秘学习型避障小车的设计思路

FF91于2017年1月4日在美国拉斯维加斯成功首发,拉开了互联网生态电动汽车的序幕.自动泊车使得停车也成为了一种享受,新手司机再也不用担心该如何见缝插针了.但是如果在车水马龙的繁忙环境下,无人驾驶还能得心应手吗? 项目综述 整个项目由三个部分组成: 1. 训练场设计 包括:随机障碍,固定障碍,边界碰撞检测 2. 汽车模型 包括:传感器,规则学习 3. 学习的算法 包括:基于表的算法和基于神经网络的算法 阅读全文:http://click.aliyun.com/m/9407/

[原创]基于51单片机的红外遥控课程设计

[注]: 一眨眼,大学接近尾声,具有找工作需要,所以把大学做的电子设计“劣作”放上来.希望考研失意,还能赶上“好工作”的春招班车.如果大伙有什么工作推荐也可以联系我哦,因为一年考研少接触了这方面,所以难免有些生疏.但请相信我!给我机会我会很认真学的! 邮箱:[email protected] 转载请注明出处呀! 基于51单片机的红外遥控课程设计 目录 第一章 设计简介... 3 第二章 系统方案... 3 一.设计方案对比... 3 二.方案设计... 4 第三章 硬件设计... 5 一.红外遥

基于STM32的USB枚举过程学习笔记

源:基于STM32的USB枚举过程学习笔记 基于STM32的USB枚举过程学习笔记(一) 基于STM32的USB枚举过程学习笔记(二) 基于STM32的USB枚举过程学习笔记(三) 基于STM32的USB枚举过程学习笔记(四) 基于STM32的USB枚举过程学习笔记(五)

(转) 深度增强学习与通用人工智能

深度增强学习前沿算法思想 CSDN 作者: Flood Sung 2017-02-16 09:34:29 举报 阅读数:3361 作者: Flood Sung,CSDN博主,人工智能方向研究生,专注于深度学习,增强学习与机器人的研究. 责编:何永灿,欢迎人工智能领域技术投稿.约稿.给文章纠错,请发送邮件至[email protected]本文为<程序员>原创文章,未经允许不得转载,更多精彩文章请订阅2017年<程序员>? 2016年AlphaGo计算机围棋系统战胜顶尖职业棋手李世石

基于STM32的RFID射频识别技术 韦根协议C语言驱动解码程序

RFID工作原理 RFID技术的基本工作原理并不复杂:标签进入磁场后,接收解读器发出的射频信号,凭借感应电流所获得的能量发送出存储在芯片中的产品信息(无源标签或被动标签),或者由标签主动发送某一频率的信号(Active Tag,有源标签或主动标签),解读器读取信息并解码后,送至中央信息系统进行有关数据处理. 一套完整的RFID系统, 是由阅读器与电子标签也就是所谓的应答器及应用软件系统三个部份所组成,其工作原理是Reader发射一特定频率的无线电波能量,用以驱动电路将内部的数据送出,此时Read

打造持续学习型组织

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/continuous-learning-organization 软件开发通常被认为是知识密集型活动,因此各个组织都会寻求能够促进持续学习的手段与方式.Marcin Floryan认为"我们需要学习型组织,并且从个体学习开始".不过,个体学习有时会很困难,大规模的个体学习变得更加富有挑战.那么,如何才能打造持续学习型组织呢? 在Lean Kanban Cent

基于短消息的远程家电红外遥控系统

通过远程广域网控制家电设备是信息家电的主要发展方向之一.由于价格低廉.覆盖面广.使用方便等原因,短消息平台已经成为远程家电控制的重要方法. 本文研究和开发了一种基于短消息的远程红外遥控系统.该系统以Java语言应用程序作为客户控制终端,以短消息作为控制信号的传输平台,以家电常用的红外遥控器作为控制设备,形成了比较完备的远程家电控制系统原型. 本文首先分析了广域网传输技术.家电控制设备.客户控制终端等三个关键技术的选型问题,并据此提出了系统设计的总体结构. 随后,本文介绍了系统的硬件设计,着重讨论

毕业设计——基于STM32的音乐播放器设计(一)

基于STM32的音乐播放器设计, 源代码下载地址:http://download.csdn.net/detail/cxp2205455256/8334021      SD卡文件下载地址:http://download.csdn.net/detail/cxp2205455256/8334089 电路图下载地址:文件太大了,上传不了....... 以下是截图: 1.硬件电路 2.软件主界面 3.音乐播放器界面 4.音乐定时播放界面 5.音乐列表界面 6.日历功能界面 9.温度功能界面 10.计算器