ARM嵌入基础应用 10_第1页
ARM嵌入基础应用 10_第2页
ARM嵌入基础应用 10_第3页
ARM嵌入基础应用 10_第4页
ARM嵌入基础应用 10_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第4章

通用目的输入输出口作者:黄克亚2025年5月本章概要CONTENTSGPIO概述及管脚命名GPIO工作模式GPIO控制寄存器及配置实例GPIO复用功能重映射GPIO内部结构GPIO输出速度基于寄存器开发方式的LED灯闪烁工程4.1GPIO概述及管脚命名GPIO:GeneralPurposeInputOutput通用目的输入输出口,是微控制器必备的片上外设,几乎所有的基于微控制器的嵌入式应用开发都会用到它,是嵌入式系统学习中最基本的也是最重要的模块,4.1GPIO概述及管脚命名4.1GPIO概述及管脚命名GPIO是微控制器的数字输入输出的基本模块,可以实现微控制器与外部设备的数字交换。当微控制器没有足够的I/O引脚或片内存储器时,GPIO还可实现串行和并行通讯、存储器扩展等复用功能。STM32F103微控制器最多可以提供112个多功能双向I/O引脚。这些I/O引脚依次分布在不同的端口中,这些引脚分布在GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF和GPIOG端口中。每个端口有16个I/O引脚,分别命名为0-15。引脚命名采用“端口号+引脚号”方式,例如PA0、PA1、PA2…PA15。4.2GPIO内部结构本节介绍GPIO内部结构,一个端口有16个引脚,这样结构有16套,STM32F103ZET6有112个GPIO引脚,整芯片这样的结构有112套。4.2GPIO内部结构STM32F103微控制器GPIO的内部主要由保护二极管、输入驱动器、输出驱动器、输入数据寄存器、输出数据寄存器等组成,其中输入驱动器和输出驱动器是每一个GPIO引脚内部结构的核心部分。4.2GPIO内部结构GPIO的输入驱动器主要由TTL肖特基触发器、带开关的上拉电阻和带开关的下拉电阻电路组成。根据TTL肖特基触发器、上拉电阻和下拉电阻开关状态,GPIO的输入方式可以分为以下4种:4.2.1输入驱动器(1)模拟输入:TTL肖特基触发器关闭,模拟信号被提前送到片上外设,即A/D转换器。(2)上拉输入:GPIO内置上拉电阻,即上拉电阻开关闭合,下拉电阻开关打开,引脚默认情况下输入为高电平。(3)下拉输入:GPIO内置下拉电阻,即下拉电阻开关闭合,上拉电阻开关打开,引脚默认情况下输入为低电平。(4)浮空输入:GPIO内部既无上拉电阻也无下拉电阻,处于浮空状态,上拉电阻开关和下拉电阻开关均打开。该模式下,引脚下在默认情况下为高阻态(悬空),其电平状态完全由外部电路决定。4.2GPIO内部结构多路选择器根据用户设置决定该引脚是用于普通GPIO输出还是用于复用功能输出。普通输出:该引脚的输出信号来自于GPIO输出数据寄存器。复用功能输出:该引脚输出信号来自于片上外设,并且一个STM32微控制器引脚输出可能来自多个不同外设,但同一时刻,一个引脚只能使用这些复用功能中一个,其它复用功能都处于禁止状态。4.2.2输出驱动器多路选择器GPIO输出驱动器主要由多路选择器、输出控制和一对互补的MOS管组成。4.2GPIO内部结构4.2.2输出驱动器输出控制逻辑输出控制逻辑根据用户设置,控制一对互补的MOS管的导通或关闭状态决定GPIO输出模式。推挽(Push-Pull,PP)输出:就是一对互补的MOS管,NOMS和PMOS只有一个导通,另一个关闭,推挽式输出可以输出高电平和低电平。当内部输出“1”时,PMOS导通,NMOS截止,引脚相当于接VDD,输出高电平;当内部输出“0”时,NMOS导通,PMOS截止,引脚相当于接VSS,输出低电平。开漏输出(Open-Drain,OD)输出:开漏输出模式中,与VDD相连的PMOS始终处于截止状态,对于与VSS相连的NMOS来说其漏极是开路的。在开漏输出模式下,当内部输出“0”时,NMOS管导通,引脚相当于接地,外部输出低电平;当内部输出“1”时,NMOS管截止,由于此时PMOS管也截止,外部输出既不是高电平,也不是低电平,而是高阻态(悬空)。4.3GPIO工作模式4.3GPIO工作模式STM32芯片I/O引脚共有8种工作模式,包括4种输入模式和4种输出模式。输入模式输入浮空(GPIO_Mode_IN_FLOATING)输入上拉(GPIO_Mode_IPU)输入下拉(GPIO_Mode_IPD)模拟输入(GPIO_Mode_AIN)输出模式开漏输出(GPIO_Mode_Out_OD)开漏复用功能(GPIO_Mode_AF_OD)推挽式输出(GPIO_Mode_Out_PP)推挽式复用功能(GPIO_Mode_AF_PP)四种输入四种输出4.3GPIO工作模式4.3.1输入浮空输入浮空:浮空就是逻辑器件与引脚即不接高电平,也不接低电平。4.3GPIO工作模式4.3.2输入上拉输入上拉模式:上拉就是把电位拉高,比如拉到VCC。4.3GPIO工作模式4.3.3输入下拉输入下拉:就是把电位拉低,拉到GND。与上拉原理相似,4.3GPIO工作模式4.3.4模拟输入模拟输入:用于将芯片引脚模拟信号输入到内部的模数转换器,此时上拉电阻开关和下拉电阻开关均关闭,并且肖特基触发器也关闭。4.3GPIO工作模式4.3.5开漏输出开漏输出:输出端连接于N-MOS的漏极,相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。4.3GPIO工作模式4.3.6开漏复用输出开漏复用输出功能:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用),端口必须配置成复用功能输出模式(推挽或开漏)。4.3GPIO工作模式4.3.7推挽式输出推挽式输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个MOS管分别受到互补信号的控制,总是在一个MOS管导通的时候另一个截止。4.3GPIO工作模式4.3.8推挽式复用输出推挽式复用功能:可以理解为GPIO口被用作第二功能时的配置情况(并非作为通用IO口使用)。4.2GPIO内部结构模式名称性质特征浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平模拟输入模拟输入GPIO无效,引脚直接接入内部ADC开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSS复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS复用推挽输出数字输出由片上外设控制,高电平为接VDD,低电平接VSS工作模式总结4.3GPIO工作模式4.3.9工作模式选择01如果将需要将引脚信号读入到微控制器,则应选择输入工作模式;如果需要将微控制器内部信号更新到引脚端口,则应选择输出工作模式。02作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。03作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。04作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。4.3GPIO工作模式4.3.9工作模式选择05作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。06作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的某个复用功能模块。07GPIO工作在输出模式时,如果既要输出高电平(VDD)和又要输出低电平(VSS)且输出速度快(如OLED显示屏),则应选择推挽输出。08GPIO工作在输出模式时,如果要求输出电流大,或是外部电平不匹配(5V),则应选择开漏输出。4.4GPIO输出速度输出信号速度和驱动电路速度相匹配将会使电路达到最佳性能。4.4GPIO输出速度STM32微控制器I/O管脚内部有多个响应速度(2MHz,10MHz,50MHz)不同的驱动电路,用户可以根据自己的需要选择合适的驱动电路。一般推荐I/O引脚的输出速度是其输出信号速度的5-10倍。对于连接LED、数码管和蜂鸣器等外部设备,一般设置为2MHz。对于串口来说,这样只需要用2MHz的GPIO的引脚速度就可以了。

