




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TICC2540蓝牙模块学习笔记整理接触CC2540几天,终于有了初步的理解,现将笔记整理如下,只是皮毛,如有错误,还请指正,还有好多没闹明白的地方,以后应该还会继续向里面更新一、整体1TI的蓝牙平台支持2种协议栈/应用配置单一设备配置、网络处理器配置2协议栈最顶层2个通用PROFILEGAP通用访问配置文件层GENERICACCESSPROFILEGATT通用属性配置文件层GENERICATTRIBUTEPROFILE3GAP处理设备的接入方式及接入过程设备发现链路建立链路终止启动安全功能设备配置(主要是连接参数配置)GATT完成服务器与客户端之间通信的相关子过程4BLE支持40个信道的跳频机制,其中3个通道用于ADVERTISE,剩下的用于数据通信5OS抽象层疑问如何配置一个新的任务,任务的优先级,事件触发机制,消息的传递6主要用于实现的是2个代码文件OSAL_SIMPLEBLEPERIPHERALC任务回调函数数据的定义和任务初始化函数定义作为OSAL的外部全局变量SIMPLEBLEPERIPHERALCBLE应用程序的实现代码,该源文件调用一系列的BLEAPI函数,完成复杂的蓝牙协议通过CONSTPTASKEVENTHANDLEFNTASKSARR数组来存储要调用的函数SIMPLEBLEPERIPHERALH一些常量的定义,和蓝牙应用程序任务初始化和任务回调函数声明。7LL层任务函数优先级最高,而应用程序函数的优先级最低8OSAL为每个任务分配了1个16位的EVENT,每一位代表一个事件,最高位代表SYS_EVENT_MSG,这个事件被OSAL系统保留9MAIN函数中最后进入的VOIDOSAL_RUN_SYSTEMVOID,这个函数就是看相应任务有没有事件发生,有时间发生就跳转到相应的函数10任务间通信,一般通过事件和消息进行,每当任务间有消息传递,都会触发SYS_EVENT_MSG事件,并且每次处理完事件后,都要清空标志位。OSAL_SET_EVENTOSALH中该函数会直接调度一个事件OSAL_START_TIMEREXOSAL_TIMERSH中需要掩饰触发的事件,调用这个函数11HEAPMANAGER堆栈管理,函数OSAL_MEM_ALLOC,给函数分配需要的字节数,OSAL_MEM_FREE用来释放内存。二、OSAL(操作系统抽象层OPERATESYSTEMABSTRACTIONLAYER)1OSAL中的消息发送消息前,用OSAL_MSG_ALLOCATE函数分配内存空间,填充数据,调用OSAL_MSG_SEND将消息发送到指定的函数中去。然后置位该函数的SYS_EVENT_MSG,然后接收端使用OSAL_MEM_RECEIVE将消息接收过来,接收完成后,使用OSAL_MEM_DEALLOCATE函数来回收当前消息所占用的内存。OSAL推荐在任务中使用独立的消息接收函数来处理消息,例如SIMPLEBLEPERIPHERAL_PROCESSOSALMSG函数。2GAP(通用访问配置文件层GENERICACCESSPROFILE)连接过程设备发现链路建立链路终止启动安全功能设备配置(主要是连接参数配置)GAP层总是工作在以下角色中的1种BROADCASTER广播员,表明我在,但是你们只能看到我,不可以连接我OBSERVER观察者,看看谁在,我只观察,不连接PERIPHERAL外设,我存在,设想连我,我就连谁CENTERAL中心,看看谁在,工作在单层或多层的连接3连接过程PERIPHERAL向外广播CENTERAL接收到向从机发送“SCAN”命令PERIPHERAL以“SCANRESP”命令回应CENTERAL发送连接请求4CONNECTINTERVAL通信间隙每个间隔125MS为基本单位,最小6单位75MS,最大3200单位40S。5SLAVELATENCY从机延时表示PERIPHERAL可以连续忽略的连接数,最大不能超过499个,最长不能超过32S。6SUPERVISIONTIMEOUT监管超时2个成功连接事件之间的最大间隔。7PROFILE一种规范;SERVICE一个服务;CHARACTERISTIC特征值;UUID统一标识码(SERVICE,CHARACTERISTIC都需要),CENTERAL与PERIPHERAL间的通信,均通过CHARACTERISTIC实现8发送数据主从CLIENT调用GATT_WRITECHARVALUE函数发送;从主SERVICE调用GATT_NOTIFICATION函数实现。9接收数据从C/CCOMPILEROPTIMIZATIONS中的LEVEL设置为NONE。11问蓝牙协议分层很多且比较复杂,该如何掌握呢答蓝牙协议从应用层到物理层一共分了8层,看上去比较复杂且API函数很多。首先不必要知道每一层的具体实现,掌握与应用紧密关联GAP/GATT(或者GAPROLE和GATTPROFILES)层就可以满足大部分设计需要;每一层的软件都是通过OSAL来调用的,因此需要了解OSAL的基本原理任务/事件/消息/定时器/动态分配内存;最后把蓝牙通讯过程理解,将有助于开发。12问OSAL是一个操作系统吗答OSAL(OPERATINGSYSTEMABSTRACTIONLAYER)操作系统抽象层,它不是一个真正的操作系统(它没有CONTEXTSWITCH上下文切换功能),但它巧妙地组织各任务,支持任务优先级,任务之间可以通过事件和消息来通信,为任务提供软定时器和动态内存分配。要避免的陷阱是,应用任务的单个函数运行时间不能太长(如操作大批量数据的FLASH写),否则它无法及时调度高优先级的LL(LINKLAYER)任务而导致蓝牙通信中断。13问蓝牙节点是如何组成微微网的呢答蓝牙节点组网中,只能存在一个主节点(CENTRAL)和多个从节点(PERIPHERAL),从节点是发出信号者,主节点是扫描且发起连接者。14问主节点和从节点通信的过程是怎样的呢答当从节点发出广告信号(包括设备地址和设备名称之类的附加信息);主节点收到此广告信号后,向从节点发出扫描请求;当从节点回应扫描时,就完成了设备发现过程。接着主节点向从节点发出连接请求(包括连接时隙、从节点待机次数、连接超时值),从节点回应连接,就完成了建立连接。为了安全起见,一些数据的访问需要认证,它的完成是这样的一方(可以是主节点,也可以是从节点)向另一方索要6位数字的密码,之后,两个节点彼此交换安全密钥用于加密和认证,此过程称为配对。认证的过程比较繁琐,BLE协议支持两节点保存认证的安全密钥(一般是非易失性存储器中),以便于两节点下次连接后快速认证,这就是绑定技术。15问蓝牙通信中两个节点如何交换数据答这是蓝牙通信中最让初学者迷惑的地方。大部分通信,尤其是TCP/IP,交换数据的婚介是数据包,但蓝牙通信中,工程师找不到数据包访问方式,于是就产生疑问。其实蓝牙最底层也是基于无线数据包交换,只是通过层层封装,交付给工程师的API接口就变成了CLIENT访问SERVER的方式。16问CLIENT和SERVER节点是如何定义呢答通俗地说吧,SERVER(服务器)就是数据中心,CLIENT(客户端)就是访问数据者。特别说明,它与主/从设备是独立的概念一个主设备既可以充当SERVER,又可以充当CLIENT;从设备亦然。17问SERVER是如何提供数据呢答SERVER首先将一个服务按“属性/句柄/数值/描述”这种格式予以组织,然后调用API函数GATTSERVAPP_REGISTERSERVICE将服务数据进行注册。举个实例吧,设提供一个电池电量服务字节,它允许CLIENT读取,数据为一个8比特无符号数(0100),它的组织如下022500192A,这5个数据(小端格式)分别是0X02只读属性,0X0025句柄;0X2A19服务UUID。18问不明白SERVER提供服务中的UUID答UUIDUNIVERSALUNIQUEIDENTIFIER全球惟一标识符,本来是SIC组织分配给特定蓝牙服务的标识,如分配0X2A25为设备序列号的UUID,这样任意蓝牙设备都可以通过它得到另一个设备的序列号。打个类比,它就像书名,如现代操作系统,所有人一看就知道它是计算机大师ANDREWSTANENBAUM写的书。19问什么是SERVER提供服务中的句柄呢答句柄HANDLE就是服务数据在数据中心的地址,当所有的服务数据组织起来后,它总得有个先后顺序,某个服务的位置就是它的句柄。还是上面的类比,如果想去图书馆借阅现代操作系统,需要查明该书在哪一层楼,哪个房间,这就是该书的HANLE。20问为什么SERVER提供的服务中有描述答有些服务是有描述(DESCRIPTOR)的,它是用于CLIENT配置该服务的功能(通知或者显示)。像某人没有借到现代操作系统该书(可能是被别人借光了),他(她)可以打个电话给图书馆工作人员,请求一旦该书可以借阅了给他一个通知,这个过程相当于配置该书的DESCRIPTOR。21问服务的属性与描述有区别吗答有区别,服务的属性是SERVER设置访问权限。就像图书馆的工作人员可以设置现代操作系统仅能在阅览室看不能外借(只读),或者即可以看也可以外借(读/写)。22问CLIENT如何访问SERVER的服务呢答大致分三类读取服务的值,需要知道服务的UUID或者HANDLE;写服务的值,需要知道服务的HANLE;写服务描述符,需要知道该DESCRIPTOR的HANLE。23问如何知道一个服务的HANDLE答根据服务的UUID调用API函数GATT_READUSINGCHARUUID协议栈会返回该服务的HANDLE。特别注意的是,一个服务的DESCRIPTOR的HANDLE总是该服务的HANDLE1,如电池电量服务的HANDLE是0X0025,那么它的DESCRIPTOR的HANDLE是0X0026。24问SERVER可以访问CLIENT吗答蓝牙通信中,SERVER不能直接访问(读/写)CLIENT,但是可以通知(NOTIFICATION)CLIENT,通知的前提是CLIENT通过写DESCRIPTOR使能通知功能。例如,某SERVER发现电池电量已经低于安全阀值,它可以调用GATT_NOTIFICATION通知所有已连接的CLIENT,但是CLIENT接收后如果处理是它自己的事情。25问如果得知电池容量答任何使用电池供电的设备都必须精确监控电池容量,否则设备可以突然断电而停止工作,它的基本原理是通过ADC(模数转换器)计算电池电压。以CC2540芯片用一钮扣电池为例,电池电压从20V30V,即电量的0100;CC2540有一10比特的ADC,量程范围为0511,参考电压为125V,最大测量电压为375V,以上信息可以得知(V/3)/125511ADC,则20V273ADC,30V409ADC,根据下图可以很容易得知ADC转换为电压的公式PERCENTAGE/X273100/13625/34,变换后为PERCENTAGEX27325/34,为四舍五入提高计算精度则有PERCENTAGEX2732533/34。26问蓝牙发射信号功率调整会影响通信距离吗答会,以TI公司的CC2540为例,它支持4种发射功率选择4DBM、0DBM、6DBM和23DBM,按无线电功率定义LDBM10LGPWR/1MW,以上4种分贝值换算成瓦特为251MW、1MW、0251MW和0005MW,有效通信距离分别为30米、10米、7米和3米。27问如何知道两个蓝牙通信节点之间的距离答要知道蓝牙通信节点(如手机和蓝牙设备)之间的距离,最容易实现的方法是通过读取接收RSSI(RECEIVEDSIGNALSTRENGTHINDICATION)值来计算。无线通讯中功率与距离的关系如下其中A可以看作是信号传输1米远时接收信号的功率,N是传播因子(它受障碍,温度和湿度等影响),R是节点之间的距离。当确定了常数A与N的值后,距离R就可以根据PRDBM计算出来。28问如何获取蓝牙节点的接收RSSI值答具体的设备接收RSSI值的方法不一样,以IPHONE手机为例,IOS提供API函数获取RSSI值;TI公司的CC2540芯片的BLE协议栈中,首先将读取RSSI值回调函数挂载到GAPROLESRSSIREAD_T类型的指针下,建立连接后,主设备调用GAPCENTRALROLE_STARTRSSI(),从设备调用GAPROLE_SETPARAMETERGAPROLE_RSSI_READ_RATE,。这样就可以定时读取接收的RSSI值了。29问如何开展读取RSSI值的实验答读取RSSI值的实验可以这样搭建,主设备固定位置,向从设备发送信号,从设备LED光和BUZZER报警为通信成功,逐次移动从设备,而获取RSSI值随物理距离之间的关系。下图是笔者做实验的数据DISTANCEM12345678910RSSIDBM47597380807985888687LOSSP0091127250322249实验器材为2块CC2540芯片,主芯片发射功率为4DBM251MW,LOSS是通信节点中失败次数。30问如何将接收RSSI实验数据得到距离计算公式呢答最好的工具是EXCEL软件,以上表中的实验数据和EXCEL2007为例。首先选中DISTANCE和RSSI两行,点击“插入散列图”,软件会自动生成如下图选取其中任意点,点右键,“添加趋势线对数”,将会出现下图可见RSSI与距离的关系是比较符合指数函数,再点击“显示公式”此时得到指数函数公式为Y4953177LNX,再把自然对数换成10常用对数,则有Y49534071LGX。通过以上几步就轻松得到RSSI与距离之间的计算公式。31问针对RSSI采样值选用什么样的滤波算法答RSSI采样值遵循以下特点有个别的脉冲干扰引起极大值和极小值的出现,其他采样数据值沿平均值分布,比较适合的算法是滑动防脉冲干扰平均滤波法。它的原理是,设有N个单位的队列,用新的采样值覆盖旧的采样值,去除队列中最大值和最小值后,再计算队列中采样数据的平均值。用C语言描述如下STATICINT8SFILTERINT8SCHVALDEFINEFIFO_NUM10INT8SCHMINVAL,CHMAXVAL,CHTEMPINT16SNCNT,NSUMSTATICINT8SS_CHIX0,S_CHISFULLFALSESTATICINT8SS_ACHBUFFIFO_NUM/SAVETHENEWVALUE,KICKOUTTHEOLDESTONE/S_ACHBUFS_CHIXCHVALIFS_CHIXFIFO_NUMS_CHIX0/WRAPTO1THUNIT/S_CHISFULLTRUE/NUMBEROFSAMPLEDDATALESSTHANN/IFS_CHISFULLNSUM0FORNCNT0NCNTCHMAXVALCHMAXVALCHTEMPELSEIFCHTEMPTYPEUUID0,PATTRTYPEUUID1SWITCHUUIDCASEGATT_CLIENT_CHAR_CFG_UUIDSTATUSGATTSERVAPP_PROCESSCCCWRITEREQCONNHANDLE,PATTR,PVALUE,LEN,OFFSET,GATT_CLIENT_CFG_NOTIFYIFSTATUSSUCCESSUINT16CHARCFGBUILD_UINT16PVALUE0,PVALUE1IFBATTSERVICECBBATTSERVICECBCHARCFGGATT_CFG_NO_OPERATIONBATT_LEVEL_NOTI_DISABLEDBATT_LEVEL_NOTI_ENABLEDBREAKDEFAULTSTATUSATT_ERR_ATTR_NOT_FOUNDBREAKRETURNSTATUS2、这段程序为从机发送通知的示例,主机还需要做两件事情,一是通过WRITE过程将从机的CFG值写为0X0001,然后由第一步中的WRITE特征值回调函数处理,并调用此函数。二是主机中需要有通知消息的处理过程/LINKDBITEM_T是蓝牙建立链接之后的一个结构体,每个链接有自己的一个HANDLE值,如果当前蓝牙只有一个链接,则该HANDLE值为0;PLINKITEM的值是从LINKDB_PERFORMFUNC()传进来的。STATICVOIDBATTNOTIFYCBLINKDBITEM_TPLINKITEM/检查是否已经建立蓝牙连接IFPLINKITEMSTATEFLAGSIFVALUE/此处的HANDLE是将要发送的数据的HANDLE,不是CFG的HANDLENOTIHANDLEBATTATTRTBLBATT_LEVEL_VALUE_IDXHANDLENOTILEN1NOTIVALUE0BATTLEVELGATT_NOTIFICATIONPLINKITEMCONNECTIONHANDLE,广播时间模式1保持无限广播GENERALDISCOVERYMODE下,先设置TGAP_GEN_DISC_ADV_MIN0。GAP_SETPARAMVALUETGAP_GEN_DISC_ADV_MIN,0,再使能广播。至于GAPROLE_SETPARAMETERGAPROLE_ADVERT_OFF_TIME,SIZEOFUINT16,不用管,因为当TGAP_GEN_DISC_ADV_MIN0时。GAPROLE_ADVERT_OFF_TIME是无效的。2单次限时广播先设置广播的持续时间,如3SLIMITEDDISCOVERYMODE下,GAP_SETPARAMVALUETGAP_LIM_ADV_TIMEOUT,3/单位秒GENERALDISCOVERYMODE下,GAP_SETPARAMVALUETGAP_GEN_DISC_ADV_MIN,3000/单位MS然后注意设置GAPROLE_ADVERTOFFTIME0。GAPROLE_SETPARAMETERGAPROLE_ADVERT_OFF_TIME,SIZEOFUINT16,这样你开启一次广播,持续3秒后就自动停止了。3循环限制广播先设置你每次的广播时间,如10秒TGAP_LIM_ADV_TIMEOUT10。GAP_SETPARAMVALUETGAP_LIM_ADV_TIMEOUT,10。然后设置关闭广播的持续时间,如20秒GAPROLE_ADVERTOFFTIME20000。GAPROLE_SETPARAMETERGAPROLE_ADVERT_OFF_TIME,SIZEOFUINT16,这样的效果就是广播10秒,停止20秒。广播10秒如此循环。BLE芯片CC254X系统资源1CC254X内核11内核介绍CC254X内部采用的是增强型8051内核,指令执行速度较标准的8051要快,主要基于L增强型8051的单周期指令是1个时钟周期,而标准8051需要12个时钟周期;L没有了浪费的总线状态(WASTEDBUSSTATES);由于一个指令周期能与存储中指令预取保持同步,使得大多数单周期指令能在一个时钟周期内完成,此外,增强型8051内核也包含一个“SECONDDATAPOINTER”和一个扩展的18个中断单元。12存储空间8051有分离的程序存储空间和数据存储空间,可细分成4中不同的存储空间LCODE只读程序存储,寻址空间64KB;LDATA可读写数据存储空间,可被直接或间接寻址,256BYTES,低128BYTE可被直接或间接寻址,高128BYTES只能间接寻址(SFR除外,SFR为直接寻址)LXDATA片外数据存储,寻址空间64K,LSFR寄存器区域,直接寻址;2时钟系统CC254X内部时钟系统分两部分,系统时钟SYSTEMCLOCK和睡眠看门狗时钟。21系统时钟CPU运行主频,分频之后也为TIMER1、TIMER3、TIMER4计数时钟;支持2种时钟源,内部16MHZRC晶振或外部的32MHZ晶振;上电默认是IRC16MHZ;IRC16MHZ启动时间比32MHZ时间短,功耗低,但是精度差,不能用于射频相关的数据传输,射频相关操作必须要等32MHZ时钟稳定之后才能进行;22睡眠看门狗时钟为睡眠定时器和看门狗运行提供时钟;支持2种时钟源,内部32KHZRC晶振或外部的32768KHZ晶振;上电默认是内部32KHZ;IRC32KHZ启动时间比外部32768KHZ时间短,功耗低,但是精度差当开启IRC32KHZ校准功能使用外部的32MHZ分频,SLEEPCMDOSC32K_CALDIS1;CLKCONCMDOSC32K1,IRC32KHZ能以32753KHZ工作;23时钟初始化代码分析摘自TIBLEV121HALSOURCECODE/START16MHZRCOSC/SWITCHTOTHE16MHZHSOSCANDWAITUNTILITISSTABLESET_OSC_TO_HSOSC/SET32KHZOSCANDWAITUNTILITISSTABLESET_32KHZ_OSC/SWITCHTOTHE32MHZXOSCANDWAITUNTILITISSTABLESET_OSC_TO_XOSC/STOP16MHZRCOSCSTOP_HSOSC这段代码有对IRC16MHZ进行开关控制(SLEEPCMDBIT2),实际根据手册,SLEEPCMDBIT2始终为1,无需配置,个人猜测最初的CC254X或者CC253X可以对IRC16MHZ进行开关控制,后来取消了这部分,改为上电默认IRC16MHZ打开,且可以默认它已经运行稳定(CLKCONCMDOSC1CLKCONSTAOSC1),所以实际时钟初始化可以只是/SET32KHZOSCANDWAITUNTILITISSTABLESET_32KHZ_OSC/SWITCHTOTHE32MHZXOSCANDWAITUNTILITISSTABLESET_OSC_TO_XOSC3电源管理CC254X包含5种电源模式ACTIVE,IDLE,POWERMODE1/2/3PM1PM3,其中的PM1PM3也称为睡眠模式。31电源模式CC254X的5种电源模式涉及晶振和片内18VVOLTAGEREGULATORDIGITAL部分的开关控制,高频率晶振包括XOSC32MHZ和IRCOSC16MHZ,低频率晶振包括XOSC32768KHZ和IRCOSC32KHZ。ACTIVE模式为正常工作的全功能模式,片内18V电压转换芯片、高频晶振(32MHZ或16MHZ)、低频晶振(32768KHZ或32KHZ)都处于正常工作状态;IDLE模式除了CPU内核处于“IDLE”外,其它等同于ACTIVE模式;PM1模式适应于能快速唤醒,睡眠时间不超过3MS的应用场合;PM2模式睡眠时间超过3MS,一般使用SLEEPTIMER定时唤醒;PM3模式最低功耗状态,睡眠时间超过3MS,一般使用外部IO中断方式唤醒。POWERMODEHIGHFREQUENCYOSCLOWFREQUENCYOSCVOLTAGEREGULATORACTIVEXOSCORIRCOSCXOSCORIRCOSCONIDLEXOSCORIRCOSCXOSCORIRCOSCONPM1NONEXOSCORIRCOSCONPM2NONEXOSCORIRCOSCOFFPM3NONENONEOFFCC254X睡眠模式和IDLE模式切换到ACTIVE模式方法POWERMODEWAKEUPTOACTIVEMODEACTIVE/IDLEPOR,BOD,EXTERNALRESET,EXTERNALINTERRUPT,SLEEPTIMEREXPIRESPM1POR,BOD,EXTERNALRESET,EXTERNALINTERRUPT,SLEEPTIMEREXPIRESPM2POR,EXTERNALRESET,CRCRESETCC2541ONLY,EXTERNALINTERRUPT,SLEEPTIMEREXPIRESPM3POR,EXTERNALRESET,CRCRESETCC2541ONLY,EXTERNALINTERRUPT,32电源管理控制CC254X使用寄存器PCONIDLE和SLEEPMODE来控制,进入睡眠模式一般先设置要进入哪种非ACTIVE模式(IDLE、PM1PM3)SLEEPMODE10MODE00ACTIVE/IDLE01PM110PM211PM3设置完成睡眠模式之后,使PCONIDLE1,将立即使CC254X进入相应的非ACTIVE模式,在USERSGUIDE里面特别有说明,在进入非ACTIVE模式,需要PCONIDLE1指令必须4字节对齐地址,且之后的第一条指令必须是非4字节对齐存放。对于PM3,由于其BOD已经不起作用,对于CC2541可以利用SRCRCRESULT来判断电压是否BROWNOUT。33电源管理代码分析设定SLEEPMODE10之后,调用HALSETSLEEPMODE进入非ACTIVE模式,唤醒之后从PCONIDLE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度跨文化沟通能力提升计划英文版国际贸易专员岗位劳动合同
- 2025年度婚姻纠纷案件法律援助及全面跟踪服务合同
- Ergocristam-生命科学试剂-MCE
- 3-Oxo-13-methyltetradecanoyl-CoA-3-Oxo-13-methyltetradecanoyl-coenzyme-A-生命科学试剂-MCE
- 地摊营销心理学知识培训课件
- 辽宁民族师范高等专科学校《自然地理学方法之土壤生物》2024-2025学年第一学期期末试卷
- 长沙理工大学《信号分析与处理》2024-2025学年第一学期期末试卷
- 河北工程大学科信学院《国际品牌营销》2024-2025学年第一学期期末试卷
- 长春师范高等专科学校《JavaEE企业级应用开发课程设计》2024-2025学年第一学期期末试卷
- 实习手册课件信息填写
- 2025年秋季新学期教学工作会议上校长讲话:扎根课堂、走近学生、做实教学-每一节课都值得全力以赴
- 2025年度船舶抵押贷款合同范本:航运融资与风险规避手册
- 2025年新人教版小升初分班考试数学试卷
- 2025劳动合同范本【模板下载】
- 以课程标准为导向:上海市初中信息科技教学设计的探索与实践
- 2025年公共基础知识考试试题(附完整答案)
- 北川羌族自治县农业农村局北川羌族自治县测雨雷达建设项目环评报告
- 2025社区工作者必考试题库(含答案)
- 友邦资讯面试题目及答案
- 2025年山东青岛海关缉私局辅警招聘考试笔试试卷【附答案】
- 飞灰处置再生资源化利用项目可行性研究报告模板-立项备案
评论
0/150
提交评论