版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,Embedded System Development,嵌入式系统与应用,2,第8章 STM32时钟与GPIO设计,8.1 时钟设置与开启外设时钟 8.2 GPIO简介 8.3 GPIO端口配置寄存器 8.4 stm32f10 x.h库中GPIO代码剖析 8.6 GPIO控制LED灯实验,3,8.1 系统时钟配置与外设时钟开启,在startup_stm32f10 x_hd.s启动文件中,调用_main函数之前先调用了SystemInit()初始化函数,其中系统时钟SYSCLK设置:时钟源、倍频、分频等控制参数,SystemInit()定义在system_stm32f10 x.c文件中,其他
2、的配置主要在stm32f10 x_rcc.c中。 使用外设时,配置初始化后,必须也要开启外设时钟,4,8.1.1 时钟设置解析,系统时钟SYSCLK是SystemInit()先将配置时钟相关的寄存器都复位为默认值,再调用SetSysClock()选择使用频率,而具体设置是通过宏定义设置的。 函数调用顺序: 启动文件 SystemInit() SetSysClock() SetSysClockTo72(,5,1、SystemInit(,STM32时钟系统的SystemInit()中设置: SYSCLK(系统时钟)=72MHz AHB总线时钟(使用SYSCLK)=72MHz APB1总线时钟(PC
3、LK1)=36MHz APB2总线时钟(PCLK2)=72MHz PLL时钟=72MHz 用到的RCC寄存器复位值: RCC_CR = 0 x0000 xx83; RCC_CFGR = 0 x0000 0000; RCC_CIR = 0 x0000 0000; RCC_CFGR2 = 0 x0000 0000; 这些RCC时钟寄存器组名的宏定义与其他外设寄存器名定义都在stm32f10 x.h文件中,6,RCC时钟寄存器组在stm32f10 x.h中的定义,typedef struct _IO uint32_t CR; _IO uint32_t CFGR; _IO uint32_t CIR;
4、_IO uint32_t APB2RSTR; _IO uint32_t APB1RSTR; _IO uint32_t AHBENR; _IO uint32_t APB2ENR; _IO uint32_t APB1ENR; _IO uint32_t BDCR; _IO uint32_t CSR; #ifdef STM32F10X_CL _IO uint32_t AHBRSTR; _IO uint32_t CFGR2; #endif /* STM32F10X_CL */ #if defined (STM32F10X_LD_VL) | defined (STM32F10X_MD_VL) | defi
5、ned (STM32F10X_HD_VL) uint32_t RESERVED0; _IO uint32_t CFGR2; #endif /* STM32F10X_LD_VL | STM32F10X_MD_VL | STM32F10X_HD_VL */ RCC_TypeDef,_IO 宏定义core_cm3.h中: #define_IOvolatile; volatile,易变的,用变量时需到原地址重新存取。 uint32_t定义在stdin.h里。 typedef unsigned int uint32_t; 知道了结构体首地址就确定RCC寄存器组所有32位寄存器的地址,0 x04正好是地址
6、偏移量,所以把连续的寄存器组定义为结构,7,2、SetSysClock()函数如下,此函数中选择调用确定使用频率的函数。 static void SetSysClock(void) #ifdef SYSCLK_FREQ_HSE SetSysClockToHSE(); #elif defined SYSCLK_FREQ_24MHz SetSysClockTo24(); #elif defined SYSCLK_FREQ_36MHz SetSysClockTo36(); #elif defined SYSCLK_FREQ_48MHz SetSysClockTo48(); #elif defined
7、 SYSCLK_FREQ_56MHz SetSysClockTo56(); #elif defined SYSCLK_FREQ_72MHz /使用此项 SetSysClockTo72(); #endif,8,3、SetSysClockTo72()函数,各个SetSysClockToXX(void)函数,配置了具体的系统时钟,PLL倍频以及分频系数。采用寄存器直接配置方式,如: static void SetSysClockTo72(void) _IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK2 and P
8、CLK1 configuration */ /* Enable HSE */ RCC-CR |= (uint32_t)RCC_CR_HSEON); do HSEStatus = RCC-CR 欲深入分析时钟配置,就仔细阅读这些最底层的库函数,9,8.1.2 开启关闭外设时钟,外设都是挂在AHB、APB1、APB2总线上,要想使用某个外设,必须初始化外设后,再开启使用开启外设的时钟,不用时再关闭外设时钟,从而降低STM32的整体功耗。 stm32f10 x_rcc.c文件中有开启和关闭外设时钟的库函数,如下: RCC_AHBPeriphClockCmd(外设名,ENABLE|DISABLE) 挂
9、在AHB总线外设的开启与关闭函数,ENABLE开启,DISABLE关闭外设时钟; RCC_APB1PeriphClockCmd(外设名,ENABLE|DISABLE) 挂在APB1总线外设的开启与关闭函数; RCC_APB2PeriphClockCmd(外设名,ENABLE|DISABLE) 挂在APB2总线外设的开启与关闭函数,10,挂载在AHB的外设名,stm32f10 x_rcc.h中对外设名进行了宏定义,看名即知设备。 #define RCC_AHBPeriph_DMA1 (uint32_t)0 x00000001) #define RCC_AHBPeriph_DMA2 (uint32
10、_t)0 x00000002) #define RCC_AHBPeriph_SRAM (uint32_t)0 x00000004) #define RCC_AHBPeriph_FLITF (uint32_t)0 x00000010) #define RCC_AHBPeriph_CRC (uint32_t)0 x00000040) #define RCC_AHBPeriph_FSMC (uint32_t)0 x00000100) #define RCC_AHBPeriph_SDIO (uint32_t)0 x00000400) #define RCC_AHBPeriph_OTG_FS (uint
11、32_t)0 x00001000) #define RCC_AHBPeriph_ETH_MAC (uint32_t)0 x00004000) #define RCC_AHBPeriph_ETH_MAC_Tx (uint32_t)0 x00008000) #define RCC_AHBPeriph_ETH_MAC_Rx (uint32_t)0 x00010000,11,挂载在APB2上的外设名,define RCC_APB2Periph_AFIO (uint32_t)0 x00000001) #define RCC_APB2Periph_GPIOA (uint32_t)0 x00000004)
12、#define RCC_APB2Periph_GPIOB (uint32_t)0 x00000008) #define RCC_APB2Periph_GPIOG (uint32_t)0 x00000100) #define RCC_APB2Periph_ADC1 (uint32_t)0 x00000200) #define RCC_APB2Periph_ADC2 (uint32_t)0 x00000400) #define RCC_APB2Periph_TIM1 (uint32_t)0 x00000800) #define RCC_APB2Periph_SPI1 (uint32_t)0 x00
13、001000) #define RCC_APB2Periph_TIM8 (uint32_t)0 x00002000) #define RCC_APB2Periph_USART1 (uint32_t)0 x00004000) #define RCC_APB2Periph_ADC3 (uint32_t)0 x00008000) #define RCC_APB2Periph_TIM15 (uint32_t)0 x00010000) #define RCC_APB2Periph_TIM16 (uint32_t)0 x00020000) #define RCC_APB2Periph_TIM17 (uin
14、t32_t)0 x00040000) #define RCC_APB2Periph_TIM9 (uint32_t)0 x00080000) #define RCC_APB2Periph_TIM10 (uint32_t)0 x00100000) #define RCC_APB2Periph_TIM11 (uint32_t)0 x00200000,12,挂载在APB1上的外设名,define RCC_APB1Periph_TIM2 (uint32_t)0 x00000001) #define RCC_APB1Periph_TIM3 (uint32_t)0 x00000002) #define RC
15、C_APB1Periph_TIM14 (uint32_t)0 x00000100) #define RCC_APB1Periph_WWDG (uint32_t)0 x00000800) #define RCC_APB1Periph_SPI2 (uint32_t)0 x00004000) #define RCC_APB1Periph_SPI3 (uint32_t)0 x00008000) #define RCC_APB1Periph_USART2 (uint32_t)0 x00020000) #define RCC_APB1Periph_USART3 (uint32_t)0 x00040000)
16、 #define RCC_APB1Periph_UART4 (uint32_t)0 x00080000) #define RCC_APB1Periph_UART5 (uint32_t)0 x00100000) #define RCC_APB1Periph_I2C1 (uint32_t)0 x00200000) #define RCC_APB1Periph_I2C2 (uint32_t)0 x00400000) #define RCC_APB1Periph_USB (uint32_t)0 x00800000) #define RCC_APB1Periph_CAN1 (uint32_t)0 x02
17、000000) #define RCC_APB1Periph_CAN2 (uint32_t)0 x04000000) #define RCC_APB1Periph_BKP (uint32_t)0 x08000000) #define RCC_APB1Periph_PWR (uint32_t)0 x10000000) #define RCC_APB1Periph_DAC (uint32_t)0 x20000000) #define RCC_APB1Periph_CEC (uint32_t)0 x40000000,13,开启外设时钟举例,GPIO的C口挂在APB2总线,所用的时钟PCLK2为72M
18、Hz。开启GPIOC外设时钟: RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE) 如用到I/O引脚复用功能,还要开启其复用功能时钟。如GPIOC的Pin4还可作为ADC1的输入引脚,把它作为ADC1来用,除开启GPIOC时钟,还要开启ADC1时钟: RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE) RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE) 开启关闭外设时钟的三个函数,内部对外设时钟的使能寄存器操作,达到开启和关闭的目的,
19、14,8.2 GPIO简介,GPIO(General Purpose I/O)通用型输入/输出,主要用于需要用到数字量输入/输出的场合。 如: 继电器、 LED、蜂鸣器等的控制; 传感器状态、高低电平等信息的输入等。 管脚可承受最大5V的输入电压,电流为4mA,短时间极限值40mA;,15,GPIO简介,GPIO引脚又被分为GPIOA、GPIOBGPIOG不同的组,每组端口分为015,共16个引脚,不同芯片的端口组数不同。GPIO结构图,端口配置寄存器,16,GPIO简介,I/O引脚可通过端口配置寄存器设置成不同的功能。 四种输入模式(图上半部分): 上拉输入与下拉输入:与VDD相连的为上拉电
20、阻,与VSS相连的为下拉电阻。再经施密特触发器就把信号转化为0、1存储在输入数据寄存器。 浮空输入:不接上拉与下拉电阻,直接由触发器输入,由于其输入阻抗较大,一般把这种模式用于标准的通讯协议如I2C、USART的接收端。 模拟输入:把电压信号直接传送到片上外设模块,如ADC,17,GPIO简介,推挽输出模式:输出1时P-MOS导通输出高电平1,0时N-MOS管导通输出低电平0。 开漏输出模式:只有N-MOS管,外部需接上拉电阻,输出0时导通,为低电平0;输出1时截止,为高阻状态。 复用功能的推挽式输出模式。 复用功能的开漏输出模式,一只三极管放大信号正半周,另一只放大负半周,故称推挽放大器,四
21、种输出模式(图下半部分,18,GPIO简介,GPIO都可配置为中断功能,并可设置为上升沿、下降沿或边沿触发,GPIO中断还具 有掉电唤醒功能,19,8.3 GPIO端口配置寄存器,1、端口配置低寄存器GPIOx_CRL (配置07引脚) x=AG,芯片的GPIO端口。 PIOx_CRL地址偏移量:0 x00h,复位值:0 x4444 4444,第y个引脚的模式由寄存器的4个位控制,MODEy1:0引脚模式位,CNFy1:0引脚配置位。可配置为4种输入、4种输出模式,20,GPIO端口配置寄存器,CNFy1:0:端口y配置位 输入模式(MODE1:0=00): 00:模拟输入 01:浮空输入(复
22、位默认值) 10:上拉/下拉输入 11:保留 输出模式(MODE1:000): 00:通用推挽输出 01:通用开漏输出 10:复用功能推挽输出 11:复用功能开漏输出,MODEy1:0:端口y模式位 输入模式 00:复位默认值 输出模式 01:最大速度10MHz 10:最大速度2MHz 11:最大速度50MHz,PIOx_CRL复位值4444 4444h,即CNFy1:001、MODEy1:000,复位后端口配置为什么口,21,2、端口配置高寄存器GPIOx_CRH,GPIOx_CRH(配置815引脚) 与端口配置低寄存器类似。 地址偏移量:0 x04h,复位值:0 x4444 4444 例1
23、:GPIOx_CRH寄存器的第28至29位设置为11,并在第30至31位设置为00: 答:则把x端口第15个引脚的模式配置成了:输出的最大速度为50MHz的 通用推挽输出模式。 例2:上题反过来,22,3、端口输入数据寄存器GPIOx_IDR,端口输入数据寄存器(GPIOx_IDR) (x=A.G),读该寄存器可看某个IO口的输入状态。 地址偏移量:0 x08h,复位值:0 x0000 XXXX 高位31:16保留,始终读为0。 IDRy15:0 (y = 015)每个位对应I/O口的输入状态。 GPIOx_IDR为只读并只能以字的形式读出,23,4、端口输出数据寄存器GPIOx_ODR,GP
24、IOx_ODR(x=A.E)位。写该寄存器可控制某个IO口的输出电平,读该寄存器可以判断IO口的输出状态。 地址偏移量:0 x0Ch,复位值:0 x0000 0000 高位31:16保留,始终为0。 ODRy15:0:端口输出数据(y = 015) 这些位可读可写并只能以字的形式操作。 通过GPIOx_BSRR(x = AG),可以分别地对各个ODR位进行独立的置位/清零,24,5、端口位置位/清零寄存器GPIOx_BSRR,GPIOx_BSRR(x=A.G),对GPIOx的端口置位/清零。 地址偏移量:0 x10,复位值:0 x0000 0000,位31:16为BRy(y = 015),清零
25、,只能以字写入: 0:对应的ODRx位不产生影响; 1:对应的ODRx位清零; 位15:0为BSy(y = 015),置位,只能以字写入: 0:对对应的ODRx位不产生影响; 1:对应的ODRx位置位; 注:如果同时设置BSy和BRy的对应位,BSx位起作用,25,6、端口位清零寄存器(GPIOx_BRR,GPIOx_BRR(x=A.G)对GPIOx的端口清零。 注意:相当于GPIOx_BSRR寄存器的清零功能。 地址偏移量:0 x14,复位值:0 x0000 0000,Bits 31:16 Reserved 位15:0为BRy(y = 015): 只能以字写入: 0:对应的ODRx位不产生影
26、响; 1:对应的ODRx位清零,26,7、端口配置锁定寄存器GPIOx_LCKR,端口配置锁定寄存器(GPIOx_LCKR) (x=A.G) 地址偏移量:0 x18,复位值:0 x0000 0000,位16(LCKK):当执行正确的写序入列(写1-写0-写1-写0-写1),置1下次系统复位前该寄存器被锁住。 位15:0:在LCKK位为0时: LCKy写1锁定对应端口y脚配置寄存器(CRL或CRH)中相应的4个位; LCKy写0不锁,27,例,要控制引脚电平高低,需要对寄存器进行什么操作? 一个引脚y的输出数据由GPIOx_BSRR寄存器位的2个位来控制分别为BRy (Bit Reset y)和
27、BSy (Bit Set y),BRy位用于写1清零,使引脚输出低电平;BSy位用来写1置1,使引脚输出高电平,28,8.4 stm32f10 x.h库中GPIO代码剖析,以外设GPIOC为例,文件中包含如下宏定义: #define PERIPH_BASE (uint32_t)0 x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0 x10000) #define GPIOC_BASE (APB2PERIPH_BASE + 0 x1000) 先看外设基地址宏PERIPH_BASE,宏展开为uint32_t类型 0 x4000 0000; 总线基
28、地址宏APB2PERIPH_BASE指向地址0 x4001 0000; 最后到了宏GPIOC_BASE为APB2PERIPH_BASE加上地址偏移量0 x1000得到了GPIOC端口的寄存器组的基地址为0 x4001 1000,29,stm32f10 x.h中GPIO代码剖析,stm32f10 x.h文件,还可以发现以下类似的宏: #define GPIOA_BASE (APB2PERIPH_BASE + 0 x0800) #define GPIOB_BASE (APB2PERIPH_BASE + 0 x0C00) #define GPIOC_BASE (APB2PERIPH_BASE + 0
29、 x1000) #define GPIOD_BASE (APB2PERIPH_BASE + 0 x1400) GPIOA、GPIOB、GPIOC、GPIOD寄存器组的起始地址,都对应着独立的一组寄存器,30,typedef struct _IO uint32_t CRL; _IO uint32_t CRH; _IO uint32_t IDR; _IO uint32_t ODR; _IO uint32_t BSRR; _IO uint32_t BRR; _IO uint32_t LCKR; GPIO_TypeDef,define GPIOA (GPIO_TypeDef *) GPIOA_BASE
30、) #define GPIOB (GPIO_TypeDef *) GPIOB_BASE) (GPIO_TypeDef *) 把GPIOA_BASE 地址转换为GPIO_TypeDef 结构体指针类型,对每个GPIOx是用结构封装了寄存器组,stm32f10 x.h中代码,结构体首地址即CRL地址若为0 x4001 1000,那么第二个变量CRH为0 x4001 1000 +0 x04 , 0 x04正好是寄存器组中的地址偏移量。所以把连续的寄存器组定义为结构,31,stm32f10 x.h中GPIO代码剖析,有了这样的宏,就可用以下方式来修改GPIO寄存器: GPIO_TypeDef * GP
31、IOx; / *定义GPIOx指针变量为GPIO_TypeDef结构体型 GPIOx = GPIOA; /把指针地址设置为宏GPIOA地址 GPIOx-CRL = 0 xFFFF FFFF; /“-”通过指针访问并修改GPIOA_CRL寄存器 通过类似的方式,我们就可以给具体的寄存器写上适当的参数,控制STM32了。 这只是库开发的皮毛,库提供了更简单的开发方式,32,使用GPIO,1. 配置寄存器:选定GPIO的特定功能,最基本的如:选择作为输入还是输出端口。 2. 数据寄存器:保存了GPIO的输入电平 或 将要输出的电平。 3. 位控制寄存器:设置某引脚的数据 为1或0,控制输出的电平。
32、4. 锁定寄存器:设置某锁定引脚后,就不能修改其配置,33,关于GPIO库函数,34,7.6 LED流水灯实验,实验学习方法,先学习例程编写方法,掌握后,在实验过程中改写程序、逐渐编写程序! 想要控制LED灯,当然是通过控制STM32芯片的I/O引脚电平的高低来实现,35,LED流水灯实验,36,LED流水灯实验,LED实验中用到了RCC跟GPIO这两个外设。环境配置如图: 用到的源程序: main.c led.c led.h,37,Led流水灯主程序:main.c,include led.h void Delay(_IO uint32_t nCount) /简单延时函数 for(; nCou
33、nt != 0; nCount-); int main(void) LED_GPIO_Config(); /函数在led.c中定义 while (1) LED1( ON ); /函数在头文件led.h中定义 Delay(0 x0FFFFF); LED1( OFF ); LED2( ON ); Delay(0 x0FFFFF); LED2( OFF ); LED3( ON ); Delay(0 x0FFFFF); LED3( OFF );,38,led.c-初始化函数 LED_GPIO_Config(,include led.h #include stm32f10 x_gpio.h #inclu
34、de stm32f10 x_rcc.h void LED_GPIO_Config(void) /*用库定义一个GPIO_InitTypeDef类型的结构体*/ GPIO_InitTypeDef GPIO_InitStructure; /*开启GPIOC的外设时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /*选择要控制的GPIOC引脚 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; /*设置引脚模式为通用推挽输出*/ GPIO_InitStructu
35、re.GPIO_Mode = GPIO_Mode_Out_PP,39,led.c,设置引脚速率为50MHz GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /端口初始化库函数,利用上面设置的参数初始化GPIOC GPIO_Init(GPIOC, 函数LED_GPIO_Config()实现了所有为点亮led的配置,40,led.h头文件,ifndef _LED_H / 条件编译, 防止头文件重复包含 #define _LED_H /独立写头文件,方便以后扩展使用 #include stm32f10 x.h /* the macro defini
36、tion to trigger the led on or off * 0 - on *1 - off */ #define ON 0 #define OFF 1 /* 带参宏,可像内联函数一样使用*/ #define LED1(a)if (a) GPIO_SetBits(GPIOC,GPIO_Pin_3); else GPIO_ResetBits(GPIOC,GPIO_Pin_3,41,led.h续,define LED2(a)if (a) GPIO_SetBits(GPIOC,GPIO_Pin_4); else GPIO_ResetBits(GPIOC,GPIO_Pin_4) #defin
37、e LED3(a)if (a) GPIO_SetBits(GPIOC,GPIO_Pin_5); else GPIO_ResetBits(GPIOC,GPIO_Pin_5) void LED_GPIO_Config(void); #endif /* / 条件编译结束 _LED_H */ 在编译过程,编译器会把带参宏展开,在相应的位置替换为宏展开代码。 其中的反斜杠符号“ ”叫做续行符,后面不能有空格、注释等,42,led用到stm32f10 x_gpio.h库的结构、宏定义,1、GPIO_InitTypeDef结构,引脚初始化的结构,2、GPIO_Pin_x 引脚为uint16_t类型,宏定义,
38、define GPIO_Pin_0 (uint16_t)0 x0001) /*!Pin 0 selected */ #define GPIO_Pin_1 (uint16_t)0 x0002) /*!Pin 1 selected */ #define GPIO_Pin_2 (uint16_t)0 x0004) /*!Pin 2 selected */ #define GPIO_Pin_3 (uint16_t)0 x0008) /*!Pin 3 selected *,GPIO_Pin_x,x位为1,其余位为0,在第x位置1表示pin x 例: GPIO_Pin_1 (0000 0000 0000
39、0010)B,43,led用到stm32f10 x_gpio.h库的结构、宏定义,3、GPIOSpeed_TypeDef定义GPIO的输出速率: typedef enum GPIO_Speed_10MHz = 1,/枚举常量值1,对应10MHz GPIO_Speed_2MHz, /常量值为2,对应2MHz GPIO_Speed_50MHz /常量值为3,对应50MHz GPIOSpeed_TypeDef,所以: GPIO_Speed_10MHz 对应(0001)B GPIO_Speed_2MHz 对应(0010)B GPIO_Speed_50MHz 对应(0011)B Speed控制参数,它的
40、宏展开低2位的值,正好符合寄存器MODEy中2位的控制值。 直接把这个参数写入CRL、CRH配置寄存器的MODEy位,其中y由GPIO_Pin参数确定第几引脚,44,led用到stm32f10 x_gpio.h库的结构、宏定义,4、GPIOMode_TypeDef结构定义GPIO引脚的功能: typedef enum GPIO_Mode_AIN = 0 x0, /模拟输入模式 GPIO_Mode_IN_FLOATING = 0 x04, /浮空输入模式 GPIO_Mode_IPD = 0 x28, /下拉输入模式 GPIO_Mode_IPU = 0 x48, /上拉输入模式 GPIO_Mode
41、_Out_OD = 0 x14, /开漏输出模式 GPIO_Mode_Out_PP = 0 x10, /通用推挽输出模式 GPIO_Mode_AF_OD = 0 x1C, /复用功能开漏输出 GPIO_Mode_AF_PP = 0 x18 /复用功能推挽输出 GPIOMode_TypeDef,45,led用到stm32f10 x_gpio.h库的结构、宏定义,四种输出模式参数中的bit4 均为1,而四种输入模式中的bit4均为0。所以在代码中通过与0 x10作位与运算,即可区分输入和输出模式。 而bit2和bit3的参数值正好对应为CRL、CRH寄存器中的CNFy的2个控制位。确定是什么模式。 经过与Speed参数MODEy组合后,配置一个引脚的4位参数就确定了,46,用于初始化的库函数GPIO_Init(,通过查找库帮助文档获得,47,DMK软件BUG: error 65,创建一个STM32F103VE核
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区安全合同范本
- 户用电合同协议
- 成本票合同范本
- 废旧收购合同范本
- 打掉孩子协议合同
- 店长承包合同范本
- 工商居间合同范本
- 工装地暖合同范本
- 布行合伙合同协议
- 手饰采购合同范本
- 甘肃省庆阳市七区2024-2025学年高一上学期期末联考语文试题
- 人教版小升初考试数学试卷(含解析)重庆市渝北区鲁能巴蜀小学2025年
- 粮库安全生产责任制
- 2025年福建省综合评标专家库考试题库(二)
- 2024苏州大学辅导员招聘笔试真题及答案
- 《海南自由贸易港建设总体方案》解读
- 仓库安全管理台账模板
- 完整版医疗器械基础知识培训考试试题及答案
- 220kV电网输电线路的继电保护设计
- 通信维护作业安全培训课件
- 颅脑损伤康复病例分析
评论
0/150
提交评论