对于I2C接口,可以选用10MHz的GPIO引脚速度。对于SPI接口,需要选择呢50MHz的GPIO引脚速度

对于用作FSMC复用功能连接存储器的输出引脚,一般设置为50MHz的I/O引脚速度。如STM32微控制器的GPIO引脚工作于某个输出模式下,通常还需设置其输出速度。这个输出速度指的是I/O口驱动电路的响应速度,而不是输出信号的速度,输出信号的速度取决于软件程序。4.5复用功能重映射复用功能重映射,使芯片使用更加灵活,可以进一步优化PCB设计布局。4.5复用功能重映射用户根据实际需要可以把某些外设的“复用功能”从“默认引脚”转移到“备用引脚”上,这就是外设复用功能的I/O引脚重映射。例:对于STM32F103微控制器的片上外设USART1来说,它的发送端Tx和接收端Rx默认映射到引脚PA9和PA10,但如果此时引脚PA9已被另一复用功能TIM1的通道2(TIM1_CH2)占用,我们就需要对USART1进行重映射,将Tx和Rx重新映射到引脚PB6和PB7,其重映射关系如表。复用功能USART1_REMAP=0USART1_REMAP=1USART1_TxPA9PB6USART1_RxPA10PB7USART1重映像关系表4.6GPIO控制寄存器虽然我们使用的是库函数开发方式,但是对寄存器的学习有利于掌握STM32工作原理,并对需要频繁读写模块编写出高效代码。4.6GPIO控制寄存器端口配置低寄存器(GPIOx_CRL)(x=A..E)0131302928272625242322212019181716CNF7[1:0]MODE7[1:0]CNF6[1:0]MODE6[1:0]CNF5[1:0]MODE5[1:0]CNF4[1:0]MODE4[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW

1514131211109876543210CNF3[1:0]MODE3[1:0]CNF2[1:0]MODE2[1:0]CNF1[1:0]MODE1[1:0]CNF0[1:0]MODE0[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位:31:3027:2623:2219:1815:1411:107:63:2CNFy[1:0]:端口x配置位(y=0…7)(Portxconfigurationbits)软件通过这些位配置相应的I/O端口。在输入模式(MODE[1:0]=00):00:模拟输入模式01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式11:保留在输出模式(MODE[1:0]>00):00:通用推挽输出模式01:通用开漏输出模式10:复用功能推挽输出模式11:复用功能开漏输出模式位:29:2825:2421:2017:1613:129:85:41:0MODEy[1:0]:端口x的模式位(y=0…7)(Portxmodebits)软件通过这些位配置相应的I/O端口。00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz

4.6GPIO控制寄存器端口配置高寄存器(GPIOx_CRH)(x=A..E)0231302928272625242322212019181716CNF15[1:0]MOD15[1:0]CNF14[1:0]MOD14[1:0]CNF13[1:0]MOD13[1:0]CNF12[1:0]MOD12[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW

1514131211109876543210CNF11[1:0]MOD11[1:0]CNF10[1:0]MOD10[1:0]CNF9[1:0]MOD9[1:0]CNF8[1:0]MOD8[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位:31:3027:2623:2219:1815:1411:107:63:2CNFy[1:0]:端口x配置位(y=8…15)(Portxconfigurationbits)软件通过这些位配置相应的I/O端口。在输入模式(MODE[1:0]=00):00:模拟输入模式01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式11:保留在输出模式(MODE[1:0]>00):00:通用推挽输出模式01:通用开漏输出模式10:复用功能推挽输出模式11:复用功能开漏输出模式位:29:2825:2421:2017:1613:129:85:41:0MODEy[1:0]:端口x的模式位(y=8…15)(Portxmodebits)软件通过这些位配置相应的I/O端口。00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz

4.6GPIO控制寄存器I/O引脚工作模式端口配置模式配置模式CNF1CNF0MODE1MODE0PxODR寄存器通用输出推挽(Push-Pull)0001(最大输出速度为10MHz)10(最大输出速度为2MHz)11(最大输出速度为50MHz)0或1开漏(Open-Drain)10或1复用功能输出推挽(Push-Pull)10不使用开漏(Open-Drain)1不使用输入模拟输入0000(保留)不使用浮空输入1不使用下拉输入100上拉输入14.6GPIO控制寄存器端口输入数据寄存器(GPIOx_IDR)(x=A..E)0331302928272625242322212019181716保留

1514131211109876543210IDR15IDR14IDR13IDR12IDR11IDR10IDR9IDR8IDR7IDR6IDR5IDR4IDR3IDR2IDR1IDR0RRRRRRRRRRRRRRRR位31:16保留,始终读为0。位15:0IDRy[15:0]:端口输入数据(y=0…15)(Portinputdata)这些位为只读并只能以字(16位)的形式读出。读出的值为对应I/O口的状态。4.6GPIO控制寄存器端口输出数据寄存器(GPIOx_ODR)(x=A..E)0431302928272625242322212019181716保留

1514131211109876543210ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR8ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留,始终读为0。位15:0ODRy[15:0]:端口输出数据(y=0…15)(Portoutputdata)这些位可读可写并只能以字(16位)的形式操作。注:对GPIOx_BSRR(x=A…E),可以分别地对各个ODR位进行独立的设置/清除。4.6GPIO控制寄存器端口位设置/清除寄存器(GPIOx_BSRR)(x=A..E)0531302928272625242322212019181716BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0WWWWWWWWWWWWWWWW

1514131211109876543210BS15BS14BS13BS12BS11BS10BS9BS8BS7BS6BS5BS4BS3BS2BS1BS0WWWWWWWWWWWWWWWW位31:16BRy:清除端口x的位y(y=16…31)(PortxResetbity)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:清除对应的ODRy位为0注:如果同时设置了BSy和BRy的对应位,BSy位起作用。位15:0BSy:设置端口x的位y(y=0…15)(PortxSetbity)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:设置对应的ODRy位为14.6GPIO控制寄存器端口位清除寄存器(GPIOx_BRR)(x=A..E)0631302928272625242322212019181716保留

1514131211109876543210BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0WWWWWWWWWWWWWWWW位31:16保留。位15:0BRy:清除端口x的位y(y=0…15)(PortxResetbity)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:清除对应的ODRy位为04.6GPIO控制寄存器端口配置锁定寄存器(GPIOx_LCKR)(x=A..E)0731302928272625242322212019181716保留LCKK

RW

1514131211109876543210LCK15LCK14LCK13LCK12LCK11LCK10LCK9LCK8LCK7LCK6LCK5LCK4LCK3LCK2LCK1LCK0RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:17保留。位16LCKK:锁键(Lockkey)该位可随时读出,它只可通过锁键写入序列修改。0:端口配置锁键位未激活1:端口配置锁键位被激活,下次系统复位前GPIOx_LCKR寄存器被锁住。锁键的写入序列:写1->写0->写1->读0->读1最后一个读可省略,但可以用来确认锁键已被激活。注:在操作锁键的写入序列时,不能改变LCK[15:0]的值。操作锁键写入序列中的任何错误将不能激活锁键位15:0LCKy:端口x的锁位y(y=0…15)(PortxLockbity)这些位可读可写但只能在LCKK位为0时写入。0:不锁定端口的配置1:锁定端口的配置4.6GPIO控制寄存器APB2外设时钟使能寄存器(RCC_APB2ENR)0831302928272625242322212019181716保留

1514131211109876543210ADC3ENUST1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGENIOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOENRWRWRWRWRWRWRWRWRWRWRWRWRWRW

RW位31:16保留,始终读为0。位15ADC3EN:ADC3接口时钟使能(ADC3interfaceclockenable)由软件置’1’或清’0’0:ADC3接口时钟关闭;1:ADC3接口时钟开启。位14USART1EN:USART1时钟使能(USART1clockenable)由软件置’1’或清’0’0:USART1时钟关闭;1:USART1时钟开启。位13TIM8EN:TIM8定时器时钟使能(TIM8Timerclockenable)由软件置’1’或清’0’0:TIM8定时器时钟关闭;1:TIM8定时器时钟开启。位12SPI1EN:SPI1时钟使能(SPI1clockenable)由软件置’1’或清’0’0:SPI1时钟关闭;1:SPI1时钟开启。4.6GPIO控制寄存器APB2外设时钟使能寄存器(RCC_APB2ENR)081514131211109876543210ADC3ENUST1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGENIOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOENRWRWRWRWRWRWRWRWRWRWRWRWRWRW

RW位11TIM1EN:TIM1定时器时钟使能(TIM1Timerclockenable)由软件置’1’或清’0’0:TIM1定时器时钟关闭;1:TIM1定时器时钟开启。位10ADC2EN:ADC2接口时钟使能(ADC2interfaceclockenable)由软件置’1’或清’0’0:ADC2接口时钟关闭;1:ADC2接口时钟开启。位9ADC1EN:ADC1接口时钟使能(ADC1interfaceclockenable)由软件置’1’或清’0’0:ADC1接口时钟关闭;1:ADC1接口时钟开启。位8IOPGEN:IO端口G时钟使能(I/OportGclockenable)由软件置’1’或清’0’0:IO端口G时钟关闭;1:IO端口G时钟开启。位7IOPFEN:IO端口F时钟使能(I/OportFclockenable)由软件置’1’或清’0’0:IO端口F时钟关闭;1:IO端口F时钟开启。位6IOPEEN:IO端口E时钟使能(I/OportEclockenable)由软件置’1’或清’0’0:IO端口E时钟关闭;1:IO端口E时钟开启。4.6GPIO控制寄存器APB2外设时钟使能寄存器(RCC_APB2ENR)081514131211109876543210ADC3ENUST1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGENIOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOENRWRWRWRWRWRWRWRWRWRWRWRWRWRW

RW位5IOPDEN:IO端口D时钟使能(I/OportDclockenable)由软件置’1’或清’0’0:IO端口D时钟关闭;1:IO端口D时钟开启。位4IOPCEN:IO端口C时钟使能(I/OportCclockenable)由软件置’1’或清’0’0:IO端口C时钟关闭;1:IO端口C时钟开启。位3IOPBEN:IO端口B时钟使能(I/OportBclockenable)由软件置’1’或清’0’0:IO端口B时钟关闭;1:IO端口B时钟开启。位2OPAEN:IO端口A时钟使能(I/OportAclockenable)由软件置’1’或清’0’0:IO端口A时钟关闭;1:IO端口A时钟开启。位1保留,始终读为0。位0AFIOEN:辅助功能IO时钟使能(AlternatefunctionI/Oclockenable)由软件置’1’或清’0’0:辅助功能IO时钟关闭;1:辅助功能IO时钟开启。4.7GPIO寄存器配置实例本项目配置LED所连接的PC0~PC7为推挽输出模式。4.7GPIO寄存器配置实例LED指示灯电路如图,如果需要实现8个LED闪烁程序,则需要对相应的寄存器进行配置。(1)端口配置低寄存器(GPIOC_CRL)(2)端口输出数据寄存器(GPIOC_ODR)(3)端口位设置/清除寄存器(GPIOC_BSRR)(4)APB2外设时钟使能寄存器(RCC_APB2ENR)4.7GPIO寄存器配置实例端口配置低寄存器(GPIOC_CRL)0131302928272625242322212019181716CNF7[1:0]MODE7[1:0]CNF6[1:0]MODE6[1:0]CNF5[1:0]MODE5[1:0]CNF4[1:0]MODE4[1:0]0001000100010001RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW1514131211109876543210CNF3[1:0]MODE3[1:0]CNF2[1:0]MODE2[1:0]CNF1[1:0]MODE1[1:0]CNF0[1:0]MODE0[1:0]0001000100010001RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW配置说明:GPIOC_CRL=0x11111111MODEy[1:0]=01:输出模式,最大速度10MHz。CNFy[1:0]=00:通用推挽输出模式该实验无须配置GPIOC_CRH,因为该LED闪烁电路只使用GPIOC的低8位,即PC0~PC7。4.7GPIO寄存器配置实例端口输出数据寄存器(GPIOC_ODR)0231302928272625242322212019181716保留

15141312111098765432100000000000000000RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW如果要使LED全部点亮,注意开发板的LED采用共阳接法,即I/O端口输出低电平亮,反之不亮。注:GPIOC_ODR=0x00000000如果将LED灯全部熄灭,则GPIOC_ODR的数值为:注:GPIOC_ODR=0x0000FFFF31302928272625242322212019181716保留

15141312111098765432101111111111111111RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW4.7GPIO寄存器配置实例端口位设置/清除寄存器(GPIOC_BSRR)03如果要使LED灯全部点亮,则GPIOC_BSRR的数值为:GPIOC_BSRR=0xFFFF0000BRy=1:清除对应的ODRy位为0。BSy=0:对对应的ODRy位不产生影响。如果要使LED灯全部熄灭,则GPIOC_BSRR的数值为:GPIOC_BSRR=0x0000FFFFBRy=0:对对应的ODRy位不产生影响。BSy=1:设置对应的ODRy位为1。313029282726252423222120191817161111111111111111WWWWWWWWWWWWWWWW

15141312111098765432100000000000000000WWWWWWWWWWWWWWWW313029282726252423222120191817160000000000000000WWWWWWWWWWWWWWWW

15141312111098765432101111111111111111WWWWWWWWWWWWWWWW4.7GPIO寄存器配置实例APB2外设时钟使能寄存器(RCC_APB2ENR)04如果要使用某一个外设,首先就需要打开其时钟;当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是0x0。配置说明:IOPCEN:IO端口C时钟使能(I/OportCclockenable)0:IO端口C时钟关闭;1:IO端口C时钟开启。RCC_APB2ENR=0x0000001031302928272625242322212019181716保留

1514131211109876543210ADC3ENUST1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGENIOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOEN0000000000010000RWRWRWRWRWRWRWRWRWRWRWRWRWRW

RW4.8寄存器版LED灯闪烁工程使用寄存器方式开发LED周期闪烁程序,亮灭各1秒,周期闪烁。4.8寄存器版LED灯闪烁工程4.8.1创建寄存器版工程模板寄存器版工程模板直接采用第三章所创建的工程模板:由于基于寄存器访问的工程不需要调用ST标准固件库,所以可以将ST标准外设库项目组“ST_Driver”删除。又因为程序比较简单,直接写在main函数当中,所以又将项目组“APP”删除。4.8寄存器版LED灯闪烁工程4.8.2LED灯闪烁程序设计LED灯闪烁控制要求为,开发板上电8个LED全部点亮,延时1秒,8个LED全部熄灭,再延时1秒,再全部点亮8个LED,周而复始,不断循环,其流程图如左图。开始初化PC口为10MHz推挽输出PC口输出低电平点亮LED延时1秒PC口输出高电平熄灭LED

延时1秒设置GPIOC_ODR寄存器LED闪烁源程序(main.c):intmain(){ u32i; RCC->APB2ENR=0x0010; GPIOC->CRL=0x11111111;

温馨提示

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

评论

0/150

提交评论