视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
钥匙搜寻器课程设计
2025-09-25 17:58:18 责编:小OO
文档
目   录

摘要                                                                       

1 STM32的概述                                                         

1.1 STM32F10系列                                              

1.2 STM32F10x重要参数                                           

     1.3 STM32架构的优势                                         

2 无线收发器NRF24L01的介绍                                                   

    

     2.1性能参数                                                    

2.2原理图                                                    

     2.3引脚定义                                               

3程序设计                                                    

     3.1发送模块程序设计                                     

3.2接受模块程序设计                                       

4原理图设计                                                    

     4.1发送模块原理图                                        

     4.2接受模块原理图                                         

     4.3总设计原理图                                          

5

参考文献 

摘要:

忘性比记性好的你是不是会经常钥匙不知道丢到了哪里?

爱丢三落四的老婆是不是经常让你帮忙找钥匙找到心烦?……

找呀找~找呀找!钥匙不见了,可能是家门钥匙、办公室钥匙、抽屉钥匙……为什么钥匙总不见?钥匙寻找器一定会帮到你的大忙,这款外观设计雅致, 在钥匙那里安装一个无线接收器(射频),在搜寻器那里安装发射器(射频),如果接收器接收到信号就,蜂鸣器开始工作。这样就可以找到钥匙。解决找不到钥匙的烦恼。使用简单,随时可找到钥匙,再也不用为找不到钥匙而发愁了。当然,除了钥匙你也可使用在任何生活物品上,一按就找到。

关键词:钥匙    搜寻器   蜂鸣器

1 STM32的概述

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。

1.1 STM32F10系列

简介

  ARM公司的高性能”Cortex-M3”内核 

  1.25DMips/MHz,而ARM7TDMI只有0.95DMips/MHz 

  一流的外设 

  1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻转速度 

  低功耗   

在72MHz时消耗36mA(所有外设处于工作状态),待机时下降到2μA 

  最大的集成度 

  复位电路、低电压检测、调压器、精确的RC振荡器等 

  简单的结构和易用的工具 

1.2 STM32F10x重要参数

  2V-3.6V供电 

  容忍5V的I/O管脚 

  优异的安全时钟模式 

  带唤醒功能的低功耗模式 

  内部RC振荡器 

  内嵌复位电路 

  工作温度范围: 

  -40°C至+85°C或105°C

1.3 STM32架构的优势

  除新增的功能强化型外设接口外,STM32互连系列还提供与其它STM32微控制器相同的标准接口,这种外设共用性提升了整个产品家族的应用灵活性,使开发人员可以在多个设计中重复使用同一个软件。新STM32的标准外设包括10个定时器、两个12位1-Msample/s 模数转换器 (交错模式下2-Msample/s)、两个12位数模转换器、两个I2C接口、五个USART接口和三个SPI端口。新产品外设共有12条DMA通道,还有一个CRC计算单元,像其它STM32微控制器一样,支持96位唯一标识码。

2 无线收发器NRF24L01的介绍

nRF24L01是由NORDIC[1]生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设置可以通过SPI 接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。 

  极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。 

2.1性能参数

  ◆ 小体积,QFN20 4x4mm封装  

  ◆ 宽电压工作范围,1.9V~3.6V,输入引脚可承受5V电压输入  

  ◆ 工作温度范围,-40℃~+80℃  

  ◆ 工作频率范围,2.400GHz~2.525GHz  

  ◆ 发射功率可选择为0dBm、-6dBm、-12dBm和-18dBm 

  ◆ 数据传输速率支持1Mbps、2Mbps[2] 

  ◆ 低功耗设计,接收时工作电流12.3mA,0dBm功率发射时11.3mA,掉电模式时仅为900nA  

  ◆ 126个通讯通道,6个数据通道,满足多点通讯和调频需要  

  ◆ 增强型“ShockBurst”工作模式,硬件的CRC校验和点对多点的地址控制 

  ◆ 数据包每次可传输1~32Byte的数据 

  ◆ 4线SPI通讯端口,通讯速率最高可达8Mbps,适合与各种MCU连接,编程简单  

  ◆ 可通过软件设置工作频率、通讯地址、传输速率和数据包长度  

  ◆ MCU可通过IRQ引脚快判断是否完成数据接收和数据发送 

2.2原理图

电路原理

  nRF24L01原理图 

   

  2.3引脚定义

  nRF24L01引脚定义 

   

