精华内容
下载资源
问答
  • 22个STM32项目和一些STM32相关外设的编程教学资料,希望大家喜欢,网盘下载!
  • 资料链接 :stm32智能门锁.rar 哔哩哔哩项目展示视频:https://b23.tv/bxfxvd 一、项目背景 在消费升级渗透在各个领域的今天,国民消费发生着巨大的变化,与每个人息息相关的家居行业也是如此。现今,越来越多的...

    智能门锁

    资料链接 :智能门锁.rar

    百度网盘下载链接:https://pan.baidu.com/s/1jmrMfNDlkZ9denImJRwzOw
    提取码:abcd(2020年12月7日08:26:11)

    原理图清晰图片:智能门锁连接图.bmp

    哔哩哔哩项目展示视频:https://b23.tv/bxfxvd

    哔哩哔哩视频教程:https://www.bilibili.com/video/BV1Ah411y71E
    在这里插入图片描述

    取走记得点赞,谢谢各位。

    一、项目背景

    在消费升级渗透在各个领域的今天,国民消费发生着巨大的变化,与每个人息息相关的家居行业也是如此。现今,越来越多的智能家居产品出现在普通老百姓的生活中,智能照明、智能窗帘、智能扫地机器人等各种智能产品都给人们的生活带来了极大的便利。智能门锁作为智能家居中重要的一环,也成为消费者家居智能化的重要选择。智能相比市面的机械门锁更加安全、更智能、更人性化而得到市场的认可,在智能门锁行业里,不少世界500强企业也在智能门锁上进行产品布局,像中国小米公司就生产智能门锁,致力打造智慧家庭,市场智能门锁能够支持五种解锁方式,支持指纹、手机、门禁门、按键密码、钥匙解锁功能。可以说是智能家庭必不可少的成员。
    在这里插入图片描述

    二、项目功能要求

    1、可通过指纹模块增删查改家庭成员的指纹信息,增删查改是否成功的相关信息显示在OLED屏幕上
    2、在指纹匹配过程中,如果采集的指纹与指纹模块库相匹配,OLED显示匹配成功,并转动步进电机一圈
    3、可通过按键设定智能门锁密码,密码可设置为两个(密码六位),如果匹配两个中的一个成功,即可开锁,也可通过按键修改密码,所有的操作过程显示于OLED中
    4、实现RFID与手机解锁(蓝牙解锁)
    5、扩展:虚位密码解锁(虚位密码:自己百度)

    项目所用到的主要技术:
    1、IIC协议、SPI协议、串口协议
    2、外部flash驱动、SD卡驱动
    3、FTAFS文件系统
    4、RTC实时时钟

    三、元件准备

    1、步进电机(带驱动模块)
    型号:28BYJ4+ULN2003

    在这里插入图片描述

    2、4X4矩阵按键
    在这里插入图片描述
    3、指纹模块AS608(串口控制)在这里插入图片描述

    4、0.96寸OLED显示屏(IIC)
    型号:7针

    在这里插入图片描述

    5、蓝牙模块HC-05
    在这里插入图片描述

    6、主控芯片STM32F407ZGT6
    型号:普中最小系统板
    在这里插入图片描述
    7、RFID RC522 射频模块(带一张卡片)在这里插入图片描述
    8、杜邦线

    四、项目设计

    (一)原理图设计

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    (二)硬件设计

    根据原理图连接好硬件电路
    在这里插入图片描述

    (三)程序设计

    由于代码过长只展示部分代码:

    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    #include "sram.h"   
    #include "malloc.h" 
    #include "sdio_sdcard.h"    
    #include "malloc.h" 
    #include "w25qxx.h"    
    #include "ff.h"  
    #include "exfuns.h"    
    #include "fontupd.h"
    #include "text.h"	
    #include "oled.h"
    #include "beep.h"
    #include "button4_4.h"
    #include "AS608.h"
    #include "walkmotor.h"
    #include "usart2.h"
    #include "rtc.h"
    #include "MFRC522.h"
    #include "usart3.h"	
    #include "stmflash.h"
    
    #define usart2_baund  57600//串口2波特率,根据指纹模块波特率更改
    
    //要写入到STM32 FLASH的字符串数组
    const u8 TEXT_Buffer[]={0x17,0x23,0x6f,0x60,0,0};
    #define TEXT_LENTH sizeof(TEXT_Buffer)	 		  	//数组长度	
    #define SIZE TEXT_LENTH/4+((TEXT_LENTH%4)?1:0)
    #define FLASH_SAVE_ADDR  0X0802C124 	//设置FLASH 保存地址(必须为偶数,且所在扇区,要大于本代码所占用到的扇区.
    										//否则,写操作的时候,可能会导致擦除整个扇区,从而引起部分程序丢失.引起死机.
    
    SysPara AS608Para;//指纹模块AS608参数
    u16 ValidN;//模块内有效指纹个数
    u8** kbd_tbl;
    
    void Display_Data(void);//显示时间
    void Add_FR(void);	//录指纹
    void Del_FR(void);	//删除指纹
    int press_FR(void);//刷指纹
    void ShowErrMessage(u8 ensure);//显示确认码错误信息
    int password(void);//密码锁
    void SetPassworld(void);//修改密码
    void starting(void);//开机界面信息
    u8 MFRC522_lock(void);//刷卡解锁
    u8 Add_Rfid(void);		//录入
    void Set_Time(void);
    void Massige(void);
    u8 Pwd[7]="      ";  //解锁密码1
    u8 Pwd2[7]="      ";  //解锁密码2
    u8 cardid[6]={0,0,0,0,0,0};  //卡号1
    int Error;  //密码验证信息
    
    
    //数字的ASCII码
    uc8 numberascii[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    //显示缓冲区
    u8  dispnumber5buf[6];
    u8  dispnumber3buf[4];
    u8  dispnumber2buf[3];
    //MFRC522数据区
    u8  mfrc552pidbuf[18];
    u8  card_pydebuf[2];
    u8  card_numberbuf[5];
    u8  card_key0Abuf[6]={0xff,0xff,0xff,0xff,0xff,0xff};
    u8  card_writebuf[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    u8  card_readbuf[18];
    //SM05-S数据区
    u8  sm05cmdbuf[15]={14,128,0,22,5,0,0,0,4,1,157,16,0,0,21};
    //extern声明变量已在外部的C文件里定义,可以在主文件中使用
    extern u8  sm05receivebuf[16];	//在中断C文件里定义
    extern u8  sm05_OK;							//在中断C文件里定义
    
    u8 * week[7]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
    u8 * setup[7]={"1、录入指纹","2、删除指纹","3、修改密码","4、修改时间","5、录入卡片","6、查看信息"};
    
    int main(void)
    {
    	u16 set=0;
    	int key_num;
    	int time1;
    	int time2;		//锁屏时间
    	char arrow=0;  //箭头位子
    	
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
    	My_RTC_Init();		 		//初始化RTC
    	RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0);		//配置WAKE UP中断,1秒钟中断一次
    	delay_init(168);  //初始化延时函数
    	uart_init(115200);	//初始化串口1波特率为115200,用于支持USMART
    	uart3_init(9600);// 蓝牙初始化
    	usart2_init(usart2_baund);//初始化串口2,用于与指纹模块通讯
    	PS_StaGPIO_Init();	//初始化FR读状态引脚
    	LED_Init();					//初始化LED  
    //	BEEP_Init();    		//beep初始化
    	Button4_4_Init();//矩阵按键初始化
    	OLED_Init(); 			//oled初始化
    	W25QXX_Init();				//初始化W25Q128
    	
    	Walkmotor_Init(); //步进电机初始化
    	my_mem_init(SRAMIN);		//初始化内部内存池 
    	my_mem_init(SRAMCCM);		//初始化CCM内存池 
    	exfuns_init();				//为fatfs相关变量申请内存  
     	 f_mount(fs[0],"0:",1); 		//挂载SD卡 
     	f_mount(fs[1],"1:",1); 		//挂载FLASH.
    	starting();//开机信息  logo
    
    	STMFLASH_Read(0X08020004,(u32*)Pwd,2);	//读取密码1
    	STMFLASH_Read(0X08090004,(u32*)Pwd2,2); //读取密码2
    	STMFLASH_Read(0X080f0004,(u32*)cardid,1); //读取卡号1
    	 while(1)
    	 {
    //锁屏界面
    MAIN:
    			OLED_Show_Font(56,48,0);//显示锁图标
    			while(1)
    			{
    				time1++;
    				if((time1%200)==0)//时间显示:每50ms更新一次显示数据
    				{
    					Display_Data();
    				}
    				if((time1%1000)==0)//每200ms检测一次卡片,蓝牙数据
    				{
    					//MFRC522解锁
    					MFRC522_Initializtion();			
    					Error=MFRC522_lock();
    					if(Error==0)goto MENU;	
    					else 
    						OLED_Show_Font(56,48,0);//锁
    					//手机蓝牙解锁密码1
    					Error=usart3_cherk((char*)Pwd);         
    					if(Error==0){
    						OLED_Clear();
    						Show_Str(20,10,128,24,"解锁中...",24,0);	
    						Walkmotor_ON();
    						Show_Str(20,10,128,24,"已解锁!",24,0);
    						goto MENU;	
    					}
    					else 
    						OLED_Show_Font(56,48,0);//锁
    					//手机蓝牙解锁密码2
    					Error=usart3_cherk((char*)Pwd2);
    					if(Error==0){
    						OLED_Clear();
    						Show_Str(20,10,128,24,"解锁中...",24,0);	
    						Walkmotor_ON();
    						Show_Str(20,10,128,24,"已解锁!",24,0);
    						goto MENU;	
    					}
    					else 
    						OLED_Show_Font(56,48,0);//锁
    					
    				} 
    				//指纹解锁
    				if(PS_Sta)	 //检测PS_Sta状态,如果有手指按下
    				{
    						while(PS_Sta){
    						Error=press_FR();//刷指纹
    						if(Error==0)goto MENU;
    						else 
    							OLED_Show_Font(56,48,0);//锁
    					}
    				}
    				//密码锁
    				key_num=Button4_4_Scan();	//按键扫描
    				if(key_num!=-1)
    				{
    					Error=password();
    					if(Error==0)goto MENU;	
    					else 
    						OLED_Show_Font(56,48,0);//锁
    				}
    			}
    
    

    五、上机调试

    把硬件连接好之后还需要做一些准备工作:
    录入指纹:
    (1)程序下载之前需要给门禁一个解锁方式,门锁一共有4种解锁方式:指纹、蓝牙、卡片、密码。其中卡片需要录入过系统的才可以解锁,密码一开始保存在stm32内部flash中,内部flash做eeprom需要先初始化,解锁后在设置中更改密码或者在代码中进行初始化密码,不然密码是乱码。
    (2)串口录入指纹:将串口转TTL CH340模块连接好指纹模块,用配套上位机录入自己的一个指纹。详细连接方法参考指纹模块资料
    (3)解锁后就可以进行设置密码和录入卡片等操作在这里插入图片描述
    在这里插入图片描述
    移植汉字库:(如果没有SD卡接口可以自己汉字取模显示)
    (1)准备一个sd卡,一个读卡器,用来存储汉字库,显示到OLED
    (2)找到开发资料下的SYSTEM文件夹
    在这里插入图片描述
    (3)把SYSTEM文件夹复制到SD卡根目录下(一定要是根目录下)在这里插入图片描述
    (4)复制好之后吧SD卡插到开发板
    (5)下载程序到开发板启动,如果可以显示汉字说已经移植成功。(注意:开始的化作尘&指纹锁界面是显示的图片,并不是汉字字体)

    一般遇到的问题:

    如果进去只显示“化作尘指纹锁”然后黑屏,那么是字库的问题
    如果因为不知道密码进不去主界面,那么打开代码,将密码打印出来,然后就可以用密码解锁了,一共两个密码,任意一个都可以解锁:
    在这里插入图片描述
    因为没有考虑到字符不全是’0’- '9’的关系,密码打印出来不是数字,所以查看密码不成功

    正确打开方式
    步骤一:直接给密码赋值操作,然后编译下载,下载完成后输入密码“123456”是肯定可以进主界面的,然后点击修改密码,密码修改为你想要的密码“000111”,这个密码会保存到内部eeprom
    ,密码初始化就完成了

    1、在127行加入如下代码编译下载
    在这里插入图片描述
    2、输入密码“123456”解锁
    在这里插入图片描述
    3、进入解锁后界面,选择修改密码
    在这里插入图片描述
    密码修改为“123456”后保存,会保存到内部eeprom
    在这里插入图片描述

    步骤二:把刚刚写的代码注释,重新下载进去,代码就可以正常运行了,输入刚刚设置的密码“000111”就可以解锁

    在这里插入图片描述
    蓝牙调试
    1、首先下载“蓝牙串口”APP
    2、连接蓝牙后发送密码“123456::”

    蓝牙发送密码不解锁?

    1、可能是波特率不对
    ①可以通过AT指令修改蓝牙模块的波特率与单片机一样(9600),使得蓝牙模块能连接单片机(单片机代码初始化蓝牙模块的波特率一般为9600)
    ②可以用usb转ttl将蓝牙模块与电脑相连,打开串口助手后,用手机连接蓝牙发送数据,调节串口助手的波特率,接收到正常数据后记录波特率,这个就是蓝牙模块现在的波特率,随后将代码中初始化蓝牙模块的波特率改成这个波特率,单片机就可以正常与蓝牙模块通信
    2、可能是蓝牙模块接线不对,吧tx rx对调
    3、可能蓝牙模块已经损坏

    开机图片取模显示
    取模软件合集.rar
    1、先画一张黑白的128*64分辨率的 .bmp图片
    在这里插入图片描述
    2、打开Image2Lcd软件,先打开图片,按照如下配置,点击保存,会生成取模代码
    在这里插入图片描述

    六、知识扫盲

    (一)汉字的显示
    (具体代码参考正点原子“汉字显示实验”)

    1、汉字的显示原理

    1)学习过屏幕驱动的应该都知道,屏幕的显示无非就是在屏幕上打相应颜色的点,比如要显示一个字符 ‘A’ 那么我只需要知道 ‘A’ 相应的点阵数据就可以把它显示出来,汉字也一样。

    2、汉字库

    1)汉字库文件在正点原子的开发板资料->“SD卡根目录文件”中,可以到正点原子官网论坛下载
    在这里插入图片描述
    2)汉字库有两类文件,.FON与.BIN文件,.FON代表汉字库点阵文件,.BIN表示的是编码表,与点阵一一对应,比如GBK编码的第一个字就对应着点阵里的第一个点阵数据,映射关系如下:
    UNIGBK->GBK12.FON
    UNIGBK->GBK24.FON
    UNIGBK->GBK32.FON

    有兴趣可以百度一下查看GBK编码表:
    在这里插入图片描述

    2、汉字库的存储位置

    2)汉字与字符不同的是,汉字有1万多个,ASCII码字符却只有100多个,并且汉字的显示明显比字符的点阵复杂程度高,比如说字体是12的字符占用点阵是12x6,每个字符需要12x6/8=9个字节的存储空间。字体是12 的汉字占用12x12的点阵,每个汉字需要12x12/8=18个字节存储空间,这还是最小字体,大的字体所需要的存储空间只会成倍增加

    3)一般12号字体的汉字库需要500K字节、16号字体700K、24号字体1.6M、32号字体3M,这对于单片机来说数据量太大了,内部FLASH512K~1M表示压力很大
    在这里插入图片描述
    4)需要把汉字库保存到SD卡,再将SD卡中的汉字库数据保存到外部FILASH才行,w25q128无疑是个好选择,它拥有16M的存储空间,SPI通信协议,读写速度也是相当快。

    (二)把汉字库里的点阵数据读取出来显示到MCU屏

    1、数据编码格式的问题

    1)有关显示汉字就必然会涉及编码格式的问题,不同的编码格式对应的汉字编码是不同的,比如UTF-8编码的文件用GB2312编码打开就会乱码。
    同理,比如文档的格式是UTF-8编码,但是我的字库是GBK编码,读出来的数据直接显示到屏幕就必然会乱码

    2)所以显示汉字如果乱码首先需要检查的就是编辑器的编码,保证编码一致。

    七、项目图片展示

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    资料下载:https://download.csdn.net/download/mbs520/12662458
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • stm32项目模板

    2017-11-30 14:46:59
    stm32项目模板,让你快速上手stm32开发,解压后用keil5软件打开即可
  • 本文件为基于STM32 V3.5.0版本固件库,通过MDK5进行开发的STM32项目模板文件,项目以STM32F103ZET6开发板为例进行开发,通过本项目文件可以进行STM32的功能开发。
  • stm32_cubemx_sample:一个示例回购,以演示如何为STM32项目创建构建服务器
  • stm32_05_stm32项目选型图及案例

    stm32_05_stm32项目选型图及案例





























    展开全文
  • Keil5新建STM32项目

    2016-04-08 11:09:04
    Keil5新建STM32项目教程,内含最新全系了库下载链接,包括ucosIII等
  • IAR 下Stm32 项目的建立

    2013-07-25 15:39:18
    IAR 6.x ARM Stm32 项目的建立 使用STM32的库v3.5
  • 本文主要针对STM32项目中在USART、调试及编程中遇到的问题进行了描述并给出了相应的解决办法。
  • coocox创建stm32项目

    2018-04-11 13:55:14
    stm32环境下创建CooCox项目,采用STM32F103RCT6,编译通过
  • 一个示例仓库,演示了如何在STM32项目上进行持续集成。 该示例基于。 请按照的说明进行设置。 单击此处查看CircleCI上的最新构建结果和工件- 这是使用Travis CI的持续集成工具的另一个示例- 这个样本中有什么 ...
  • 在VSCODE中进行Keil stm32项目源代码编写的设置方法.此设置方法可以确保在VSCODE中编辑stm32 MDK项目源代码时,不会提示任何错误。自动补全非常的好用实用。
  • STM32项目快递存取柜

    2020-10-11 15:44:37
    快递存取柜项目是基于STM32实现的,所用模块如下: STM32F103ZE最小开发板 OV7670摄像头 GSM模块(sim900a) 16路PWM(PCF8574) 5个舵机(可增加) WIFI模块(ESP8266) MP3模块(VS1053) SD卡 触摸屏(R61509V)
  • 在keil5 新建stm32项目的时候很多人都在找最新3.5的外设库文件,因为需要手动添加到项目目录中 直接在这下载就好了,省的你去官网找了。我当初也是找了很久。这只是f10x的,如果需要别的留言,我再上传,目前用这个...

    在keil5 新建stm32项目的时候很多人都在找最新3.5的外设库文件,因为需要手动添加到项目目录中

    直接在这下载就好了,省的你去官网找了。我当初也是找了很久。这只是f10x的,如果需要别的留言,我再上传,目前用这个的最多,新手都是从这里开始。如果老手就知道去哪里找了。

    STM32F10x_StdPeriph_Lib_V3.5.0.zip: https://474b.com/file/20096151-465186549
    城通比百度省事,不算快,但是不用必须客户端

    展开全文
  • stm32项目按键控制pwm输出显示转速-按键控制pwm.rar
  • Visual Studio+VisualGDB+STM32CubeMX 开发 STM32F103ZET6项目模板,以HAL为底层驱动,包含STM32基本资源(GPIO、EXTI、USART)的封装。
  • STM32人体检测(体温、心率、心跳、跌倒检测)+zigbee 笔者前言 在闲鱼有缘结识的一个哥们,帮助做的基于STM32人体检测系统,我负责硬件程序开发设计,哥们负责客户端服务器微信程序的实现,人体检测系统要求将测得...

    STM32人体检测(体温、心率、心跳、跌倒检测)+zigbee

    笔者前言

    在闲鱼有缘结识的一个哥们,帮助做的基于STM32人体检测系统,我负责硬件程序开发设计,哥们负责客户端服务器微信程序的实现,人体检测系统要求将测得数据通过zigbee传输到坏境检测系统中。

    系统成品图

    在这里插入图片描述
    在这里插入图片描述

    模块选用

    • STM32f103c8t6

    • 0.96 oled IIC 模块

    • max30100心率血氧模块

    • mpu-6050模块

    • 人体温度模块 (某宝54元买的价格有点贵哈)
      在这里插入图片描述

    • zigbee转串口模块
      在这里插入图片描述
      接线
      在这里插入图片描述

    功能概述

    1.跌倒检测

    *速度瞬态变化
    人体加速度向量幅值SVM和微分加速度幅值的绝对平均值DSVM是区分人体运动状态的重要参量。SVM通过计算加速度幅度表征人体运动的剧烈程度,其值越大表明运动越剧烈。DSVM通过计算SVM的微分绝对值的时间平均表征人体运动状态变化的剧烈程度,其值越大表明运动状态变化越剧烈。其定义为:在动态坐标系下考察SVM和DSVM,可监测人体的运动强度和运动状态变化强度。
    在这里插入图片描述
    *姿态角判断
    利用三轴加速度和重力的关系,经过四元运算测量得到 俯仰角、横滚角、航向角
    在这里插入图片描述
    mpu6050驱动上位机测试
    在这里插入图片描述
    判定标准:

    1. SVM正常状态下值是17000左右,当将其加速晃动时,分析得到的安全加速度约在12000~22000之间(模拟测试值,仅供参考),当超出阈值时,5秒内都判定为异常,且板载蓝色LED灯亮。

    2. 三轴欧拉偏角大于 40°时 即异常
      人体体位的另一个重要特征就是身体的倾角,调查显示,人体处于直立状态时,躯干与重心方向的倾角小于60度;而人体处于水平状态时,倾角接近90度;人体在跌倒时,躯干从直立状态变为接近水平的状态。所以可以将人体倾角值是否大于60度来作为辅助判断跌倒的特征,倾角值可通过倾角传感器获得。
      在这里插入图片描述

    2.人体温度

    线性区间温度30—44度/电压2.127–1.193V
    在这里插入图片描述
    获取温度流程:

    1. 模块AO输出捕获ADC平均有效值换算成电压值
    2. 根据驱动例程提供的数据表,用电压值匹配电阻表
    3. 电阻表匹配对应温度值

    3.心率血氧浓度

    当LED光射向皮肤,透过皮肤组织反射回的光被光敏传感器接受并转换成电信号再经过AD转换成数字信号,简化过程:光–> 电 --> 数字信号。根据官方历程移植代码,中途遇到很多问题,血氧的测量,相比心率血氧测量难度较大而且精度不算太高,寄存器中文描述可参考此链接
    程序设计流程如下

    1. 先初始化IIC,再初始化血氧模块SPO2_Init()
    2. 检查样本,采样获取红外FIFO、红外FIFO 的AC值
    3. 对红外FIFO、红外FIFO过滤脉冲值
    4. 根据相应的算法 光电容积脉搏波描记法PPG 获取心跳速率、血氧浓度

    zigbee发送数据

    USART -> zigbee只需要 串口 printf 就可以完成数据的传输
    使用该模块前需要配置模块我这里配置的波特率是115200
    在这里插入图片描述
    注意:

    1. 温度测量范围是 30-44°,其他范围默认取值为零
    2. 心跳有效范围设置为20-300,血氧是百分比值0-100
    3. 跌倒标志位【0:正常 1:异常】
      在这里插入图片描述

    代码

    main函数代码

    #include "adc.h"
    #include "led.h"
    #include "oled.h"
    #include "uart.h"
    #include "math.h"
    #include "delay.h"
    #include "stdio.h"
    #include "myiic.h"
    #include "timer3.h"
    #include "stdlib.h"
    #include "MAX30100.h"
    #include "stm32f10x.h"
    #include "MAX30100_Filters.h"
    #include "MAX30100_PulseOximeter.h"
    #include "MAX30100_SpO2Calculator.h"
    #include "mpu6050.h"
    #include "inv_mpu.h"
    #include "inv_mpu_dmp_motion_driver.h" 
    
    u32 TimingDelay = 0;
    u16 led_count = 0;
    float Tempertaure_val=0;  		//体温变量
    signed short HeartRate_val=0; 	//心跳速率
    u8 SPO2_val = 0;				//血氧浓度
    u8 str[20];						//字符串缓存
    _Bool send_flag = 0;      		//发送标志位
    u8 mpu_flag = 0;      			//人体跌倒检测标志位 标志位1、2任意一个异常 该标志位为1 	【1:跌倒,0:正常】
    _Bool mpu_1_flag = 0;      		//人体跌倒检测标志位1	角度异常标志		【1:异常,0:正常】
    _Bool mpu_2_flag = 0;      		//人体跌倒检测标志位2	加速度异常标志	【1:异常,0:正常】
    int SVM;											//人体加速度向量幅值SVM和微分加速度幅值的绝对平均值DSVM是区分人体运动状态的重要参量。SVM通过计算加速度幅度表征人体运动的剧烈程度,其值越大表明运动越剧烈。
    u8 t=0,i=10;
    
    int main(void)
    {
    	float pitch,roll,yaw; 	//欧拉角
    	short aacx,aacy,aacz;		//加速度传感器原始数据
    
    	
    	SysTick_Config(SystemCoreClock/1000);	//系统定时器初始化 1MHz 每1ms执行一次中断
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
    	Delay_Ms(100);			//等待配置稳定
    	
    	/***************第一部分:初始化部分*************/
    	LED_Init();					//板载LED初始化
    	UART1_Init();				//打印调试信息,zigbee 发送数据到气象站
    	OLED_Init();		    	//初始化OLED模块-----SCLK接到“B7”脚 SDIN接到“B6”脚
    	ADC1_Init();				//初始化ADC用于温度获取-----获取 “A0”ADC值
    	IIC_Init();					//血氧浓度模块IIC-----SCLK接到“B8”脚 SDIN接到“B9”脚
    	TIM3_Init();				//每1ms执行一次中断,	RunTime 每1ms加 1
    	SPO2_Init();				
    	MPU_Init();					//初始化MPU6050
    	
    	Delay_Ms(1000);			//等待初始化稳定
    	while(mpu_dmp_init())
     	{
    		//printf("MPU6050 Error");
     		Delay_Ms(200);
    	}
    	show_interface();		//显示主界面
    	
    	/***************第二部分:数据显示更新部分*************/
    	while(1)
    	{
    		//====心跳血氧====
    		POupdate();				//更新FIFO数据 血氧数据 心率数据
    		
    		//====温度获取====
    		Tempertaure_val = get_temp();   //获取人体温度
    		show_temp(Tempertaure_val);		//屏幕显示温度
    			
    		//====MPU6050数据获取====
    		if((t%10)==0)
    		{ 
    			if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
    			{ 
    				MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	//得到加速度传感器数据		
    				SVM = sqrt(pow(aacx,2)+  pow(aacy,2) + pow(aacz,2));	
    				//printf("pitch:%0.1f   roll:%0.1f   yaw:%0.1f   SVM:%u\r\n",fabs(pitch),fabs(roll),fabs(yaw),SVM);
    				
    				//分析x、y、z角度的异常判断
    				if( fabs(pitch)>40 || fabs(roll)>40 || fabs(yaw)>40 )//倾斜角度的 【绝对值】 大于40°SVM大于设定的阈值时,即认为摔倒
    					mpu_1_flag = 1;	
    				else 
    					mpu_1_flag = 0;
    				
    				//分析加速度SVM的异常判断
    				if( SVM>23000 || SVM<12000 )i = 0;
    				i++;
    				
    				if( i<=10 )mpu_2_flag = 1;
    				else 
    				{
    					i = 10;
    					mpu_2_flag = 0;
    				}
    		
    				//综合欧拉角、SVM异常判断异常	
    				if( mpu_2_flag || mpu_1_flag )mpu_flag = 1;
    				else mpu_flag = 0;
    				
    				show_mpu(mpu_flag);
    			}
    			t=0;
    		}
    		t++;
    		
    		//====发送数据====
    		if(send_flag)//SysTick_Handler()设置1s发送一次数据
    		{
    			printf("%0.2f %d %u %u\r\n",Tempertaure_val,HeartRate_val,SPO2_val,mpu_flag);
    			send_flag=!send_flag;
    		}
    		
    		Delay_Ms(10);
    	}
    }
    
    
    /***************系统定时器中断函数*************/
    void SysTick_Handler(void)
    {			
    	TimingDelay--;		//延时函数所需的变量
    	
    	led_count++;			//每1s发送一次数据
    	if(led_count>=1000)
    	{
    		led_count=0;
    		send_flag=!send_flag;
    	}
    }
    
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • STM32项目设计:基于STM32F4的电子阅读器制作教程

    千次阅读 多人点赞 2020-12-08 09:58:13
    基于STM32F4的电子阅读器 一、项目功能要求 项目说明: 项目偏软件,但是要依赖于自己对硬件的熟悉和驱动才能完成 用到的主要技术: SD卡驱动(难–不过可移植 SD卡驱动细节可在用完再了解其驱动协议) FatFs文件...
  • 2019-12-15 stm32项目

    2019-12-15 10:59:08
    stm32项目: 硬件平台: 华清远见stm32开发板,pc电脑,jlink调试 软件 : keil5 ,c语言 时间: 2019年12月19-12月23日 基本功能: 1.下位机完成温湿度采集,led灯控制,蜂鸣器控制 2.下位机能上报(给上位机)...
  • Keil建立STM32项目工程

    千次阅读 2015-07-01 18:38:34
    一、增加STM32项目文件分组 二、增加头文件夹三、增加预编译四、增加用户代码文件如,增加main.c/stm32f4xx_it.c文件五、需要类似错误解决问题A: Fatal error: A1023E: File “C:\Users\6?1?ppData\Local\Temp\p88...
  • Mac M1使用Vscode进行STM32项目开发折腾笔记1. 安装Vscode2. 安装GNU Arm Embedded Toolchain3. 配置系统环境变量4. 打开工程快捷配置5. 测试成果6. 待续 折腾笔记 上周入手一台ARM核的Mac,第一时间就想使用这台M1...
  • STM32项目提升

    2020-02-02 18:49:14
    STM32+esp8266+阿里云服务器+手机APP 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法...
  • 使用OpenOCD和arm-none-eabi-gcc / gdb工具链在STM32F4x微控制器上设置C / asm项目的简单工具,无需大型IDE。 套餐提供 :一个简单的框,用于选择openocd脚本或自定义脚本 :gdb调试器的图形前端 一个来演示sdk...
  • stm32项目硬软件

    2014-07-19 15:27:48
    文件里面包含了stm32f103zet6的所有端口的分配,已经对于端口的硬件连接,外加相应的代码实现功能。
  • 利用STM32CubeMx配置STM32芯片的功能,然后将配置后的内容生成代码,并导出成可以使用Keil打开编辑的文件,在Keil中添加控制代码后,下载到Proteus仿真中,使用仿真观察代码执行结果。 所需软件 &#...
  • STM32项目(四)——暗室网关

    千次阅读 2017-11-02 18:04:52
    STM32项目(四)——暗室网关 宗旨:技术的学习是有限的,分享的精神是无限的。 需求: 采集环境箱温度,采集20个通道的电流值,点灯节拍控制;(上位机服务器端复杂) 温度采集模块:(STM32 + RS485 + W5500...
  • stm32 项目 使用 gun makefile 的示例详解 # ------------------------------------------------ # Makefile (based on gcc) # ------------------------------------------------ #############################...
  • STM32CubeMX创建的工程项目芯片更改: 1.打开STM32CubeMX软件。 2.选择需要使用的芯片类型。 3.导入以前项目的工程。 4.按需求更改管脚和时钟等。 5.点击生成工程代码(工程名称和路径要一样)。 6.把生成的...
  • (1)先建项目文件夹 (2)建项目子文件夹(存项目支撑文件的) 再加上几个附带文件夹(存目标文件,以及关系映射文件的) 2. (1)把此压缩文件包解压 (2)得到一个项目文件夹及子文件夹及其所含文件 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,359
精华内容 7,343
关键字:

stm32项目