版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目4环境参数监测与显示系统的设计与实现12案例引导本项目主要讲解温湿度传感器、光照强度传感器和OLED显示模块、TFT-LCD显示屏、电子秤的工作原理及应用技术,介绍STM32F4系列微控制器的I2C、SPI、FSMC外设的使用细节。读者通过实施本项目的4个任务,应掌握以下内容。(1)常用的环境参数监测传感器的编程应用方法。(2)常见的通信接口的编程配置方法。(3)能完成有显示需求的应用程序开发。环境参数测量任务描述1任务目标(1)掌握常用的温湿度传感器的工作原理。(2)会编写环境温湿度监测的应用程序。任务4.1环境温湿度监测的应用开发32本任务要求设计一个应用程序,以实现对环境温湿度的监测。具体电路如图4-1所示。从图4-1中可以看到,单总线温湿度传感器DHT11与STM32F407微控制器的某个GPIO引脚相连。微控制器每隔1s采集一次温湿度数据,转换为指定格式之后,通过USART发送到上位机显示。显示样例为:“温度:25℃,湿度:67%”。任务内容图4-1环境参数测量4知识链接DHT11概述及其性能指标
DHT11是一款温湿度一体化的数字传感器,它的内部由一个电阻式的测湿元件和一个负温度系数NTC的测温元件组成,测湿与测温元件与一个高性能的8位单片机相连。DHT11的性能指标DHT115知识链接DHT11的数据格式DHT11与微控制器之间的通信采用单总线数据格式。DHT11单次传输5个字节(40Bit)的数据,高位先出。具体数据构成为:8Bit湿度整数数据+8Bit湿度小数数据+8Bit温度整数数据+8Bit温度小数数据+8Bit校验和,其中校验和为前四个字节的数据相加并保留低8位。图为从DHT11中一次性读取的数据样例。从DHT11中一次性读取的数据DHT116知识链接DHT11的传输时序DHT111.数据通信时序图微控制器(主机)与DHT11进行数据通信的时序如图所示,其中包括“主机探测DHT11是否正确连接”与“数据传输”两个过程:
首先主机发送开始信号,即拉低数据线保持t1(至少18ms)时间,然后拉高数据线t2(20~40μs)时间,然后读取DHT11的回应信号,正常的话,DHT11会拉低数据线,保持t3(40~50μs)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50μs)时间后,开始输出数据,每一比特数据都以低电平开始,时序如图4-4所示。DHT11的传输时序DHT113.单总线数据格式中数字‘0’和‘1’的表示方法8任务描述任务4.1环境温湿度监测的应用开发环境参数测量序号设备/资源数量是否准备到位(√)1STM32F407ZET6最小系统1
2DHT111
3杜邦线3
任务实施前必须准备好表4-2所列的设备/资源。表4-2设备/资源清单表硬件连接将DHT11温湿度传感器的VCC引脚连接3.3V电压,GND引脚接地,DATA引脚与微控制器的某GPIO引脚(本任务选择PG9)相连。9任务描述任务4.1环境温湿度监测的应用开发环境参数测量任务描述要完成本任务,可将实施步骤分成以下7步。使用STM32CubeMX完成基础工程的创建和配置。在工程中添加代码包。在源文件中添加代码。编译代码。硬件环境搭建。模块固件下载。结果验证。具体实施步骤如下。10外设配置任务4.1环境温湿度监测的应用开发环境参数测量PG9配置USART1配置11时钟配置任务4.1环境温湿度监测的应用开发环境参数测量12软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.h文件如程序清单4-1所示。程序清单4-1:#ifndef__DHT11_H#define__DHT11_H#include
"main.h"#defineDHT11_DATA_PinGPIO_PIN_9#defineDHT11_DATA_GPIO_PortGPIOG#defineDHT11_DQ_INHAL_GPIO_ReadPin(DHT11_DATA_GPIO_Port,DHT11_DATA_Pin)voiddelay_us(uint32_tus);uint8_tDHT11_Init(void); //初始化DHT11uint8_tDHT11_Read_Data(uint8_t*temp,uint8_t*humi);//读取温湿度uint8_tDHT11_Read_Byte(void);//读出一个字节uint8_tDHT11_Read_Bit(void);//读出一个位uint8_tDHT11_Check(void); //检测是否存在DHT11voidDHT11_Rst(void); //复位DHT11voiddht11_inputmode(void);//设置PG9为输入模式voiddht11_outputmode(void);//设置PG9为输出模式#endif13软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。#include
"dht11.h"voiddelay_us(uint32_tus){uint32_tdelay=(HAL_RCC_GetHCLKFreq()/4000000*us);
while(delay--) { ; }}uint8_tDHT11_Init(void) {GPIO_InitTypeDefGPIO_Initure;__HAL_RCC_GPIOG_CLK_ENABLE(); //开启GPIOG时钟
GPIO_Initure.Pin=DHT11_DATA_Pin;//PG11GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;//推挽输出GPIO_Initure.Pull=GPIO_PULLUP;//上拉GPIO_Initure.Speed=GPIO_SPEED_HIGH;//高速HAL_GPIO_Init(DHT11_DATA_GPIO_Port,&GPIO_Initure);//初始化
DHT11_Rst();
returnDHT11_Check();
}14软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。//读取温湿度uint8_tDHT11_Read_Data(uint8_t*temp,uint8_t*humi){ uint8_tbuf[5]; uint8_ti; DHT11_Rst();
if(DHT11_Check()==0) {
for(i=0;i<5;i++)//读取40位数据 { buf[i]=DHT11_Read_Byte(); }
if((buf[0]+buf[1]+buf[2]+buf[3])%256==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }else
return1;
return0;
}//读出一个字节uint8_tDHT11_Read_Byte(void) { uint8_ti,dat; dat=0;
for(i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit();}
returndat;
}//读出一个位uint8_tDHT11_Read_Bit(void) { uint8_tretry=0;
while(DHT11_DQ_IN&&retry<100)//等待变为低电平 { retry++; delay_us(1); } retry=0;
while(!DHT11_DQ_IN&&retry<100)//等待变为高电平 { retry++; delay_us(1); } delay_us(40);//等待40μs
if(DHT11_DQ_IN)return1;
else
return0;
}15软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。//检测是否存在DHT11uint8_tDHT11_Check(void) { uint8_tretry=0;
dht11_inputmode();//设置为输出
while(DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80μs { retry++; delay_us(1); };
if(retry>=100)return1;
elseretry=0;
while(!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80μs { retry++; delay_us(1); };
if(retry>=100)return1;
return0;
}//复位DHT11voidDHT11_Rst(void) { dht11_outputmode(); HAL_GPIO_WritePin(DHT11_DATA_GPIO_Port,DHT11_DATA_Pin,GPIO_PIN_RESET);//DQ=0 HAL_Delay(20); //拉低至少18ms HAL_GPIO_WritePin(DHT11_DATA_GPIO_Port,DHT11_DATA_Pin,GPIO_PIN_SET);//DQ=1 delay_us(30); //主机拉高20~40μs
}16软件设计任务4.1环境温湿度监测的应用开发环境参数测量DHT11模块驱动程序设计,我们设计两个文件dht11.h和dht11.c。dht11.c文件如程序清单4-2所示。//设置DHT11_data为输入模式voiddht11_inputmode(void){ GPIO_InitTypeDefGPIO_InitTypestruct={0}; GPIO_InitTypestruct.Mode=GPIO_MODE_INPUT;//输入 GPIO_InitTypestruct.Pin=DHT11_DATA_Pin; GPIO_InitTypestruct.Pull=GPIO_PULLUP;//上拉 HAL_GPIO_Init(DHT11_DATA_GPIO_Port,&GPIO_InitTypestruct);
}//设置DHT11_data为输出模式voiddht11_outputmode(void){ GPIO_InitTypeDefGPIO_InitTypestruct={0}; GPIO_InitTypestruct.Mode=GPIO_MODE_OUTPUT_PP; GPIO_InitTypestruct.Pin=DHT11_DATA_Pin; GPIO_InitTypestruct.Pull=GPIO_PULLUP; GPIO_InitTypestruct.Speed=GPIO_SPEED_HIGH; HAL_GPIO_Init(DHT11_DATA_GPIO_Port,&GPIO_InitTypestruct);}17软件设计任务4.1环境温湿度监测的应用开发环境参数测量添加代码包在“MDK-ARM”文件夹同级目录新建文件夹“dht11”,将上文的dht11.h、dht11.c文件输入并保存在“dht11”目录下。在KeilMDK工程中建立“dht11”组,将“dht11”文件夹下的dht11.c文件加入组中。最后将“dht11”文件夹加入头文件“IncludePaths”(包含路径)中,以便编译时可以访问相应的文件。18软件设计任务4.1环境温湿度监测的应用开发环境参数测量应用层代码(1)在main.c文件相应位置输入以下代码:19软件设计任务4.1环境温湿度监测的应用开发环境参数测量应用层代码(2)打开usart.c文件,在相应位置输入如下代码:(3)打开usart.h文件,在相应位置输入如下代码:20编译程序,下载程序到核心板,将dht11模组的VCC接核心板3.3V、GND接GND、DATA接GPIOG.9,系统上电。PC端打开串口调试助手,设置好串口。打开串口,可看到如图4-11的实验结果:串口接收端,每隔1s收到开发板上报的温度及湿度值。符合实验预期。软件设计任务4.1环境温湿度监测的应用开发环境参数测量4、实验结果图4-1121任务小结任务4.1环境温湿度监测的应用开发环境参数测量学习DHT11传感器通信的关键是正确理解和掌握其通信时序。具体来说,DHT11传感器采用单总线通信协议,包括以下几个关键的时序要点。启动信号:主机发送启动信号,即将总线拉低至少18ms再拉高20~40μs来激活传感器。应答信号:主机在发送启动信号后,释放总线并等待DHT11的应答信号。应答信号由DHT11将总线拉低40~50μs,然后再将总线拉高40~50μs来表示。数据帧传输:主机根据特定的时序要求向DHT11发送请求信号,并接收传感器返回的数据帧。传感器每位数据的高电平持续时间不同,持续26~28μs表示‘0’
,持续116~118μs表示‘1’
。校验和:主机接收到数据帧后,需要对接收到的湿度和温度数据进行校验。校验和是一位8位无符号整数,用于验证数据的完整性。通过实验和调试可知,读取DHT11传感器的温湿度值需要注意以下几点。在读取数据之前,需要等待传感器稳定一段时间,以避免读取错误的数据。读取温度和湿度值时,需要按照传感器的通信协议进行操作。在程序中加入适当的延时和错误处理,以提高程序的稳定性和可靠性。
项目4环境参数监测与显示系统的设计与实现2223案例引导本项目主要讲解温湿度传感器、光照强度传感器和OLED显示模块、TFT-LCD显示屏、电子秤的工作原理及应用技术,介绍STM32F4系列微控制器的I2C、SPI、FSMC外设的使用细节。读者通过实施本项目的4个任务,应掌握以下内容。(1)常用的环境参数监测传感器的编程应用方法。(2)常见的通信接口的编程配置方法。(3)能完成有显示需求的应用程序开发。光照强度测量任务描述1任务目标(1)掌握常用的光照强度检测传感器的工作原理。(2)掌握STM32F407的I2C总线的工作原理。(3)会编写环境光照强度监测的应用程序。任务4.2环境光照强度监测的应用开发242本任务要求设计一个应用程序,以实现将采集到的环境参数上报PC端,进行持久化存储,并对后续的数据分析提供方便。具体要求如下。系统每隔1小时采集一次环境参数,并在数据前加入时间戳(即采集的日期与时间)后,存入一种存储介质中。为方便教学,我们把任务简化,先不需要采集的日期与时间,也不存到Flash存储器,只需要把采集到的光照强度[单位:勒克斯lx]上报PC端即可。任务内容光照强度测量任务4.2环境光照强度监测的应用开发25任务分析
本任务要求设计一个应用程序,以实现对环境光照强度的监测。传感器硬件使用ROHM半导体公司的BH1750光照强度传感器模块,该模块的实物如下图所示,子图(a)为传感器模块正面,子图(b)为传感器模块背面。BH1750光照强度传感器模块与MCU的硬件接线表BH1750光照强度传感器模块实物图I2C总线规范;BH1750光照强度传感器的特性;环境光照强度监测应用程序的编写方法。光照强度测量任务4.2环境光照强度监测的应用开发26任务分析环境参数测量基于STM32F407的HAL库的环境光照强度BH1750检测的应用开发可按以下步骤进行。硬件准备(1)使用STM32F407开发板和BH1750光照强度传感器进行连接。(2)设置STM32F407的时钟,并初始化I2C总线用于与BH1750通信。2)根据BH1750的规格书,编写初始化函数以配置BH1750的工作模式和采样速率。(1)实现开始测量函数,向BH1750发送命令以启动光照强度的测量。(2)编写读取数据函数,通过I2C总线从BH1750读取测量到的光照强度值。3)应用程序开发(1)初始化STM32F407的HAL库,并设置相应的GPIO和I2C引脚。(2)调用BH1750驱动程序的初始化函数进行初始化。(3)设计主循环。调用开始测量函数启动光照强度的测量。调用读取数据函数获取测量到的光照强度值。对光照强度进行处理和判断,如比较是否超过某个预设阈值。根据需要执行相应的操作,如控制外部设备的亮度或触发警报等。4)优化设计任务4.2环境光照强度监测的应用开发27任务分析本任务涉及的必备知识点如下。BH1750光照强度传感器的基本工作原理和性能指标。BH1750光照强度传感器的传输时序。STM32F407的I2C的基本原理。光照强度测量任务4.2环境光照强度监测的应用开发28知识链接BH1750光照强度传感器认识BH1750BH1750FVI是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据,利用它的高分辨率可以探测较大范围的光强度变化。ROHM半导体公司的BH1750光照强度传感器模块的实物如图4-12所示。光照强度测量任务4.2环境光照强度监测的应用开发29知识链接BH1750光照强度传感器2)BH1750光照强度传感器模块与STM32F407微控制器的硬件连接BH1750传感器引脚与STM32F407微控制器的硬件连接如表4-3所示。表4-3BH1750与STM32F407微控制器的连接序号传感器模块引脚说明连接MCU端1VCC电源输入3.3~5V2GND接地GND3SCLI2C总线的时钟线微控制器I2C总线的SCL(本任务连接PB6)4SDAI2C总线的数据线微控制器I2C总线的SDA(本任务连接PB7)5ADDRBH1750的地址线:‘1’对应的10111000(0xB8);‘0’对应的01000110(0x46)本任务中接地光照强度测量任务4.2环境光照强度监测的应用开发30知识链接BH1750光照强度传感器3)BH1750传感器的工作原理及特点BH1750传感器有接近视觉灵敏度的光谱灵敏度特性,它支持I2C总线接口,支持1.8V逻辑输入接口。传感器有两种可选的I2Cslave地址,无需其他外部件。光源依赖性弱,受红外线影响很小。传感器通过降低功率功能,实现低电流化。通过50Hz/60Hz除光噪音功能实现稳定的测定,最小误差变动在±20%。BH1750的电气特性如表4-4所示。参数最小值典型值最大值单位供电电流-120190μA关机电流-0.011.0μA峰值灵敏度波长-560-nm测量精度(传感器输出/实际光照度)0.961.21.44倍环境全黑(0lx)时传感器输出值003lxH-Resolution模式分辨率-1-lxL-Resolution模式分辨率-4-lx高分辨率的测量时间-120180ms低分辨率的测量时间-1624ms表4-4BH1750的电气特性光照强度测量任务4.2环境光照强度监测的应用开发31知识链接BH1750光照强度传感器4)BH1750的测量流程BH1750的测量流程如图4-13所示。模块上电后的初始状态为断电模式(PowerDown),需要发送“上电指令”,传感器切换为上电模式(PowerOn),此时可发送不同的测试指令(MeasurementCommand)使传感器完成诸如“单次测量”(OneTimerMeasurement)或“连续测量”(ContinuousMeasurement)等操作,图4-13中的虚线代表我们用I2C写入的指令码(OpeCode),实线是芯片电路自动切换状态过程。光照强度测量任务4.2环境光照强度监测的应用开发32知识链接光照强度测量BH1750光照强度传感器5)BH1750的控制指令集BH1750的主要控制指令及其说明如表4-5所示。表4-5BH1750的控制指令集指令指令码说明断电(PowerDown)0000_0000(0x00)非激活状态通电(PowerOn)0000_0001(0x01)等待测量指令状态复位(Reset)0000_0111(0x07)恢复数据寄存器的值(断电模式下不可用)连续高分辨率模式(ContinuouslyH-ResolutionMode)0001_0000(0x10)分辨率1lx,典型测量时间120ms连续低分辨率模式(ContinuouslyL-ResolutionMode)0001_0001(0x11)分辨率0.5lx,典型测量时间120ms单次高分辨率模式10010_0000(0x20)测量后自动切换为断电模式单次高分辨率模式20010_0001(0x21)测量后自动切换为断电模式单次低分辨率模式0010_0011(0x23)测量后自动切换为断电模式33知识链接光照强度测量I2C总线规范1.I2C总线概述I2C(Inter-IntegratedCircuitBus)总线由Philips公司推出,在微电子通信控制领域得到广泛应用。I2C总线是串行同步通信的一种类型,它具有双向、两线、多主控的特点,并具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。I2C总线的连接方式34知识链接光照强度测量I2C总线规范1.I2C总线概述I2C总线相关的术语35知识链接光照强度测量I2C总线规范2.I2C通信的起始条件和停止条件在I2C通信的过程中,起始条件和停止条件是两种特殊的电平状态,如图中的“STARTcondition”和“STOPcondition”所示。起始条件和停止条件使用普通的I/O口模拟起始信号voidIIC_start(void){/*SCL为高电平期间,SDA从高电平往低电平跳变*/IIC_SDA(1
); IIC_SCL(1);iic_delay(
);IIC_SDA(0
); iic_delay(
);IIC_SCL(0
); iic_delay(
);/*钳住总线,准备发送/接收数据*/}(使用普通的I/O口模拟停止信号):voidiic_stop(void){/*SCL为高电平期间,SDA从低电平往高电平跳变*/IIC_SDA(0
); iic_delay(
); IIC_SCL(1
); iic_delay(
);IIC_SDA(1
);
/*发送总线停止信号*/ iic_delay(
);}36知识链接光照强度测量I2C总线规范3.I2C总线的寻址和数据传输方向的表示I2C总线上的每个器件都有一个独立的地址,主机发起通信时,通过SDA线发送设备地址(slaveaddress,7bit
or10bit)进行从机的寻址。器件地址后面的一个数据位(第8位或第10位)用于表示数据的传输方向,我们一般称之为数据方向位(R/
W)。数据方向位为“1”时,主机由从机中读取数据;数据方向位为“0”时,主机向从机写入数据。从机地址和数据传输方向的表示37知识链接光照强度测量I2C总线规范4.I2C通信的数据有效性I2C通信的数据有效性38知识链接光照强度测量I2C总线规范5.I2C通信的响应I2C通信的响应响应包括应答信号(ACK)和非应答信号(NACK)两种。检测应答信号,编码如下:uint8_tiic_wait_ack(void)/*return1:fail0:succeed*/{ IIC_SDA(1);
/*主机释放SDA线*/ iic_delay(
); IIC_SCL(1);
/*从机返回ACK*/
iic_delay(
);
if(
IIC_READ_SDA)/*SCL高电平读取SDA状态*/ { iic_stop();
/*SDA高电平表示从机NACK*/
return1; } IIC_SCL(0);/*SCL低电平表示结束ACK检查*/ iic_delay(
);
return
0;}396.I2C总线的数据传输时序与格式完整的数据传输时序图知识链接光照强度测量I2C总线规范406.I2C总线的数据传输时序与格式主机写数据到从机的格式知识链接光照强度测量I2C总线规范416.I2C总线的数据传输时序与格式主机自从机中读数据知识链接光照强度测量I2C总线规范读取1字节数据,编码如下:uint8_tiic_read_byte(uint8_tack){/*1:ack0:nack*/ uint8_treceive=0; for(uint8_tt=0;t<8;t++) {/*高位先输出,先收到的数据位要左移*/ receive<<=1; IIC_SCL(1
); iic_delay(
);
if(
IIC_READ_SDA)receive++; IIC_SCL(0
); iic_delay(
); }
if(
!ack)iic_nack();
elseiic_ack();
return
receive;
}426.I2C总线的数据传输时序与格式主机与从机通信的复合数据格式知识链接光照强度测量I2C总线规范43知识链接光照强度测量STM32F4的I2C简介STM32的I2C外设可用作通信的主机及从机,支持100kbit/s和400kbit/s的速率,支持7位、10位设备地址,支持DMA数据传输,并具有数据校验功能。通信引脚表4-7STM32F4xx的I2C引脚引脚I2C编号I2C1I2C2I2C3SCLPB6/PB10PH4/PF1/PB10PH7/PA8SDAPB7/PB9PH5/PF0/PB11PH8/PC9I2C的所有硬件架构都是根据图4-16中左侧的SCL线和SDA线展开的。STM32芯片有多个I2C外设,它们的I2C通信信号引出到不同的GPIO引脚上,使用时必须配置好这些指定的引脚,如表4-7所示44知识链接光照强度测量STM32F4的I2C简介时钟控制逻辑SCL线的时钟信号由I2C接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。配置I2C的CCR寄存器可修改通信速率相关的参数。可选择I2C通信的“标准/快速”模式,这两个模式分别I2C对应100/400kbit/s的通信速率。在快速模式下可选择SCL时钟的占空比,可选Tlow/Thigh=2或Tlow/Thigh=16/9模式,其实这两个模式的比例差别并不大,若不是要求非常严格,这里随便选就可以了。CCR寄存器中还有一个12位的配置因子CCR,它与I2C外设的输入时钟源共同作用,产生SCL时钟。我们的PCLK1=42MHz,想要配置400kbit/s的速率,经过计算得到CCR的值为35。45知识链接光照强度测量STM32F4的I2C简介数据控制逻辑I2C的SDA信号主要连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR)、数据包错误校验寄存器(PEC)以及SDA数据线。当向外发送数据的时候,数据移位寄存器以“数据寄存器”为数据源,把数据一位一位地通过SDA信号线发送出去;当从外部接收数据的时候,数据移位寄存器把SDA信号线采样到的数据一位一位地存储到“数据寄存器”中。若使能了数据校验,接收到的数据会经过PEC(数据包错误校验)运算,运算结果存储在“PEC寄存器”中。当STM32的I2C工作在从机模式的时候,接收到设备地址信号时,数据移位寄存器会把接收到的地址与STM32的自身的“I2C地址寄存器”的值作比较,以便响应主机的寻址。STM32的自身I2C地址可通过修改“自身地址寄存器”,支持同时使用两个I2C设备地址,两个地址分别存储在OAR1和OAR2中。46知识链接光照强度测量STM32F4的I2C简介整体控制逻辑整体控制逻辑负责协调整个I2C外设,控制逻辑的工作模式根据我们配置的“控制寄存器(CR1/CR2)”的参数而改变。在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR1和SR2)”,只要读取这些寄存器相关的寄存器位,就可以了解I2C的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生I2C中断信号、DMA请求及各种I2C的通信信号(起始信号、停止信号、响应信号等)。47知识链接光照强度测量STM32F4的I2C简介通信过程使用I2C外设通信时,在通信的不同阶段它会对“状态寄存器(SR1及SR2)”的不同数据位写入参数,我们通过读取这些寄存器标志来了解通信状态。(1)主发送器主发送器发送流程及事件说明如下。控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对SR1寄存器的SB位置1,表示起始信号已经发送。紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及“EV8”,这时SR1寄存器的ADDR位及TXE位被置1,ADDR为1表示地址已经发送,TXE为1表示数据寄存器为空。以上步骤正常执行并对ADDR位清零后,我们往I2C的数据寄存器DR写入要发送的数据,这时TXE位会被重置0,表示数据寄存器非空,I2C外设通过SDA信号线一位一位把数据发送出去后,又会产生“EV8”事件,即TXE位被置1,重复这个过程,就可以发送多个字节数据了。当数据发送完成后,控制I2C设备产生一个停止信号(P),这个时候会产生“EV8_2”事件,SR1的TXE位及BTF位都被置1,表示通信结束。假如我们使能了I2C中断,以上所有事件产生时,都会产生I2C中断信号,进入同一个中断服务函数,到I2C中断服务程序后,再通过检查寄存器位来了解是哪一个事件。48知识链接光照强度测量STM32F4的I2C简介(2)主接收器再来分析主接收器通信过程,即作为I2C通信的主机端时,从外部接收数据的过程,如图4-18所示主接收器接收流程及事件说明如下。同主发送流程,起始信号(S)是由主机端产生的,控制发生起始信号后,它产生事件“EV5”,并会对SR1寄存器的SB位置1,表示起始信号已经发送。紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”,这时SR1寄存器的ADDR位被置1,表示地址已经发送。从机端接收到地址后,开始向主机端发送数据。当主机接收到这些数据后,会产生“EV7”事件,SR1寄存器的RXNE被置1,表示接收数据寄存器非空,我们读取该寄存器后,可对数据寄存器清空,以便接收下一次数据。此时我们可以控制I2C发送应答信号(ACK)或非应答信号(NACK),若应答,则重复以上步骤接收数据,若非应答,则停止传输。④发送非应答信号后,产生停止信号(P),结束传输。在发送和接收过程中,有的事件不只是标志了我们上面提到的状态位,还可能同时标志主机状态之类的状态位,而且读了之后还需要清除标志位,比较复杂。我们可使用STM32的HAL库函数来直接检测这些事件的复合标志,降低编程难度。49知识链接光照强度测量STM32F4的I2C简介I2C初始化结构体解析typedef
struct{uint32_tClockSpeed;/*设置SCL时钟频率,此值要低于400000*/uint32_tDutyCycle;/*指定时钟占空比,可选Tlow/Thigh=2/1及16/9模式*/uint32_tOwnAddress1;/*指定自身的I2C设备地址1,可以是7bit或者10bit*/uint32_tAddressingMode;/*指定地址的长度模式,可以是7bit模式或者10bit模式*/uint32_tDualAddressMode;/*设置双地址模式*/uint32_tOwnAddress2;/*指定自身的I2C设备地址2,只能是7bit*/uint32_tGeneralCallMode;/*指定广播呼叫模式*/uint32_tNoStretchMode;/*指定禁止时钟延长模式*/}I2C_InitTypeDef;STM32的HAL库提供了I2C初始化结构体及初始化函数来配置I2C外设。初始化结构体及函数定义在库文件stm32f4xx_hal_IIC.h及stm32f4xx_hal_IIC.c中。50任务实施光照强度测量任务实施前必须准备好表4-8所列的设备/资源。表4-8设备/资源清单表序号设备/资源数量是否准备到位(√)1STM32F407ZET6最小系统1
2BH17501
3杜邦线5
4BH1750软件包(模拟I2C时序)1
方案1使用GPIOPB6、PB7模拟I2C时序,实现BH1750光照数据的获取。51任务实施光照强度测量创建基础工程按图4-19所示的顺序配置I2C1。gy30.h文件代码如下:52任务实施光照强度测量添加代码包在MDK-ARM文件夹同级目录新建文件夹“bh1750”,将代码包中的gy30.h、gy30.c文件输入并保存在该目录下。53任务实施光照强度测量添加代码包gy30.c文件代码如下:54任务实施光照强度测量3.编写应用层代码(1)在main.c文件对应位置输入如程序清单4-3所示的代码。55实验结果光照强度测量3.编写应用层代码(2)在usart1.c文件中添加USART1的串口重定向代码,具体代码参见任务4.1.2节。编译程序,下载程序到核心板,将bh1750模组的VCC接核心板3.3V,GND接GND,SCL接PB.6,SDA接PB.7,ADDR接地,系统上电。PC端打开串口调试助手,设置好串口。打开串口,可看到如图4-20的实验结果。用手遮挡BH1750模块,光照强度变小,移开手,光照数据变大。56任务实施光照强度测量方案2使用STM32F407的硬件I2C,实现BH1750光照数据的获取复制方案1的基础工程文件到hard_iic文件夹,使用KeilMDK打开main.c文件,在对应位置输入如程序清单4-4所示代码。57实验结果光照强度测量编译程序,下载程序到核心板,BH1750模块与核心板连接同方案1,打开串口调试助手,观察到的结果如图4-21所示。用手机手电筒照亮模块,采样到的光照强度数值变得很大,基本符合题目要求。58函数分析光照强度测量程序中用到了以下两个关键函数。HAL_I2C_Master_Transmit()。函数名HAL_I2C_Master_Transmit()函数原型HAL_I2C_Master_Transmit(I2C_HandleTypeDef*hi2c,uint16_tDevAddress,uint8_t*pData,uint16_tSize,uint32_tTimeout)功能描述在阻塞模式下,主器件发送一定数量的数据输入参数1hi2c:指向I2C_HandleTypeDef结构的指针,包含指定I2C配置信息输入参数2DevAddress:目标设备地址,在调用接口之前,数据手册中设备的7位地址值必须右移以丢弃读写方向位输入参数3pData:数据缓冲区指针输入参数4Size:要发送的数据大小输入参数5Timeout:超时时间先决条件无注意事项无返回值HAL状态59函数分析光照强度测量程序中用到了以下两个关键函数。(2)HAL_I2C_Master_Receive()函数函数名HAL_I2C_Master_Receive()函数原型HAL_StatusTypeDefHAL_I2C_Master_Receive(I2C_HandleTypeDef*hi2c,uint16_tDevAddress,uint8_t*pData,uint16_tSize,uint32_tTimeout)功能描述在阻塞模式下,主器件接收一定数量的数据输入参数1hi2c:指向I2C_HandleTypeDef结构的指针,包含指定I2C配置信息输入参数2DevAddress:目标设备地址,在调用接口之前,数据手册中设备的7位地址值必须右移以丢弃读写方向位输入参数3pData:数据缓冲区指针输入参数4Size:要发送的数据大小输入参数5Timeout:超时时间先决条件无注意事项无返回值HAL状态60任务小节光照强度测量I2C用法速度稳定性管脚硬件I2C比较复杂快较稳定需使用特定管脚软件I2C操作过程比较清晰较慢稳定任意引脚,比较灵活我们使用了两种方案实现基于I2C总线的光照模块BH1750测量模块现场的光照强度。两种方案对比,各自特点如表4-11所示。表4-11硬件I2C与I/O口模拟I2C对比本任务介绍了BH1750光照强度测量传感器的物理特性、电气特性、工作原理及特点、指令集、操作时序。归纳了I2C总线协议的三个信号、两个注意、一个状态,并对STM32F4的I2C架构从通信引脚、时钟控制逻辑、数据控制逻辑、整体控制逻辑、通信过程进行介绍。对I2C初始化结构体各成员进行解析。任务实施环节,给出了两种方案(软件I2C、硬件I2C)对BH1750光照强度传感器的光照数据获取,请读者多练习并能举一反三。--
南昌大学“卓越”辅导员培养工程建设本节结束本节结束61任务4.3具备交互功能的人机界面应用开发案例引导OLED显示屏案例引导当操作者按下按键、转动旋钮时,设备的操作结果需要展示给操作者;设备收到其他终端传输的信息、获得传感器信息时也需要展示给设备使用者。在嵌入式产品中,通常采用数码管、OLED屏、LCD屏作为显示输出。常见显示器如图4-23所示。图4-23常见显示器本任务以屏”为例,简要介绍显示屏的类别、显示芯片、借助STM32微控制器驱动OLED屏、TFT-LCD显示屏,实现数字、字符、图形、图片的显示任务。任务描述1任务目标(1)能根据数据手册,利用STM32CubeMX软件,准确配置OLED显示模组。(2)能根据实际硬件绘制显示屏与控制器连接图,适配OLED驱动函数,并能使用函数显示字符、数字。任务1OLED显示屏642(1)能够根据OLED模块数据手册绘制连接关系,并能正确连接开发板和OLED模块。(2)能够根据OLED模块数据手册和连接关系,通过STM32CubeMX软件对OLED模块进行配置。(3)能够调用OLED相关函数显示字符、数字。任务要求OLED显示屏系统与DHT11温湿度传感器、BH1750环境光照强度传感器和OLED显示模块连接,上电后默认每隔一段时间采集一次环境参数,将其显示在OLED显示模块上。任务分析任务1OLED显示屏OLED显示屏本任务使用STM32最小系统连接OLED模块,编写程序使其显示字符、数字。需要用到STM32开发板和OLED模块,通过杜邦线进行两者间的连接。显示模组与控制器的连接如图4-24。首先需要了解OLED模块基本原理,阅读OLED模块说明书以配置合适的接口和数据协议;然后根据说明书的例程代码进行程序编写。图4-24系统连接图任务分析OLED显示屏知识链接OLED显示屏OLED(OrganicLight-EmittingDiode),即有机发光二极管。在嵌入式开发领域,常用OLED模组分辨率为128×64或128×32,单色或双色显示,外型示例如图4-23(b),屏幕大小一般为1.54英寸或0.96英寸。OLED模组最常采用的控制芯片是SSD1306,SSD1306详细资料请参考SSD1306数据手册。OLED模组交付形式如图4-25(a)(b)所示。图4-25OLED模组表4-12OLED模块引脚定义序号引脚名称用途1GND电源地2VCC电源正(3~5.5V)3D0OLED的D0脚,在SPI和I2C通信中为时钟引脚4D1OLED的D1脚,在SPI和I2C通信中为数据引脚5RSTOLED的RST脚,用来复位(低电平复位)6D/COLED的D/C脚,数据(Data)和指令(Com)选择引脚7CSOLED的CS脚,片选引脚,低电平表示选中
[ɔːrˈɡænɪk][laɪtɪˈmɪtɪŋˈdaɪəʊd]任务分析OLED显示屏知识链接2.SPI接口概述SPI(SerialPeripheralInterface,串行外围设备接口),是由摩托罗拉公司提出的一种高速全双工串行同步通信接口,首先出现在其M68HC系列处理器中。由于其传输速度快、简单方便、成本低,因此被广泛使用,从而成为事实上的标准。
目前,许多微控制器、存储器和外设模块都集成SPI接口,如STM32F1/F4/F7系列微控制器、Flash存储器W25X16、双路16位ADC模块AD7705、MicroSD卡模块、TFTLCD模块、三轴加速度传感器模块ADXL345、音频编解码器模块VS1003、13.56MHz非接触式IC卡读卡模块RC522等。基于SPI接口的通信系统使用4条信号引脚,分别是:SCK(SerialClock)MOSI(MasterOutput,SlaveInput)MISO(MasterInput,SlaveOutput)NSS(SlaveSelect,N-Negative负电压)任务分析OLED显示屏知识链接3.SPI接口规范SPI接口的通信时序①起始信号②触发③采样④数据有效⑤停止信号CPHA=0时的SPI通信时序“时钟极性CPOL”用于指示SPI通信设备处于空闲状态(即NSS线为高电平)时,SCK信号线的电平状态。当CPOL=0时,空闲状态的SCK为低电平;当CPOL=1时,空闲状态的SCK为高电平。“时钟相位CPHA”用于配置数据采样的时刻。当CPHA=0时,MOSI和MISO信号线上的信号将会在SCK时钟线的“奇数边沿”被采样;当CPHA=1时,MOSI和MISO信号线上的信号将会在SCK时钟线的“偶数边沿”被采样任务分析OLED显示屏知识链接3.SPI接口规范SPI接口的通信时序任务分析OLED显示屏知识链接3.SPI接口规范SPI接口的通信时序CPHA=1时的SPI通信时序任务分析OLED显示屏知识链接3.SPI接口规范SPI通信的模式
SPI通信的四种模式SPI协议层SPI数据格式SPI时序为CPOL=0、CPHA=0且数据格式为8位数据帧、低位在前高位在后传输:SPISPI通信模式0SPI协议层(时序)SPI协议层SPI数据格式SPI时序为CPOL=0、CPHA=1且数据格式为8位数据帧、高位在前低位在后传输:SPISPI通信模式1SPI协议层(时序)SPI协议层SPI数据格式SPI时序为CPOL=1、CPHA=0且数据格式为8位数据帧、低位在前高位在后传输:SPISPI通信模式2SPI协议层(时序)SPI协议层SPI数据格式SPI时序为CPOL=1、CPHA=1且数据格式为8位数据帧、高位在前低位在后传输:SPISPI通信模式3SPI协议层(时序)任务分析OLED显示屏知识链接2.SPI原理和特性STM32F407微控制器的SPI模块允许微控制器与外部设备以半双工∕全双工、同步和串行方式通信。通常,它被配置为主模式,并为各个从设备提供通信时钟SCK。而且,它可以以多主配置方式工作。不仅如此,STM32F407微控制器的SPI模块还有多种用途,如使用一条双向数据线的双线单工同步传输、使用CRC(CyclicRedundancyCheck,循环冗余校验)检验的可靠通信等。1、STM32SPI的特性SPI1、SPI4、SPI5、SPI6是APB2上的设备,最高通信速率为42Mbit/s,SPI2、SPI3位于APB1总线上,最高通信速率为21Mbit/s。其他功能上没有差异。SPI既可以作为主设备,也可以作为从设备。主模式和从模式下均可由软件或硬件进行NSS管理,动态改变主∕从操作模式。可编程的SPI时序:由时钟极性和时钟相位决定。可编程的SPI数据格式:8位或16位数据帧;LSB在前或MSB在前的数据顺序。STM32F4xxx的SPI引脚如表4-14所示。表4-14STM32F4xxSPI引脚分配
SPI1SPI2SPI3SPI4SPI5SPI6MOSIPA7/PB5PB15/PC3/PI3PB5/PC12/PD6PE6/PE14PF9/PF11PG14MISOPA6/PB4PB14/PC2/PI2PB4/PC11PE5/PE13PF8/PH7PG12SCKPA5/PB3PB10/PB13/PD3PB3/PC10PE2/PE12PF7/PH6PG13NSSPA4/PA15PB9/PB12/PI0PA4/PA15PE4/PE11PF6/PH5PG8任务分析OLED显示屏知识链接2.SPI原理和特性任务分析OLED显示屏知识链接3)STM32SPI主要数据结构及HAL库函数SPI初始化结构体typedef
struct{uint32_tMode;//指定SPI操作模式uint32_tDirection;//指定SPI双向模式状态uint32_tDataSize;//指定SPI数据大小uint32_tCLKPolarity;//指定串行时钟极性uint32_tCLKPhase;//指定时钟相位uint32_tNSS;//指定NSS(片选引脚)是否由硬件或者由软件通过SSI位管理
uint32_tBaudRatePrescaler;//指定了比特率预分频器值
uint32_tFirstBit;//指定数据传输是从MSB向LSB开始
uint32_tTIMode;//指定是否启用TI模式
uint32_tCRCCalculation;//指定是否启用CRC计算
uint32_tCRCPolynomial;//指定用于CRC计算的多项式,该参数必须为奇数
}SPI_InitTypeDef;[pəˈlærəti][feɪz][ˌpɑːliˈnoʊmiəl]任务分析OLED显示屏知识链接3)STM32SPI主要数据结构及HAL库函数(2)SPI常用HAL库函数函数名HAL_SPI_Init()函数原型HAL_StatusTypeDefHAL_SPI_Init(SPI_HandleTypeDef*hspi)功能描述依照SPI_InitTypeDef中指定的参数初始化SPI并且初始化相关处理输入参数hspi:指向SPI_InitTypeDef结构体的指针先决条件无注意事项无返回值HAL状态HAL_SPI_Init()表4-15HAL_SPI_Init()函数任务分析OLED显示屏知识链接3)STM32SPI主要数据结构及HAL库函数(2)SPI常用HAL库函数HAL_SPI_MspInit()表4-16HAL_SPI_MspInit()函数函数名HAL_SPI_MspInit()函数原型HAL_StatusTypeDefHAL_SPI_Init(SPI_HandleTypeDef*hspi)功能描述主要用于完成SPI(SerialPeripheralInterface)的底层硬件初始化,包括相关的GPIO(General-PurposeInput/Output)引脚、时钟等资源的配置。输入参数hspi:指向SPI_InitTypeDef结构体的指针,包含SPI模块的配置信息先决条件无注意事项无返回值无任务分析OLED显示屏知识链接3)STM32SPI主要数据结构及HAL库函数(2)SPI常用HAL库函数HAL_SPI_Transmit()表4-17HAL_SPI_Transmit()函数函数名HAL_SPI_Transmit()函数原型HAL_StatusTypeDefHAL_SPI_Transmit(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout)功能描述在阻塞模式下传输一定量的数据输入参数1Hspi:指向SPI_InitTypeDef结构体的指针,包含SPI模块的配置信息输入参数2pData:数据缓冲区指针输入参数3Size:要发送的数据总量输入参数4Timeout:超时持续时间先决条件无注意事项无返回值HAL状态(如HAL_OK、HAL_ERROR、HAL_BUSY等)任务分析OLED显示屏知识链接3)STM32SPI主要数据结构及HAL库函数(2)SPI常用HAL库函数HAL_SPI_Receive()表4-18HAL_SPI_Receive()函数函数名HAL_SPI_Receive()函数原型HAL_StatusTypeDefHAL_SPI_Receive(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout)功能描述在阻塞模式下接收一定量的数据输入参数1hspi:指向SPI_InitTypeDef结构体的指针,包含SPI模块的配置信息输入参数2pData:数据缓冲区指针输入参数3Size:要发送的数据总量输入参数4Timeout:超时持续时间先决条件无注意事项无返回值HAL状态任务分析OLED显示屏知识链接3)STM32SPI主要数据结构及HAL库函数(2)SPI常用HAL库函数HAL_SPI_TransmitReceive()表4-19HAL_SPI_TransmitReceive()函数函数名HAL_SPI_TransmitReceive()函数原型HAL_StatusTypeDefHAL_SPI_TransmitReceive(SPI_HandleTypeDef*hspi,uint8_t*pTxData,uint8_t*pRxData,uint16_tSize,uint32_tTimeout)功能描述在阻塞模式下发送和接收一定量的数据输入参数1hspi:指向SPI_InitTypeDef结构体的指针,包含SPI模块的配置信息输入参数2pTxData:发送数据缓冲区指针输入参数3pRxData:接收缓冲区指针输入参数4Size:要发送和接收的数据总量输入参数5Timeout:超时持续时间先决条件无注意事项无返回值HAL状态任务分析OLED显示屏知识链接3.OLED显示的主流设计模式如图4-29所示,建立一个二维坐标系,在单色模式下,我们可以用0表示对应像素点关闭发光,用1表示对应像素点开启发光。以128×64点阵为例,一整屏的像素信息即可使用128×8字节数据来表示。
图4-29①集成了显示驱动芯片(如:SSD1306),该驱动芯片体积很小,一般被封装在显示屏背面的玻璃基板上。②尺寸可选0.96寸、1.3寸、1.54寸等,显示模块整体体积小。③分辨率较高,一般为128×64。④所需供电电压低,一般为3.3V。⑤支持多种接口,如:8位6800/8080并行接口、3线/4线SPI接口和IIC接口等,用户可根据应用需求选择合适的接口方式。SSD1306芯片自身具备显示缓存,可以将需要更改的像素点信息通过芯片提供的命令单独或者批量写入其显示缓存中,随即由其自动更新到OLED屏。任务分析OLED显示屏知识链接4.OLED显示驱动驱动程序设计以“由点及面”“分层设计”为思路,先实现基础的写数据、写命令函数,再逐一实现画单一像素点、画线、写字符等函数,同时需要实现屏幕初始化、关闭屏幕、开启屏幕、清空缓存、整屏更新等功能函数。GitHub上有大量优秀的OLED显示驱动函数库,OLED模块厂家也会提供相关驱动函数库。开发者需要理解OLED显示原理,并根据硬件实际情况对驱动函数进行改动以适配。序号名称函数原型说明1初始化函数voidssd1306_Init(void);初始化,设置OLED亮度等参数2显示缓存填充函数ssd1306_Fill(SSD1306_COLORcolor)整屏填充、清屏函数,仅改变缓存3显示更新函数voidssd1306_UpdateScreen(void)将显示缓存中的内容发送给OLED显示。执行该函数前,其他画图函数仅改变显示缓存,不直接改变OLED画面。4画像素点函数voidssd1306_DrawPixel(uint8_tx,uint8_ty,SSD1306_COLORcolor)画像素点,所有画图函数的基础函数,参数为点坐标和颜色(0或1)5写单个字符函数charssd1306_WriteChar(charch,FontDefFont,SSD1306_COLORcolor)写单个字符,字符为字符库中预先设定,需先用光标函数指定起始位置表4-20ssd1306.c文件中包含的主要函数列表6写字符串函数charssd1306_WriteString(char*str,FontDefFont,SSD1306_COLORcolor)连续写多个字符,需先用光标函数指定起始位置7设置光标函数ssd1306_SetCursor(uint8_tx,uint8_ty)设定写字符时的起始位置8其他画图函数ssd1306_Line(x1,y1,x2,y2,color)ssd1306_DrawArc(x,y,radius,color)ssd1306_DrawArcWithRadiusLinessd1306_DrawCirclessd1306_FillCirclessd1306_Polylinessd1306_DrawRectanglessd1306_FillRectanglessd1306_DrawBitmap①画线,起始点坐标、结束点坐标、颜色;②画角,圆心坐标、角度、颜色;③画弧,参数略,下同;④画圆;⑤画实心圆;⑥画矩形线;⑦画矩形;⑧画实心矩形;⑨画位图。序号名称函数原型说明任务分析OLED显示屏知识链接显示驱动芯片控制原理SSD1306的GDDRAM存储空间大小为1024字节,该存储空间里的每个bit与OLED显示屏上128×64的像素点阵是一一对应的。这些空间被分成了8页(编号Page0~Page7),每页含128个位段(编号Seg0~Seg127)。SSD1306GDDRAM的分页结构图任务分析OLED显示屏知识链接显示驱动芯片控制原理GDDRAM某分页(Page2)的存储结构,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026版)校园欺凌防治工作总结
- 二次函数y=ax²+bx+c的图象和性质课件 2026-2027学年人教版数学九年级上册
- 2026秋小学冀人版科学五年级上册第二单元 简单机械《5 轮轴的秘密》教学设计
- 社区协商面试题目及答案
- 2026年一建市政公用工程实务考前基础通关特训试卷(含答案)
- 2026年一建民航机场工程实务考前真题模拟通关试卷(含答案)
- 2026年一建民航工程基础测试试卷及答案
- 2026党政领导面试题及答案
- 2026年一建建筑实务考前考前必刷密卷试卷及答案
- 2026规范停车面试题及答案大全
- 2026年部编版新教材语文四年级上册第六单元测试题及答案
- 2026年小红书爆款笔记创作公式与算法机制
- 静脉炎分级评估表(INS标准)
- 2026-2030中国羟基乙酸行业竞争状况与应用趋势预测报告
- 2026年消防知识和技能考试试题及答案
- 2026年新版应急处置卡共31项含管理和操作岗位
- 2026年丝绸之路大数据有限公司应届毕业生招聘考试备考试题及答案解析
- 物业工程标准化运维培训体系
- 2026年金属非金属矿山(露天矿山)安全管理人员试题附答案详解【考试直接用】
- 2026年山西省太原市中考语文一模试卷(含详细答案解析)
- 花篮式悬挑脚手架监理实施细则范本
评论
0/150
提交评论