3.程序设计

发送的程序

#include "stm32f10x.h"

#include "stm32_eval.h"

#include "delay.h"           

#include "NRF24L01.h"

#include "spi.h"

#include "stdio.h"

//管脚PB7,PB8的初始化函数

void GPIO_KEY_Config(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

}

//发送信号函数,向接收端发送信号S,接收不成功则显示"请确认接收端是否正常"

u8 send_data(u8 data)

{

             TX_Mode();//将射频模块NRF24L01设置为发送模式;

        delay_ms(500);//延迟以等待接收设备有足够时间转换成接收模式

        printf("\\n\\r正在发送数据(数字化): ");

        

        if(NRF24L01_TxPacket(data)==TX_OK)    //进行发送

           {

            delay_ms(500);

            return 1;  

        }

        else                                     //若发送不成功,显示”请确认接收端是否正常“

         {                                               

            printf("\\n\\r请确认接收端是否正常");        

            delay_ms(500);

            return 0;        

        }               

}

//主函数

 int main(void)

{     

    GPIO_KEY_Config();//初始化管脚PB7;

    NRF24L01_Init();    //初始化射频模块NRF24L01;            

    while(NRF24L01_Check())//对射频模块进行检测,若射频模块NRF24L01线路连接出错,则显示"nRF24L01检测出错!请确认nRF24L01的连接!"

    {

        printf("nRF24L01检测出错!请确认nRF24L01的连接! \\n\\r");

        delay_ms(1000);

    }

    //进入死循环,不断查询按键是否被按下,若按下则发送信息's'给接收端;

   while(1)

   {  

      if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7))

      {

       send_data('o');

       delay_ms(100);

      }

      if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8))

      {

       send_data('s');

       delay_ms(100);

      }

   

   }

    

       return 0;

}

接收的程序

#include "stm32f10x.h"

#include "stm32_eval.h"

#include "delay.h"           

#include "NRF24L01.h"

#include "spi.h"

#include "stdio.h"

//蜂鸣器的初始化函数

void BEEP_config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

       /*使能蜂鸣器使用的GPIO时钟*/

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

       /*初始化蜂鸣器使用的GPIO管脚*/

      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

      GPIO_Init(GPIOA, &GPIO_InitStructure);

//主函数

 int main(void)

{     

    u8 receive_data;   //定义初始化接收数据变量;

    BEEP_config();//初始化蜂鸣器

    NRF24L01_Init();    //初始化射频模块NRF24L01            

    while(NRF24L01_Check())//对射频模块进行检测,若射频模块NRF24L01线路连接出错,则显示"nRF24L01检测出错!请确认nRF24L01的连接!"

    {

        printf("nRF24L01检测出错!请确认nRF24L01的连接! \\n\\r");

        delay_ms(1000);

    }

    //进入死循环,不断查询按键是否接收到数据,若接收到,则根据信息来令蜂鸣器开启或者关闭;

   while(1)

   {

      RX_Mode();  //将射频模块NRF24L01设置为接收模式,随时接收来自发送端的信息

      delay_ms(500);

         if(NRF24L01_RxPacket(receive_data)==0)//一旦接收到信息,则打印信息:"接收到数据".

                {

                         printf("\\n\\r接收到数据");

                        if(receive_data=='o')          //若接收到信息‘o’,则开启蜂鸣器

                        {

                         GPIO_SetBits(GPIOA, GPIO_Pin_12);    /*开启蜂鸣器*/

                        }

                        if(receive_data=='s')        //若接收到信息‘s’,则关闭蜂鸣器

                        {

                         GPIO_ResetBits(GPIOA, GPIO_Pin_12);    /*关闭蜂鸣器*/

                        }

                }

   }

    

       return 0;

}

4.原理图设计

                      发送模块原理图(上)

                

                       接收模块原理图(上)

                      

总设计原理图(上)

  

参考文献

[1]  邵贝贝.单片机嵌入式应用的在线开发方法.北京:清华大学出版社,2004年 

[2]  王兆安,黄俊.电力电子技术(第四版).机械工业出版社,2000年7月

[3]  胡汉才.单片机原理与接口技术.北京:清华大学出版社,1996年 

[4]  李朝青.单片机原理及接口技术.北京:北京航空航天大学出版社,1994年下载本文

显示全文
专题