




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.1GPIO的硬件结构和功能
5.2GPIO寄存器
5.3GPIO库函数
5.4库函数与寄存器的关系
5.5应用实例第5章GPIO原理及应用本章学习的知识点
关键要从接口的外部电气特性、内部工作原理和应用编程的方法几个方面来掌握:掌握接口的外部引脚功能及电气特性,以便将它和其
它外设相连;掌握接口的工作方式及工作特点,以便选择适合于用
户要求的工作方式;掌握接口的控制字(写)和状态字(读),它将决定接口的
工作方式及工作特点;掌握接口的寻址和寄存器的读写控制方法;掌握接口的初始化编程。5.1GPIO硬件结构和功能多种功能的双向IO:多组端口(PA、PB、PC、PD、PE、PF、PG)每个端口共16位标准IO口可承受5V电压IO口可吸纳25mA电流可配置输出速度达到50MHz多达16路模拟输入stm32f10x_gpio.c文件中的GPIOvoidGPIO_DeInit(GPIO_TypeDef*GPIOx){/*Checktheparameters*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
if(GPIOx==GPIOA){RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,DISABLE);}elseif(GPIOx==GPIOB){RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,DISABLE);}……else{if(GPIOx==GPIOG){RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG,DISABLE);}}}GPIO外部引脚5.1.1GPIO硬件结构◆GPIO端口的内部结构:
八种工作模式
浮空输入模式上拉输入模式下拉输入模式模拟输入模式开漏输出模式推挽输出模式复用开漏输出模式复用推挽输出模式5.1.2复用功能复用功能IO口功能中断、TIM、UART等第2功能注意设置配置该引脚输入输出模式如果有多个复用功能模块对应同一个引脚,仅可使能其中之一,其它模块保持非使能状态例如要使用STM32F103VBT6的47、48脚的USART3功能,则需要配置47脚为复用推挽输出或复用开漏输出,配置48脚为某种输入模式,同时使能USART3并保持I2C的非使能状态。
5.1.3GPIO输入功能
述
输入电路部分
浮空输入:是指在电路内部既不接上拉电阻(外接VDD)又不接下拉电阻(外接VSS)的输入模式,是一个带有施密特触发输入的三态缓冲器,由于它具有很高的直流输入等效阻抗,所以在使用标准的通信协议(如I2C,USART)时,将I/O口配置成这种工作模式,在执行I/O读操作时,将引脚当前电平状态读到内部总线上。
上拉输入:是指在电路内部接上拉电阻的输入模式,再经过施密特触发器转换为0,1电平信号。
下拉输入:和上拉输入原理相同,只是在电路内部接了下拉电阻。
模拟输入:是指不经过内部上拉或下拉,也不经过施密特触发器输入模式,它可以直接把输入的电压信号传给片上外设模块5.1.4GPIO输出功能推挽输出推挽输出的基本功能通用推挽输出复用推挽输出开漏输出开漏输出的基本功能通用开漏输出复用开漏输出输出电路部分
推挽输出:是指线路经过P-MOS(Positive)和N-MOS(Negative)管组成的单元电路,在输出高电平(3.3v)时,P-MOS负责灌电流。在输出低电平(0v)时N-MOS负责拉电流。
开漏输出:是指线路只经过了N-MOS而没有接负责灌电流的P-MOS管的输出模式。在输出1时断开(此时相当于高阻态),在输出0时由N-MOS拉低。
复用开漏/推挽输出:这两种输出模式的原理与普通输出模式相同,只不过这两种输出模式常用于特定的场合。(1)推挽输出的基本功能(2)通用推挽输出(3)复用推挽输出(4)开漏输出的基本功能(2)通用开漏输出(3)复用开漏输出5.1.5GPIO速度选择I/O口的输出模式下,有3种输出速度可选,分别为2MHz、10MHz和50MHz
是指I/O口驱动电路的响应速度而不是输出信号的速度通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频驱动电路噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样有利于提高系统的EMI(电磁干扰)性能。5.1.6钳位功能[-0.6V,3.9]小结输出模式输出信号来自推挽或开漏输出带宽通用开漏输出输出数据寄存器开漏可选:2MHz10MHz50MHz通用推挽输出推挽开漏复用输出片上外设开漏推挽复用输出推挽表5-1GPIO输出模式
小结表5-2GPIO输入模式
输入模式输入信号去向上拉或下拉施密特触发器模拟输入片上模拟外设ADC
无关闭浮空输入输入数据寄存器或片上外设无激活下拉输入输入数据寄存器或片上外设下拉激活上拉输入输入数据寄存器或片上外设上拉激活5.2GPIO寄存器表1GPIO相关寄存器功能寄存器功能GPIOx_CRL低位配置寄存器用来设置端口低8位的工作模式GPIOx_CRH用来设置端口高8位工作模式GPIOx_IDR如果端口被配置成输入端口,可以从GPIOx_IDR相应位读数据GPIOx_ODR如果端口被配置成输出端口,可以从GPIOx_ODR相应位读或写数据GPIOx_BSRR通过该寄存器可以对端口数据输出寄存器GPIOx_ODR每一位进行置1和复位操作GPIOx_BRR通过该寄存器可以对端口数据输出寄存器GPIOx_ODR每一位进行复位操作GPIOx_LCKR当执行正确的写序列设置了位16(LCKK)时,该寄存器用来锁定端口位的配置◆
STM32每个IO端口有7个寄存器来控制,分别是:
CRL和CRH:配置模式的2个32位的端口配置寄存器,控制着每个IO口的模式及输出速率;
IDR和ODR:32位的数据寄存器;
BSRR:
32位的置位/复位寄存器;
BRR:16位的复位寄存器;LCKR:
32位的锁存寄存器;◆端口低配置寄存器CRL的描述,如下图所示:◆端口低配置寄存器CRH的描述,如下图所示:端口位配置表配置模式CNF1CNF0MODE[1:0]PxODR寄存器通用输出推挽00011011参照下表0或1开漏10或1复用功能输出推挽10任意开漏1任意输入模拟输入0000任意输入浮空1任意输入下拉100输入上拉1输出模式位表MODE[1:0]含义00保留01最大输出速率10MHz10最大输出速率2MHz11最大输出速率50MHz◆
IDR只用了低16位。该寄存器为只读寄存器,并且只能以16位的形式读出。该寄存器各位的描述如下图所示:◆
IDR-输入数据寄存器◆
ODR是一个端口输出数据寄存器,只用了低16位。该寄存器虽然为可读写,但是从该寄存器读出来的数据都是0。只有写是有效的。其作用就是控制端口的输出。该寄存器的各位描述如下图所示:ODR-输出数据寄存器5.3GPIO库函数GPIO完整的固件库stm32f10x_gpio.c是用C语言编写的GPIO的驱动源程序文件stm32f10x_gpio.cstm32f10x_gpio.hgpio的头文件,包含函数定义以及函数使用的变量stm32f10x_gpio.h文件1、GPIO_Init()函数名GPIO_Init函数原形voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)功能描述根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息输出参数无返回值无先决条件无被调用函数无5.4库函数和寄存器的关系1.GPIO_Configuration(void)分析voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;(1)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;(2)
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;(3)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;(4)
GPIO_Init(GPIOA,&GPIO_InitStructure);(5)}库函数和寄存器的关系1.GPIO_Configuration(void)分析voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;(1)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;(2)
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;(3)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;(4)GPIO_Init(GPIOA,&GPIO_InitStructure);(5)}1100GPIOA_CRL,0x40010800地址,赋值0xXXX3XXXXGPIO_Init(GPIOA,&GPIO_InitStructure)
语句(5)是一个函数调用,即调用GPIO_Init函数,并提供给该函数2个参数,分别为GPIOA和&GPIO_InitStructure,其中&GPIO_InitStructure表示结构体变量GPIO_InitStructure的地址,而GPIOA则在“stm32f10x.h”文件中找到定义:#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)GPIOA_BASE=0x40000000+0x10000+0x0800
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4
此句是一个赋值语句,把GPIO_Pin_4赋给GPIO_InitStructure结构体中的成员GPIO_Pin,可以在“stm32f10x_gpio.h”文件中找到对GPIO_Pin_4做的宏定义:#defineGPIO_Pin_4((u16)0x0010)此句的本质是将16位数0x0010赋给GPIO_InitStructure结构体中的成员GPIO_Pin。
GPIOSpeed_TypeDef
在“stm32f10x_gpio.h”文件中找到对GPIOSpeed_TypeDef的定义:typedefenum{GPIO_Speed_10MHz=1,GPIO_Speed_2MHz,GPIO_Speed_50MHz}GPIOSpeed_TypeDef;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz
语句(3)将GPIO_Speed_50MHz赋给GPIO_InitStructure结构体中的成员GPIO_Speed,但注意到此处GPIO_Speed_50MHz只是一个枚举变量,按照GPIOSpeed_TypeDef的设置其值为3。
GPIOMode_TypeDef/*ConfigurationModeenumeration-------------------------*/typedefenum{GPIO_Mode_AIN=0x0,
GPIO_Mode_IN_FLOATING=0x04,GPIO_Mode_IPD=0x28,GPIO_Mode_IPU=0x48,GPIO_Mode_Out_OD=0x14,GPIO_Mode_Out_PP=0x10,GPIO_Mode_AF_OD=0x1C,GPIO_Mode_AF_PP=0x18}GPIOMode_TypeDef;//定义GPIO管脚的
工作模式工作模式:用低4位区分。输入输出输入、输出判断:高4位为1----输出,否则为输入。GPIOMode_TypeDef输入浮空:IN_FLOATING输入上拉:IPU(InPush-Up)输入下拉:IPD(InPush-Down)模拟输入:AIN(AnalogIn)
开漏输出:Out_OD(OpenDrainOutput)推挽式输出:Out_PP(Push-PullOutput)推挽式复用功能:AF_PP(Push-PullOutputAlternate-Function)开漏复用功能:AF_OD(OpenDrainOutputAlternate-Function)输入输出复用输出GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP
语句(4)把GPIO_Mode_Out_PP赋给GPIO_InitStructure结构体中的成员GPIO_Mode,从上文可知GPIO_Mode_Out_PP的值为0x10。
GPIO_Configuration()小结voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;(1)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;(2)
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;(3)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;(4)GPIO_Init(GPIOA,&GPIO_InitStructure);(5)}对语句5代码进行一个总结:调用GPIO_Init函数,并将STM32微控制器的GPIOA设备地址和所定义的结构体变量GPIO_InitStructure的地址传入。2.GPIO_Init()内部分析(简介)
voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct){/*初始化各个变量*/uint32_tcurrentmode=0x00,currentpin=0x00,pinpos=0x00,pos=0x00;uint32_ttmpreg=0x00,pinmask=0x00;//currentmode用于存放临时的LCIR//currentpin用于存放配置的引脚位
//pinpos用于存放当前操作的引脚号
//pos存放当前操作的引脚位
//tmreg当前的CIR//pinmask/*检查参数是否正确*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
2.GPIO_Init()内部分析
//取出配置信息里面的模式信息并且取它的低4位
currentmode=((uint32_t)GPIO_InitStruct->GPIO_Mode)&((uint32_t)0x0F);if((((uint32_t)GPIO_OInitStruct->GPIO_Mode)&((uint32_t)0x10))!=0x00)//输出模式
//如果欲设置为任意一种输出模式,则再检查”翻转速率”参数是否正确
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));//将速度信息放入currentmode低2位
currentmode|=(uint32_t)GPIO_InitStruct->GPIO_Speed;}
GPIO_Mode_Out_PP=0x10currentmode=0x00GPIO_Speed_50MHz=3=11Bcurrentmode=0x03=00000011B2.GPIO_Init()内部分析
/*设置低8位引脚(即pin0-pin7)*/if(((uint32_t)GPIO_InitStruct->GPIO_Pin&((uint32_t)0x00FF))!=0x00)//引脚有定义
{/*读出当前配置字*/
tmpreg=GPIOx->CRL;//循环低8位引脚
for(pinpos=0x00;pinpos<0x08;pinpos++)
{/*获取将要配置的引脚号*/pos=((uint32_t)0x01)<<pinpos;//读取引脚信息里面的当前引脚
currentpin=(GPIO_InitStruct->GPIO_Pin)&pos;
tmpreg
=0xXXXXXXXX4号引脚pos
=0x00000010currentpin=0x000000102.GPIO_Init()内部分析
if(currentpin==pos)//如果当前引脚在配置信息里存在
{/*先清除对应引脚的配置字*/pos=pinpos<<2;//pos=引脚号×4pinmask=((uint32_t)0x0F)<<pos;//1111<<引脚号×4,根据CRL的结构很容易理解
tmpreg&=~pinmask;//当前应该操作的CRL位清0/*写入新的配置字*/
tmpreg|=(currentmode<<pos);//设置当前操作的CRL位currentmode=0x03=00000011Btmpreg
=0xXXX3XXXX2.GPIO_Init()内部分析
if(GPIO_InitStruct->GPIO_Mode==GPIO_Mode_IPD)//端口置为高电平
{
GPIOx->BRR=(((uint32_t)0x01)<<pinpos);}else{if(GPIO_InitStruct->GPIO_Mode==GPIO_Mode_IPU)//端口清0{
GPIOx->BSRR=(((uint32_t)0x01)<<pinpos);}}}}/*写入低八位引脚配置字*/
GPIOx->CRL=tmpreg;}
tmpreg
=0xXXX3XXXX总结固件库首先将各个设备所有寄存器的配置字进行预先定义然后封装在结构或枚举变量中待用户调用对应的固件库函数时,会根据用户传入的参数从这些封装好的结构或枚举变量中取出对应的配置字最后写入寄存器中,完成对底层寄存器的配置。5.5GPIO应用实例实验2跑马灯的控制◆
实验目的:1、掌握基本的IO读写技巧2、熟悉集成开发环境RealViewMDK4.10的使用3、STM32IO口简介◆实验预期效果:作为所有核心板的经典入门实验,莫过于跑马灯了。STM32核心板有8个LED灯,本实验将通过教你如何控制这些灯实现交替闪烁的类跑马灯效果。该实验的关键在于如何控制STM32的IO口输出。了解了STM32的IO口如何输出的,就可以实现跑马灯了。通过这一节的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。
◆
硬件电路连接如图:概述6.5例程源代码分析◆工程组详情见图:第6章通用IO(GPIO)理论与实战源码分析
先看User组的main.c文件/******************************************************STM32开发板范例代码** 跑马灯实验**接线:开发板上已经接好:PE0~PE7-LED0~LED7** **版本号:v1.0**时间:2011.04.22**作者:bkrc_hrj******************************************************/
#include"stm32f10x.h"#include"LED.h"#include"sys.h"#include"delay.h“intmain()//主函数{u8i,j;u16a,b;LED_Init();delay_init();
main.c文件的内容分析while(1){a=0x0001;for(i=0;i<8;i++){GPIO_Write(GPIOE,a); delay_ms(1000); a=a<<1;}b=0x0080;for(j=0;j<8;j++){GPIO_Write(GPIOE,b); delay_ms(1000); b=b>>1;}}} (2)"Led.h"#ifndef_LED_H#define_LED_HvoidLED_Init(void);#endif#include"stm32f10x.h"#include"LED.h"#include"sys.h"#include"delay.h"voidLED_Init(){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOE,&GPIO_InitStructure);}LED.C文件的内容教材的应用举例实现PA0至PA3所接4个发光二极管顺次亮灭(1)配置输入的时钟SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);(2)声明GPIO结构voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数/*ConfigurePA.0~3asOutputpush-pull*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//管脚位置定义,标号可以是NONE、ALL、0至15GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//输出速度50MHzGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出模式GPIO_Init(GPIOA,&GPIO_InitStructure);//A组GPIO初始化}GPIOx_ODR位定义位31:16保留,始终读为0。位15:0ODRy[15:0]:端口输出数据(y=0…15)(Portoutputdata)这些位可读可写并只能以半字(16位)的形式操作。注:对GPIOx_BSRR(x=A…E),可以分别地对各个ODR位进行独立的设置/清除。方法1:ODR寄存器法while(1){GPIOA->ODR=0xfffe;1111111111111110B Delay(0XFFFFF); GPIOA->ODR=0xffff;1111111111111111B Delay(0XFFFFF); GPIOA->ODR=0xfffd; Delay(0XFFFFF); GPIOA->ODR=0xffff; Delay(0XFFFFF); GPIOA->ODR=0xfffb; Delay(0XFFFFF); GPIOA->ODR=0xffff; Delay(0XFFFFF); GPIOA->ODR=0xfff7; Delay(0XFFFFF); GPIOA->ODR=0xffff; Delay(0XFFFFF);}GPIOx_BSRR位定义位31:160:对相应的ODRy位不产生影响
1:清除对应的ODRy位为0注:如果同时设置了BSy和BRy的对应位,BSy位起作用。位15:00:对相应的ODRy位不产生影响;1:设置对应的ODRy位为1位定义位31:16保留。位15:0BRy:清除端口x的位y(y=0…15)(PortxResetbity)这些位只能写入并只能以半字(16位)的形式操作。
0:对对应的ODRy位不产生影响
1:清除对应的ODRy位为0。方法2:位设置/清除寄存器法while(1){GPIOA->BRR|=0x0001;0000000000000001B Delay(0XFFFFF); GPIOA->BSRR|=0x000f;0000000000001111B Delay(0XFFFFF); GPIOA->BRR|=0x0002; Delay(0XFFFFF); GPIOA->BSRR|=0x000f; Delay(0XFFFFF); GPIOA->BRR|=0x0004; Delay(0XFFFFF); GPIOA->BSRR|=0x000f; Delay(0XFFFFF); GPIOA->BRR|=0x0008; Delay(0XFFFFF); GPIOA->BSRR|=0x000f; Delay(0XFFFFF);}
GPIOx_BSRR位定义位31:160:对相应的ODRy位不产生影响
1:清除对应的ODRy位为0注:如果同时设置了BSy和BRy的对应位,BSy位起作用。位15:00:对相应的ODRy位不产生影响;1:设置对应的ODRy位为1
GPIO_WriteBit()typedefenum{Bit_RESET=0,Bit_SET}BitAction;
voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal){/*Checktheparameters*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GET_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_BIT_ACTION(BitVal));
if(BitVal!=Bit_RESET){GPIOx->BSRR=GPIO_Pin;}else{GPIOx->BRR=GPIO_Pin;}}方法4:GPIO_WriteBit()函数法while(1){GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0x00);//GPIOA_Pin_0写入0; Delay(0XFFFFF); GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0x01);//GPIOA_Pin_0写入1; Delay(0XFFFFF);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训理念
- 2025年陕煤集团高校毕业生专项招聘笔试参考题库含答案详解(能力提升)
- 房地产抵押合同协议书
- 机油仓储知识培训课件
- 幼儿园中班数学《拼卡片》课件
- 幼儿园中班数学《毛毛虫》课件
- 桉树种植承包合同6篇
- 安全培训班减压方法课件
- 木工课件提高孩子兴趣
- 2025年中煤矿建集团总部及所属单位招聘25人笔试备考试题及答案详解(名师系列)
- 大学生创新创业基础(大赛案例版)课件 第12章 大学生创新创业大赛
- GB/T 1040.1-2025塑料拉伸性能的测定第1部分:总则
- 河北版初中《信息技术》第二册全册
- 电竞青训合同协议
- 汽车使用与维护 课件 项目二 汽车内部标识识别
- 统编版道德与法治四年级上册第二单元大单元整体教学设计
- 蔬菜配送安全管理制度
- 2024年江苏大学辅导员考试真题
- 幼儿园教育质量提升的具体策略
- 2025年版高等职业教育专科专业教学标准 560213 融媒体技术与运营
- 康复技术服务规范 (一)
评论
0/150
提交评论