4--STM32单片机IO端口编程PPT学习课件_第1页
4--STM32单片机IO端口编程PPT学习课件_第2页
4--STM32单片机IO端口编程PPT学习课件_第3页
4--STM32单片机IO端口编程PPT学习课件_第4页
4--STM32单片机IO端口编程PPT学习课件_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章STM32单片机IO端口编程,2.1STM32单片机管脚和命名规则,2.2STM32单片机时钟配置,2.3STM32单片机I/O端口配置,2.4STM32单片机I/O端编程步骤,1,STM32单片机管脚,STM32系列单片机命名规则,2.1STM32单片机管脚和命名规则,2,STM32F103CBT6共有37个I/O管脚:PA口16脚+PB口16脚+PC口3脚+PD口2脚。,STM32单片机管脚:以STM32F103Cx为例,采用的封装形式LQFP48,3,一般而言,嵌入式系统在工作前,都要进行初始化工作,其中包括调用RCC_Configuration(复位和时钟设置)函数。用于系统复位和初始化STM32系列微控制器的时钟。,2.2STM32单片机时钟配置,2.2.1STM32时钟系统,2.2.2RCC_Configuration(复位和时钟设置)函数,4,STM32系列微控制器中,有5个时钟源:HSI(HighSpeedInternal):高速内部时钟、HSE(HighSpeedExternal):高速外部时钟、LSI(LowSpeedInternal):低速内部时钟、LSE(LowSpeedExternal):低速外部时钟、PLL(PhaseLockedLoop):锁相环倍频输出。其中的HSI、HSE、或PLL可被用来驱动系统时钟。其中的LSI、LSE作为二级时钟源。,STM32时钟系统结构图(P56),2.2.1STM32时钟系统,5,其中的HSI、HSE、或PLL可被用来驱动系统时钟。,实际PLL是来自于HSI、HSE,6,外设总线:包括APB1(AdvancedPeripheralBus1)和APB2(AdvancedPeripheralBus2),APB2:用于高速外设APB1:用于低速外设,AMBA片上总线:已成为一种流行的工业片上总线标准。它包括AHB(AdvancedHighperformanceBus)和APB(AdvancedPeripheralBus),前者作为系统总线,后者作为外设总线。,7,STM32系统结构图,连接在APB1(低速外设)上的设备:有,连接在APB2(高速外设)上的设备:有,连接在AHB(AdvancedHighperformanceBus)上的设备:有,8,1、使能挂接在APB1总线上的外设对应的时钟命令:,RCC_APB1PeriphClockCmd()函数,例如,使能TIM2对应的时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);,RCC_APB2PeriphClockCmd()函数,2、使能挂接在APB2总线上的外设对应的时钟命令:,例如,使能GPIO端口对应的时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);,9,3、使能挂接在AHB总线上的外设对应的时钟命令:,RCC_AHBPeriphClockCmd()函数,例如,使能DMA对应的时钟:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA,ENABLE);,10,使用操作符“|”可以一次选中上表中的一个或多个取值的组合作为该参数的值。,11,复位和时钟控制(RCC),12,STM32F103xx增强型模块框图,13,基于ARMCortex内核的MCU和普通的8/16位单片机在系统结构上最大区别:,普通的8/16位单片机:只有1个系统时钟频率,而基于ARMCortex内核的MCU:具有多个时钟频率,分别供给内核和不同外设模块使用。,本课程的学习难点之一:就是ARM时钟比单片机时钟复杂得多。,为什么ARM时钟这么复杂?,14,原因二:时钟分开有助于实现低功耗。,原因一:高速时钟供中央处理器等高速设备使用,低速时钟供外设等低速设备使用。,15,时钟输出使能,STM32处理器因为低功耗的需要,各模块需要分别独立开启时钟。当需要使用某个外设模块时,记得一定要先使能对应的时钟。否则,这个外设不能工作。,16,2.2.2RCC_Configuration()函数,1、RCC复位和时钟配置寄存器组,2、枚举类型ErrorStatus,3、RCC_Configuration():(复位和时钟设置)函数,(ResetandClockConfiguration(),复位和时钟设置函数),17,STM32单片机的复位和时钟设置:共包括10个设置寄存器一个32位的时钟控制寄存器(RCC_CR)一个32位的时钟配置寄存器(RCC_CFGR)一个32位的时钟中断寄存器(RCC_CIR)一个32位的APB2外设复位寄存器(RCC_APB2RSTR)一个32位的APB1外设复位寄存器(RCC_APB1RSTR)一个32位的AHB外设时钟使能寄存器(RCC_AHBENR)一个32位的APB2外设时钟使能寄存器(RCC_APB2ENR)一个32位的APB1外设时钟使能寄存器(RCC_APB1ENR)一个32位的备份域控制寄存器(RCC_BDCR)一个32位的控制/状态寄存器(RCC_CSR),Backupdomaincontrolregister(RCC_BDCR),详见参考手册V10_1第P60,18,编程时,时钟的具体配置是从RCC(ResetandClockConfiguration,复位和时钟配置)寄存器组开始。在固件库中,用结构体RCC_TypeDef定义RCC寄存器组:,在文件“stm32f10 x_map.h”中,定义如下:,/*-Real-TimeClock-*/typedefstructvu32CR;vu32CFGR;vu32CIR;vu32APB2RSTR;vu32APB1RSTR;vu32AHBENR;vu32APB2ENR;vu32APB1ENR;vu32BDCR;vu32CSR;RCC_TypeDef;,1、RCC复位和时钟配置寄存器组,19,/*Peripheralbaseaddressinthebit-bandregion*/#definePERIPH_BASE(u32)0 x40000000),/*Peripheralmemorymap*/#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0 x10000)#defineAHBPERIPH_BASE(PERIPH_BASE+0 x20000),#defineRCC_BASE(AHBPERIPH_BASE+0 x1000),#ifdef_RCC#defineRCC(RCC_TypeDef*)RCC_BASE)#endif/*_RCC*/,该宏定义的功能:在程序中,所有写RCC的地方,编译器的预处理程序,都将它替换为:(RCC_TypeDef*)0 x40021000),20,2、枚举类型ErrorStatus,在文件“stm32f10 x_type.h”中,包含typedefenumERROR=0,SUCCESS=!ERRORErrorStatus;,该语句,定义了新枚举类型名ErrorStatus,代表左侧定义的枚举类型。,21,3、RCC_Configuration(复位和时钟设置)函数:在“HelloRobot.h”中,ErrorStatusHSEStartUpStatus;,voidRCC_Configuration(void)/*将外设RCC寄存器组重新设置为默认值,即复位。RCCsystemreset*/RCC_DeInit();/*打开外部高速时钟晶振HSE,EnableHSE*/RCC_HSEConfig(RCC_HSE_ON);/*等待HSE外部高速时钟晶振稳定,或者在超时的情况下退出,WaittillHSEisready*/HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus=SUCCESS)/SUCCESS:HSE晶振稳定就绪/*设置AHB时钟=SYSCLK=48MHz,HCLK(即AHB时钟)=SYSCLK*/RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置高速PCLK2时钟(即APB2clock)=AHB时钟/2=24MHz,PCLK2=HCLK/2*/RCC_PCLK2Config(RCC_HCLK_Div2);/*设置低速PCLK1时钟(即APB1clock)=AHB时钟/4=12MHz,PCLK1=HCLK/4*/RCC_PCLK1Config(RCC_HCLK_Div4);/RCC_HCLK_Div4:APB1clock=HCLK/4=12MHz,此处不同于鸥鹏公司的程序(=36MHz)/*设置Flash延时时钟周期数:为2*/FLASH_SetLatency(FLASH_Latency_2);/*EnableFlashPrefetchBuffer预取指令指令缓冲区,这2句与RCC没有关系*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/*利用锁相环将HSE外部8MHz晶振6倍频到48MHz。PLLCLK=8MHz*6=48MHz*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6);/此处不同于鸥鹏公司的程序:PLLCLK=8MHz*6=48MHz/*EnablePLL*/RCC_PLLCmd(ENABLE);/*WaittillPLLisready,等待锁相环输出稳定*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET)/*SelectPLLassystemclocksource*/RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/选择PLLCLK作为SYSCLK,所以SYSCLK为48MHz/*WaittillPLLisusedassystemclocksource*/while(RCC_GetSYSCLKSource()!=0 x08)/*Enableperipheralclocks-*/*GPIOA,GPIOBandSPI1clockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_SPI1,ENABLE);/*EnableGPIOC,GPIODclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);,枚举类型,变量,22,/*设置低速PCLK1时钟(即APB1clock)=AHB时钟/4=12MHz,PCLK1=HCLK/4*/RCC_PCLK1Config(RCC_HCLK_Div4);/RCC_HCLK_Div4:APB1clock=HCLK/4=12MHz,此处不同于鸥鹏公司的程序(=36MHz)/*设置Flash延时时钟周期数:为2*/FLASH_SetLatency(FLASH_Latency_2);/*EnableFlashPrefetchBuffer预取指令指令缓冲区,这2句与RCC没有关系*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/*利用锁相环将HSE外部8MHz晶振6倍频到48MHz,作为PLLCLK。PLLCLK=8MHz*6=48MHz*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6);/此处不同于鸥鹏公司的程序:PLLCLK=8MHz*6=48MHz/*EnablePLL*/RCC_PLLCmd(ENABLE);,23,/*WaittillPLLisready,等待锁相环输出稳定*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET)/*SelectPLLassystemclocksource*/选择PLLCLK作为SYSCLK,所以SYSCLK为48MHzRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/*WaittillPLLisusedassystemclocksource*/while(RCC_GetSYSCLKSource()!=0 x08)/*Enableperipheralclocks-*/*GPIOA,GPIOBandSPI1clockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_SPI1,ENABLE);/*EnableGPIOC,GPIODclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);,24,以上所见的固件库函数:详见“中文版:STM32F10 xxx_固件库函数V2.pdfP193”,固件库函数的具体实现:见文件“stm32f10 x_rcc.h”,25,其中RCC_DeInit();,/*FunctionName:RCC_DeInit*Description:ResetstheRCCclockconfigurationtothedefaultresetstate.*Input:None*Output:None*Return:None*/voidRCC_DeInit(void)/*SetHSIONbit*/RCC-CR|=(u32)0 x00000001;/*ResetSW1:0,HPRE3:0,PPRE12:0,PPRE22:0,ADCPRE1:0andMCO2:0bits*/RCC-CFGR,26,27,2.3STM32单片机I/O端口配置,2.3.1STM32单片机的I/O端口和管脚,2.3.2STM32单片机的I/O端口配置,28,2.3.1STM32单片机的I/O端口和管脚,STM32单片机最多有7个16位的并行I/O端口:PA、PB、PC、PD、PE、PF、PG。,STM32F103Cx单片机只有4个16位的并行I/O端口:PA、PB、PC、PD。,29,STM32F103CBT6包含4个端口:PA口、PB口、PC口、PD口,共有37个I/O管脚:PA口16脚+PB口16脚+PC口3脚+PD口2脚。,STM32单片机的I/O端口和管脚:以STM32F103Cx为例,30,每个GPIOx端口:共有7个设置寄存器两个32位的配置寄存器(GPIOx_CRL,GPIOx_CRH)(GPIOx_CRL)(x=A.G):GPIOxconfigurationregisterlow,GPIOx端口低配置寄存器,用于配置GPIOx端口的第0位第7位。两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR)(GPIOx_IDR)(x=A.G):GPIOxinputdataregister一个32位的置位/复位寄存器(GPIOx_BSRR)(GPIOx_BSRR)(x=A.G):GPIOxbitset/resetregister一个16位的复位寄存器(GPIOx_BRR)一个32位的锁定寄存器(GPIOx_LCKR)(GPIOx_LCKR)(x=A.G):GPIOxconfigurationlockregister,31,在MCS-51单片机中,每个IO端口:只有1个设置寄存器P0端口:P0端口寄存器-P0,P1端口:P1端口寄存器-P1,P2端口:P2端口寄存器-P2,P3端口:P3端口寄存器-P3。对应STM32单片机的数据寄存器两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR)(GPIOx_IDR)(x=A.G):GPIOxinputdataregister,MCS-51单片机I0端口的输入、输出数据寄存器共用1个寄存器Px,而STM32单片机的输入、输出数据寄存器是分开的。,32,MCS-51单片机的特殊功能寄存器,33,在固件函数库的“stm32f10 x_map.h”文件中,对应的定义:,/*-GeneralPurposeIO-*/typedefstructvu32CRL;/configurationregisterlow(GPIOx_CRL)(x=AE)vu32CRH;vu32IDR;vu32ODR;vu32BSRR;vu32BRR;vu32LCKR;GPIO_TypeDef;/用结构体GPIO_TypeDef定义GPIOx端口,(即定义GPIOx端口的7个设置寄存器),34,2.3.2STM32单片机的I/O端口配置,5、在使用GPIO端口时,首先要使能该外设对应的时钟,1、GPIOx端口定义,2、GPIO_Pin_x管脚定义,3、GPIO_InitTypeDef初始化端口参数定义,4、GPIO_Init初始化端口定义,6、GPIO编程步骤,35,1、编程时,GPIOx端口的具体配置是从GPIOA、GPIOB、GPIOC、GPIOD、或GPIOE寄存器组开始。首先,在固件库中,用结构体GPIO_TypeDef定义GPIOx端口,(即定义GPIOx端口的7个设置寄存器):,在文件“stm32f10 x_map.h”中,定义如下:,/*-GeneralPurposeIO-*/typedefstructvu32CRL;/configurationregisterlow32(GPIOx_CRL)(x=AE)vu32CRH;vu32IDR;vu32ODR;vu32BSRR;vu32BRR;vu32LCKR;GPIO_TypeDef;/用结构体GPIO_TypeDef定义GPIOx端口/或称用结构体GPIO_TypeDef定义GPIOx寄存器组,GPIOx端口的7个设置寄存器,36,端口配置低寄存器(GPIOx_CRL)(x=A.E):,37,表3.11:端口位配置表,表3.12:输出模式位,38,#defineGPIOA_BASE(APB2PERIPH_BASE+0 x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0 x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE+0 x1000)#defineGPIOD_BASE(APB2PERIPH_BASE+0 x1400)#defineGPIOE_BASE(APB2PERIPH_BASE+0 x1800)#defineGPIOF_BASE(APB2PERIPH_BASE+0 x1C00)#defineGPIOG_BASE(APB2PERIPH_BASE+0 x2000),GPIOA、GPIOB、GPIOC、GPIOD、或GPIOE寄存器组的首地址:,/*Peripheralbaseaddressinthebit-bandregion*/#definePERIPH_BASE(u32)0 x40000000),/*Peripheralmemorymap*/#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0 x10000)#defineAHBPERIPH_BASE(PERIPH_BASE+0 x20000),0 x40011000,0 x40010800,0 x40010C00,0 x40011400,0 x40011800,0 x40011C00,0 x40012000,39,#ifdef_GPIOA#defineGPIOA(GPIO_TypeDef*)GPIOA_BASE)#endif/*_GPIOA*/#ifdef_GPIOB#defineGPIOB(GPIO_TypeDef*)GPIOB_BASE)#endif/*_GPIOB*/#ifdef_GPIOC#defineGPIOC(GPIO_TypeDef*)GPIOC_BASE)#endif/*_GPIOC*/#ifdef_GPIOD#defineGPIOD(GPIO_TypeDef*)GPIOD_BASE)#endif/*_GPIOD*/#ifdef_GPIOE#defineGPIOE(GPIO_TypeDef*)GPIOE_BASE)#endif/*_GPIOE*/#ifdef_GPIOF#defineGPIOF(GPIO_TypeDef*)GPIOF_BASE)#endif/*_GPIOF*/#ifdef_GPIOG#defineGPIOG(GPIO_TypeDef*)GPIOG_BASE)#endif/*_GPIOG*/,40,在文件“stm32f10 x_gpio.h”中,定义,2、GPIO_Pin_x管脚定义:,/*Exportedconstants-*/*GPIOpinsdefine-*/#defineGPIO_Pin_0(u16)0 x0001)/*Pin0selected*/#defineGPIO_Pin_1(u16)0 x0002)/*Pin1selected*/#defineGPIO_Pin_2(u16)0 x0004)/*Pin2selected*/#defineGPIO_Pin_3(u16)0 x0008)/*Pin3selected*/#defineGPIO_Pin_4(u16)0 x0010)/*Pin4selected*/#defineGPIO_Pin_5(u16)0 x0020)/*Pin5selected*/#defineGPIO_Pin_6(u16)0 x0040)/*Pin6selected*/#defineGPIO_Pin_7(u16)0 x0080)/*Pin7selected*/#defineGPIO_Pin_8(u16)0 x0100)/*Pin8selected*/#defineGPIO_Pin_9(u16)0 x0200)/*Pin9selected*/#defineGPIO_Pin_10(u16)0 x0400)/*Pin10selected*/#defineGPIO_Pin_11(u16)0 x0800)/*Pin11selected*/#defineGPIO_Pin_12(u16)0 x1000)/*Pin12selected*/#defineGPIO_Pin_13(u16)0 x2000)/*Pin13selected*/#defineGPIO_Pin_14(u16)0 x4000)/*Pin14selected*/#defineGPIO_Pin_15(u16)0 x8000)/*Pin15selected*/#defineGPIO_Pin_All(u16)0 xFFFF)/*Allpinsselected*/,41,使用按位或运算符“|”可以一次选中多个管脚。可以使用上表中的任意组合。,42,3、GPIO_InitTypeDef初始化端口参数定义,(1)枚举类型GPIOSpeed_TypeDef:用于定义GPIO管脚的响应速度,(2)枚举类型GPIOMode_TypeDef:用于定义GPIO管脚的工作模式,(3)结构体GPIO_InitTypeDef:用于初始化端口参数,难点,43,在文件“stm32f10 x_gpio.h”中,定义:,typedefenumGPIO_Speed_10MHz=1,GPIO_Speed_2MHz,GPIO_Speed_50MHzGPIOSpeed_TypeDef;/定义GPIO管脚的响应速度,(1)枚举类型GPIOSpeed_TypeDef:用于定义GPIO管脚的响应速度,44,typedefenumGPIO_Mode_AIN=0 x0,GPIO_Mode_IN_FLOATING=0 x04,GPIO_Mode_IPD=0 x28,GPIO_Mode_IPU=0 x48,GPIO_Mode_Out_OD=0 x14,GPIO_Mode_Out_PP=0 x10,GPIO_Mode_AF_OD=0 x1C,GPIO_Mode_AF_PP=0 x18GPIOMode_TypeDef;/定义GPIO管脚的工作模式,(2)枚举类型GPIOMode_TypeDef:用于定义GPIO管脚的工作模式,45,46,STM32单片机的每一个输入/输出引脚(即GPIO端口的每一位)可以配置成以下8种模式(4输入+2输出+2复用输出):,STM32单片机的GPIO端口模式:,输入浮空: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),输入,输出,复用输出,47,/*ConfigurationModeenumeration-*/typedefenumGPIO_Mode_AIN=0 x0,GPIO_Mode_IN_FLOATING=0 x04,GPIO_Mode_IPD=0 x28,GPIO_Mode_IPU=0 x48,GPIO_Mode_Out_OD=0 x14,GPIO_Mode_Out_PP=0 x10,GPIO_Mode_AF_OD=0 x1C,GPIO_Mode_AF_PP=0 x18GPIOMode_TypeDef;/定义GPIO管脚的工作模式,工作模式:用低4位区分。,输入,输出,输入、输出:高4位为1-输出,否则为输入。,48,I/O端口位的基本结构,输入数据寄存器,输出数据寄存器,位置位/复位寄存器,49,I/O端口位的输入电路,I/O端口位的输出电路,50,I/O端口位的输入电路,I/O端口位的浮空/上拉/下拉输入电路,I/O端口位的高阻抗模拟输入电路,51,图3.11:I/O端口位的输入浮空/上拉/下拉配置,激活施密特触发输入,输出缓冲器被禁止,根据输入配置(上拉,下拉或浮空)的不同,弱上拉和下拉电阻被连接,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,52,-参见“!STM32F10 x_中文版_参考手册V10_1(2010年1月10日).pdf”P108,53,图3.14:I/O端口位的高阻抗模拟输入配置,输出缓冲器被禁止,禁止施密特触发输入。,施密特触发输出值被强置为0,弱上拉和下拉电阻被禁止,读取输入数据寄存器时数值为0,54,55,I/O端口位的输出电路,I/O端口位的开漏输出电路,I/O端口位的推挽输出电路,I/O端口位的复用功能的推挽输出电路和开漏输出电路,56,图3.12I/O端口位的开漏输出配置,开漏模式:P-MOS从不被激活,仅N-MOS工作。,开漏模式:输出寄存器上的0激活N-MOS,输出低电平;而输出寄存器上的1将端口置于高阻状态(P-MOS从不被激活)。,激活施密特触发输入,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,57,图3.12I/O端口位的推挽输出配置,推挽模式:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS。,激活施密特触发输入,弱上拉和下拉电阻被禁止,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,58,59,图3.13:I/O端口位的复用功能配置,激活施密特触发输入,弱上拉和下拉电阻被禁止,在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,复用功能Input,到片上外设,自片上外设,60,如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。,61,图3.13:I/O端口位的复用功能配置,仅有输出,才有复用功能。,复用功能Input,到片上外设,自片上外设,开漏输出、推挽输出和复用功能的开漏输出、推挽输出不同之处:引脚和输出寄存器断开,并和片上外设的输出信号连接。增加了复用功能Input,62,63,/*GPIOInitstructuredefinition*/typedefstructu16GPIO_Pin;GPIOSpeed_Type

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论