




kok电子竞技权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
kok电子竞技:文档简介
1、嵌入式系统原理及应用综合实验kok电子竞技专业班级:姓名: 学 号:_时 间:_指导教师:_2017年 9 月 17 日嵌入式系统原理及应用综合实验kok电子竞技摘要:信盈达电子有限公司产品信盈达智能穿戴开发平台,广泛应用于嵌入式生产实训教学中。该文通过分析stm32f40xxx系列微控制器的架构和操作原理,通过使用信盈达智能穿戴开发平台,给出了相关的编程设计方法和注意事项关键词:嵌入式 stm32 智能穿戴。1 引言ieee(institute of electrical and electronics engineers,美国电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装
2、置”。原文为:devices used to control,monitor or assist the operation of equipment,machinery or plants)。嵌入式系统,通常指一种专用的计算机设备,或作为装置和设备的一部分,亦或是指单纯的一块控制电路板。事实上带有数字接口的设备都使用了嵌入式系统。从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基。碛布可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。本次实训采用了信盈达智能穿戴开发平
3、台,通过为期一周的学习,快速掌握了stm32f40xxx系列微控制器的基础使用方法,并通过编程实现了相关的功能。2 总体设计方案2.1 设计思路2.1.1设计一个智能穿戴系统,实现下列功能:显示小组姓名、班级、学号;显示实时温度、湿度;测量并显示心率;测量并显示血压;返回初始界面。2.2 设计方框图3 系统硬件设计3.1 微控制器电路的设计图1 stm32f11微控制器电路3.2 按键电路的设计图2 按键电路3.3温湿度检测电路图3 sht20温湿度检测电路sht20是新一代sensirion湿度和温度传感器,采用数字输出方案,带有i2c接口,具有优异的长期稳定性,本电路采用i2c方案进行通讯
4、。3.4 oled显示电路图4 oled显示电路平台搭载了一款13264大小的oled屏幕。oled是有机发光二极管的缩写,又称有机电激光显示、有机发光半导体。其具有自发光、广视角、超高对比度、低耗电的优良性能,为一种高端的显示设备。4 系统软件设计图5 系统流程图相关程序编写:main函数所需头文件:#include stm32f4xx.h#include key.h#include led.h#include exti.h#include uart.h#include delay.h#include timer.h#include oled.h#include spi.h#include
5、bmp.h#include iic.h#include sht20.h按键程序:在main函数中,按键程序采用switch语句,按下后累计按下次数,以此选择软件功能模块。switch(page)case 1: oled_clear();name_page();break;case 2: oled_clear();clock_page();break;case 3: oled_clear();pulse_page();break;case 4:oled_clear();bp_page();break;case 5:oled_clear();kal_km_page();break; default
6、:break;spi程序:spi 是一种全双工串行接口,英文全称: serial peripheral interface,可处理多个连接到指定总线上的主机和从机。在数据传输过程中,总线上只能有一个主机和一个从机通信。在数据传输中,主机总是会向从机发送一帧 8到 16 个位的数据,而从机也总会向主机发送一帧字节数据。“全双工”意义为:主机、从机同时给对方发送数据。 spi,是一种高速的,全双工, 同步的通信总线(“同步” 的意思是数据传输需要时钟线),并且在芯片的管脚上只占用四根线,“信盈达智能穿戴设备开发平台”上的 oled 屏使用的是 spi 接口。spi 控制器的初始化步骤有以下几步:(
7、1) 使能 spi 复用功能所映射的 gpio 口时钟。(2) spi 控制器时钟使能。(3) 配置 gpio 为复用功能。( mosi/miso/clk)(4) gpio 复用功能为第几复用功能( afx)。(5) 配置 gpio 输出速率为 50mhz。(6) 配置 spix-cr1 寄存器。 相关代码如下所示:void spi1_init(void)rcc-ahb1enr |= 1apb2enr |= 1moder &= (0x3f moder |= 0x2a afr0 &= (0xfff afr0 |= 0x555 ospeedr &= (0x3f ospeedr |= 0x2a cr
8、1 = 0;spi1-cr1 |= 3 cr1 |= 1 cr1 |= 4 cr1 |= 1 sr & (1dr = val;while (spi1-sr & (1dr); sht20芯片程序: #include iic.h #include delay.h#include sht20.h#define sht20addr 0x80 /sht20写地址#define ack 0 /应答信号#define nack 1 /非应答信号#define fail 1 /读取温湿度失败的返回值。#define read_temp_comd 0xf3 /读取温度命令#define read_humi_co
9、md 0xf5 /读取湿度命令temphumivalue_t temp_humi_value;static void sht20_setresolution(void);static void sht20_setresolution(void);void sht20_softreset(void);static u8 sht20_writeonebyte(u8 datatowrite)u8 ack; ack = iic_writebyte(datatowrite); /发送字节return ack;void sht20_softreset(void) iic_start(); /start i
10、2csht20_writeonebyte(sht20addr&0xfe); /i2c address + writesht20_writeonebyte(0xfe); /soft resetiic_stop(); /stop i2c void sht20_init(void)sht20_softreset();static u8 sht20_readonebyte(u8 ack)u8 temp;temp=iic_readbyte(ack); return temp;static void sht20_setresolution(void) iic_start(); /start i2c if(
11、sht20_writeonebyte(sht20addr&0xfe)=ack) /i2c address + write + ack if(sht20_writeonebyte(0xe6)=ack) /写用户寄存器 if(sht20_writeonebyte(0x83)=ack); /设置分辨率 11bit rh% 测量时间:12ms(typ.) & 11bit t 测量时间:9ms(typ.) iic_stop(); /stop i2c float sht20_readtemorhum(u8 commod)float temp; /温度u8 ack=1;u8 msb,lsb; /温度、相对湿
12、度的寄存器数据float humidity,temperature; /温湿度的转换结果sht20_setresolution(); /设置帧率8bit,9bit,10 bit,11bit ,12bit,13bit,14bitiic_start(); /iic开始信号ack = sht20_writeonebyte(sht20addr&0xfe);if( ack = ack ) /写地址,并等待ack if(sht20_writeonebyte(commod)=ack) /写命令 dodelay_ms(6); /延时iic_start(); /发送开始信号while(sht20_writeon
13、ebyte(sht20addr|0x01)=nack); /无应答则整形,还在测量中,如果有应答,则结束当前循环msb = sht20_readonebyte(ack); /读data(msb),给应答acklsb = sht20_readonebyte(ack); /读data(lsb),给应答acksht20_readonebyte(nack); /读checksum ,不给应答nack iic_stop(); /stop i2clsb &= 0xfc; /data (lsb) 的后两位在进行物理计算前前须置0 temp = msb*256 + lsb; /十六进制转成十进制if (com
14、mod=(u8)read_humi_comd) /命令为读取湿度的命令 /*- calculate relative humidity %rh -*/ humidity =(temp*125)/65536-6; /公式: rh%= -6 + 125 * srh/216return humidity; /返回值:humidity else if(commod=(u8)read_temp_comd) /命令为读取温度的命令 /*- calculate temperature c -*/temperature = (temp*175.72f)/65536-46.85f; /公式:t= -46.85
15、+ 175.72 * st/216return temperature; /返回值:temperature return fail;temphumivalue_t * sht20_readtemandhum(void)temp_humi_value.humidity = sht20_readtemorhum(read_humi_comd);/读取湿度temp_humi_value.temperature = sht20_readtemorhum(read_temp_comd);/读取湿度return &temp_humi_value; oled初始化程序: /初始化ssd1306 void o
16、led_init(void) oled_pininit(); oled_deselect(); /不选择oledoled_reset();oled_writebyte(0xae,oled_cmd);/-turn off oled paneloled_writebyte(0x02,oled_cmd);/-set low column addressoled_writebyte(0x10,oled_cmd);/-set high column addressoled_writebyte(0x40,oled_cmd);/-set start line address set mapping ram
17、display start line (0x000x3f)oled_writebyte(0x81,oled_cmd);/-set contrast control registeroled_writebyte(0xcf,oled_cmd); / set seg output current brightnessoled_writebyte(0xa1,oled_cmd);/-set seg/column mapping 0xa0左右反置 0xa1正常oled_writebyte(0xc8,oled_cmd);/set com/row scan direction 0xc0上下反置 0xc8正常o
18、led_writebyte(0xa6,oled_cmd);/-set normal displayoled_writebyte(0xa8,oled_cmd);/-set multiplex ratio(1 to 64)oled_writebyte(0x3f,oled_cmd);/-1/64 dutyoled_writebyte(0xd3,oled_cmd);/-set display offsetshift mapping ram counter (0x000x3f)oled_writebyte(0x00,oled_cmd);/-not offsetoled_writebyte(0xd5,ol
19、ed_cmd);/-set display clock divide ratio/oscillator frequencyoled_writebyte(0x80,oled_cmd);/-set divide ratio, set clock as 100 frames/secoled_writebyte(0xd9,oled_cmd);/-set pre-charge periodoled_writebyte(0xf1,oled_cmd);/set pre-charge as 15 clocks & discharge as 1 clockoled_writebyte(0xda,oled_cmd
20、);/-set com pins hardware configurationoled_writebyte(0x12,oled_cmd);oled_writebyte(0xdb,oled_cmd);/-set vcomholed_writebyte(0x40,oled_cmd);/set vcom deselect leveloled_writebyte(0x20,oled_cmd);/-set page addressing mode (0x00/0x01/0x02)oled_writebyte(0x02,oled_cmd);/oled_writebyte(0x8d,oled_cmd);/-
21、set charge pump enable/disableoled_writebyte(0x14,oled_cmd);/-set(0x10) disableoled_writebyte(0xa4,oled_cmd);/ disable entire display on (0xa4/0xa5)oled_writebyte(0xa6,oled_cmd);/ disable inverse display on (0xa6/a7) oled_writebyte(0xaf,oled_cmd);/-turn on oled paneloled_writebyte(0xaf,oled_cmd); /*
22、display on*/ oled_clear();oled_setpos(0,0); 5 结束语 通过本次为期五天的嵌入式实训,让我对上个学期学习的嵌入式相关只是有了深一步的了解。通过本次实验,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。这就是一个自我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。参考文献1陈志旺.stm32嵌入式微控制器快速上手(第二kok电子竞技).北京:电子工业出kok电子竞技社,2014.52嵌入式系统原理及应用.北京:北京邮电大学出kok电子竞技社,20093 桑楠.嵌入式系统原理及应用
23、开发技术. 北京:北航大学出kok电子竞技社,2003附录电路原理图:main.c程序#include stm32f4xx.h#include key.h#include led.h#include exti.h#include uart.h#include delay.h#include timer.h#include oled.h#include spi.h#include bmp.h#include iic.h#include sht20.h#include hp6.h#include mpu6050.hu8 page = 0;void clock_page(void);void pulse_pag
24、e(void);void bp_page(void);void step_page(void);void kal_km_page(void);int main()/裸机程序结构 delay_init(100);led_init();key_init();spi1_init();oled_init();iic_pininit();sht20_init();hp_6_init(); /初始化hp6心率血压 模块 mpu_init();/hp_6_versioninfo();while (1)switch(page)case 0:oled_clear(); kal_km_page();case 1:
25、 oled_clear();clock_page();break;case 2: oled_clear();pulse_page();break;case 3:oled_clear();bp_page();break; default:break;void kal_km_page (void)while(1) oled_showchinese(0, 0, 0);oled_showchinese(16, 0, 1);oled_showchinese(32, 0, 2);oled_showchinese(48, 0, 3);oled_showchinese(64, 0, 4);oled_showc
26、hinese(80, 0, 5);oled_showchinese(0, 2, 6);oled_showchinese(16, 2, 7);oled_showchinese(32, 2, 8);oled_showchinese(48, 2, 9);oled_showchinese(64, 2, 10);oled_showchinese(80, 2, 11);if(key_scan()page = page +1; /切换到page1iic_stop();break; /跳出当前页面 void clock_page(void)temphumivalue_t humi_temp_val ; /温湿
27、度u8 uibuf40; while(1)humi_temp_val = *sht20_readtemandhum();/获取温度sprintf(char*)uibuf,%02dc %02d,(char)humi_temp_val.temperature,(char)humi_temp_val.humidity); / 以整数显示oled_showstring(10,6,uibuf,16); oled_showstring(10+8*7,6,%,16); if(key_scan()page = page +1; /切换到page1iic_stop();break; /跳出当前页面 void p
28、ulse_page(void)static u8 oldpulseval = 0; /上一次的心率值u8 uibuf40; u8 pulsebuf24 = 0;hp_6_openrate(); /打开心率测量oled_showstring(10,4,pulse,16); while(1)/oled_showstring(10,4,pulse,16); / hp_6_getrateresult();/hp_6_getresultdata(pulsebuf);/sprintf(char*)uibuf,%03d,pulsebuf7); / /byte 7是心率结果/oled_showstring(1
29、0,6,uibuf,16); /delay_ms(100);if(pulsebuf7 & pulsebuf7!= oldpulseval) /如果可以获得心率结果,表明测量成功,则关闭心率测量oldpulseval = pulsebuf7;hp_6_closerate();sprintf(char*)uibuf,%03d,pulsebuf7); / /byte 7是心率结果oled_showstring(10,6,uibuf,16); else /如果获取不到心率结果,则每隔100毫秒钟获取心率值hp_6_getrateresult();hp_6_getresultdata(pulsebuf)
30、;delay_ms(100);if(key_scan()page = page +1; /切换到page2hp_6_closerate(); /关闭心率测量iic_stop();break; /跳出当前页面 void bp_page(void)u8 uibuf40; u8 bpbuf24 = 0;hp_6_openbp(); /打开血压测量 while(1) hp_6_getbpresult(); /获取血压测量状态 hp_6_getresultdata(bpbuf); if(0 = bpbuf7) /byte 7是血压测量的状态:0测量中,1测量完成、2测量失败 oled_showstrin
31、g(10,4,testing,16); else if(1 = bpbuf7) oled_showstring(10,4,success,16);sprintf(char*)uibuf,%03d/%03d mmgh, bpbuf10, bpbuf11);/byte 10是血压测量结果的高压,byte 11是血压测量结果的低压oled_showstring(10,6,uibuf,16); hp_6_closebp(); else if(2 = bpbuf7) hp_6_closebp(); oled_showstring(10,4,fail ,16); else /do nothingdelay_ms(100); if(key_scan()page =0; /切换到page3hp_6_closebp(); /关闭血压测量iic_stop();break; /跳出当前页面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
kok电子竞技:最新文档
- 2025年上半年安徽滁州来安县疾病预制中心紧急招聘工作人员9人易考易错模拟试题(共500题)试卷后附参考答案
- 2024陕西空天动力试验科技有限责任公司招聘(25人)笔试参考题库附带答案详解
- 2025年上半年安徽中烟工业限责任公司招聘80人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年安庆市市重点工程建设局招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 【2025】贵州黔晟投资有限公司【2025】年面向社笔试考点考试试题及答案
- 2024闽铝轻量化多岗位招聘143人笔试参考题库附带答案详解
- 2024年涂覆材料项目项目投资申请kok电子竞技代可行性研究kok电子竞技
- 2025年手动清洗过滤器项目可行性研究kok电子竞技
- 2024年未硫化复合橡胶及其制品项目资金申请kok电子竞技代可行性研究kok电子竞技
- 2025年外斗式胶带传动提升机项目可行性研究kok电子竞技
- 增强CT检查流程
- 水利行业知识培训课件
- 2024年扬州工业职业技术学院单招职业适应性测试试题库(含答案)
- 2025-2030年中国人力资源服务行业全国市场开拓战略制定与实施研究kok电子竞技
- 事故隐患内部kok电子竞技奖励机制实施细则
- 《CT、MR的临床应用》课件
- 2025农村鱼塘承包合同书
- 特殊作业安全管理监护人培训课件
- 机械设计基础 课件全套 胡孟谦 01机械设计概论 -14机械创新设计
- 部编kok电子竞技语文小学二kok电子竞技下册第一单元集体备课(教材解读)
- 小学六kok电子竞技数学行程应用题100道及答案解析
评论
0/150
提交评论