超经典的STM32学习笔记——第一章GPIO口

合集下载

嵌入式GPIO学习笔记

嵌入式GPIO学习笔记

GPIO学习笔记一、GPIO工作原理根据具体型号不同,STM32F103微控制器的GPIO可以提供最多112个多功能双向I/O引,这些1/O引脚GPIOA,GPIOB、GPIOC、GPIOD、GPIOE、GPIO和GPG等端口中,其中,端口号通常以大写字母命名,从“A”开始,依次类推,每个端口有16个I/O引脚,通常以数字命名,从0开始,直到15为止。

例如,STM32F103RCT微控制器的GPIOA有16个引脚、分别为PAO、PA1,PA2,……PA15。

二、内部结构输出驱动器(普通输出,复用功能输出):由多路选择器、输出控制和一对互补的MOS管组成。

输入驱动器:(模拟输入,上拉输入,下拉输入,浮空输入)由TTL肖特基触发器、带开关的上拉电阻电路盒带开关的下拉电阻电路组成。

三、工作模式:(1)普通推挽输出:引脚可输出低电平和高电平,用于较大功率驱动的输出。

(2)普通开漏输出:引脚只能输出低电平。

(3)复用推挽输出:引脚不仅具有推挽输出的特点,还使用片内外设的功能。

(4)复用开漏输出:引脚不仅具有开漏输出特点,而且还使用片内外设功能。

(5)上拉输入:用于默认上拉至高电平输入。

(6)下拉输入:用于默认下拉至高电平输入。

(7)浮空输入:用于不确定高电平输入。

(8)模拟输入:用于外部模拟信号输入。

四、GPIO相关库函数:GPIO_DeInit:将外设GPIOx寄存器恢复为复位启动时的默认值。

GPIO_Init:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器。

GPIO_SetBits:指定GPIO端口的指定引脚置高电平。

GPIO_ResetBits:指定GPIO端口的指定引脚置低电平。

GPIO_Write:向指定GPIO端口写入数据。

GPIO_ReadOutputDataBit:读取指定GPIO端口的指定引脚的输出。

GPIO_ReadOutputData:读取指定GPIO端口的输出。

stm32GPIO口工作原理详细解释

stm32GPIO口工作原理详细解释

STM32的GPIO介绍STM32引脚说明GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。

GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。

通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。

STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端口复用和重映射(AFIO辅助功能时钟)中有详细的介绍。

GPIO基本结构每个GPIO内部都有这样的一个电路结构,这个结构在本文下面会具体介绍。

这边的电路图稍微提一下:保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。

当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。

P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。

这里的电路会在下面很详细地分析到。

TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。

但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。

ADC外设要采集到的原始的模拟信号。

这里需要注意的是,在查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有“FT”一列,这代表着这个GPIO口时兼容3.3V和5V 的;如果没有标注“FT”,就代表着不兼容5V。

使用HAL库开发STM32GPIO口基础使用与外部中断

使用HAL库开发STM32GPIO口基础使用与外部中断

使用HAL库开发STM32GPIO口基础使用与外部中断GPIO(General Purpose Input/Output)是STM32系列微控制器上常见的功能模块之一,它用于与外部设备进行数据交互。

本文主要介绍如何使用HAL库来配置和使用STM32的GPIO口,并实现外部中断功能。

在使用GPIO口之前,我们首先需要了解STM32芯片上的GPIO引脚的命名方式。

以STM32F103C8T6为例,它具有32个GPIO引脚,从PA0到PA15和PB0到PB15、其中,GPIO口的命名方式为"A"加上引脚的编号。

例如,PA0表示GPIOA的第0个引脚,PB10表示GPIOB的第10个引脚。

1.引入头文件和宏定义首先,在代码文件的顶部引入"stm32f1xx_hal.h"头文件。

然后,在需要使用GPIO功能的地方,定义一个GPIO_InitTypeDef结构体变量,并通过它来配置GPIO的参数。

2.配置GPIO模式和速度在设置GPIO口之前,需要配置GPIO的模式和速度。

通过设置GPIO_InitStruct结构体变量的对应成员变量来实现。

例如,要将PA5配置为推挽输出模式,可以使用如下语句:```GPIO_InitStruct.Pin = GPIO_PIN_5;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);```这里,GPIO_PIN_5表示PA5引脚,GPIO_MODE_OUTPUT_PP表示推挽输出模式,GPIO_SPEED_FREQ_HIGH表示高速模式。

3.配置GPIO引脚在配置好GPIO模式和速度后,可以通过HAL_GPIO_Init函数来配置GPIO引脚,并进行初始化。

学习笔记:STM32外部中断

学习笔记:STM32外部中断

学习笔记:STM32的外部中断(库函数)在为某引脚配置中断前,同样要先初始化该引脚的配置,用GPIO_Init()函数初始化,不同的是,由于是外部中断,所以输入模式要设置上拉输入。

假设外部中断引脚为PE.2,则该引脚初始化配置的程序为:IOIO口作为外部中断输入是复用功能,因此在此基础上还需要对另一个时钟信号进行初始化。

这是IO口作为复用功能时需要进行初始化的时钟,另外,要注意的是,做一般功能使用的IO口只需要调用第一个函数即可,而作为复用功能的IO口,两个函数都要调用,两者缺一不可,否则不能正常使用。

STM32的每个IO都可以作为外部中断的中断输入口,这点也是STM32的强大之处。

STM32F103的中断控制器支持19个外部中断/事件请求。

每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。

STM32F103的19个外部中断为:线0~15:对应外部IO口的输入中断。

线16:连接到PVD输出。

线17:连接到RTC闹钟事件。

线18:连接到USB唤醒事件。

从上面可以看出,STM32供IO口使用的中断线只有16个,但是STM32的IO口却远远不止16个,那么STM32是怎么把16个中断线和IO口一一对应起来的呢?于是STM32就这样设计,GPIO的管脚GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线0~15。

这样每个中断线对应了最多7个IO口,以线0为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。

而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。

下面我们看看GPIO跟中断线的映射关系图:在库函数中,配置GPIO与中断线的映射关系是通过函数GPIO_EXTILineConfig()来实现的:void GPIO_EXTILineConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource)该函数将端口与中断线映射起来,使用示例是:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);将中断线2与GPIOE映射起来,那么很显然是GPIOE.2与EXTI2中断线连接了。

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析
STM32八种IO口模式区别
(1)GPIO_Mode_AIN模拟输入
(2)GPIO_Mode_IN_FLOATING浮空输入
(3)GPIO_Mode_IPD下拉输入
(4)GPIO_Mode_IPU上拉输入
(5)GPIO_Mode_Out_OD开漏输出
(6)GPIO_Mode_Out_PP推挽输出
(7)GPIO_Mode_AF_OD复用开漏输出
(8)GPIO_Mode_AF_PP复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。

上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。

要得到高电平状态需要上拉电阻才行。

适合于做电流型的驱动,。

STM32学习心得笔记

STM32学习心得笔记

STM32学习心得笔记时钟篇在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

①、HSI是高速内部时钟,RC振荡器,频率为8MHz。

②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

③、LSI是低速内部时钟,RC振荡器,频率为40kHz。

④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。

倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。

另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。

RTC的时钟源通过RTCSEL[1:0]来选择。

STM32中有一个全速功能的USB 模块,其串行接口引擎需要一个频率为48MHz的时钟源。

该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL 必须使能,并且时钟频率配置为48MHz或72MHz。

另外,STM32还可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。

系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。

系统时钟可选择为PLL 输出、HSI或者HSE。

系统时钟最大频率为72MHz,它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。

其中AHB分频器输出的时钟送给5大模块使用:①、送给AHB 总线、内核、内存和DMA使用的HCLK时钟。

②、通过8分频后送给Cortex的系统定时器时钟。

③、直接送给Cortex的空闲运行时钟FCLK。

④、送给APB1分频器。

APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。

stm32烧写口定义

stm32烧写口定义

stm32烧写口定义
STM32微控制器通常具有用于烧写程序的引脚或接口。

这些接口通常被称为烧写口或调试接口。

在STM32微控制器中,常见的烧写口包括SWD(Serial Wire Debug)接口和JTAG(Joint Test Action Group)接口。

SWD接口通常包括以下引脚:
1. SWDIO(Serial Wire Debug I/O),用于数据传输的双向引脚。

2. SWCLK(Serial Wire Clock),用于时钟传输的引脚。

3. 供电和接地引脚,用于为调试接口提供电源和接地。

JTAG接口通常包括以下引脚:
1. TDI(Test Data Input),用于在测试模式下将数据输入到芯片的引脚。

2. TDO(Test Data Output),用于在测试模式下从芯片输出
数据的引脚。

3. TCK(Test Clock),用于在测试模式下提供时钟信号的引脚。

4. TMS(Test Mode Select),用于选择测试模式的引脚。

5. 供电和接地引脚,用于为调试接口提供电源和接地。

这些烧写口通常用于通过调试器或编程器与STM32微控制器进
行通信,以便烧写程序、调试代码或进行其他调试操作。

在实际使
用中,具体的引脚定义可能会因芯片型号而有所不同,因此在进行
烧写时需要根据具体的芯片型号来查阅相应的数据手册或参考资料,以确保正确连接烧写口。

STM32F4学习笔记之GPIO(使用固件库)

STM32F4学习笔记之GPIO(使用固件库)

1.使能GPIO的AHB时钟,使用函数:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);2.配置GPIO工作模式用GPIO_Init()函数数据类型说明typedef struct{uint32_t GPIO_Pin; //引脚配置GPIOMode_TypeDef GPIO_Mode; //GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF (备用),GPIO_Mode_AN(模拟)GPIOSpeed_TypeDef GPIO_Speed;// GPIO_Speed_2MHz,GPIO_Speed_25MHz,GPIO_Speed_50MHz,GPIO_Speed_100MHzGPIOOType_TypeDef GPIO_OType; // GPIO_OType_PP(推挽),GPIO_OType_OD(开漏)GPIOPuPd_TypeDef GPIO_PuPd; GPIO_PuPd_NOPULL(无),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)}GPIO_InitTypeDef;3.备用功能配置(除ADC和DAC外的所有非GPIO功能),使用函数void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)* This GPIO_AF can be one of the following values:* @arg GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin to AF0 (default after reset)* @arg GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset)* @arg GPIO_AF_TAMPER: Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset)* @arg GPIO_AF_SWJ: Connect SWJ pins (SWD and JTAG)to AF0 (default after reset)* @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset)* @arg GPIO_AF_TIM1: Connect TIM1 pins to AF1* @arg GPIO_AF_TIM2: Connect TIM2 pins to AF1* @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2* @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2* @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2* @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3* @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3* @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3* @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3* @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4* @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4* @arg GPIO_AF_I2C3: Connect I2C3 pins to AF4* @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5* @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5* @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6* @arg GPIO_AF_I2S3ext: Connect I2S3ext pins to AF7* @arg GPIO_AF_USART1: Connect USART1 pins to AF7* @arg GPIO_AF_USART2: Connect USART2 pins to AF7* @arg GPIO_AF_USART3: Connect USART3 pins to AF7* @arg GPIO_AF_UART4: Connect UART4 pins to AF8* @arg GPIO_AF_UART5: Connect UART5 pins to AF8* @arg GPIO_AF_USART6: Connect USART6 pins to AF8* @arg GPIO_AF_CAN1: Connect CAN1 pins to AF9* @arg GPIO_AF_CAN2: Connect CAN2 pins to AF9* @arg GPIO_AF_TIM12: Connect TIM12 pins to AF9* @arg GPIO_AF_TIM13: Connect TIM13 pins to AF9* @arg GPIO_AF_TIM14: Connect TIM14 pins to AF9* @arg GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10* @arg GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10* @arg GPIO_AF_ETH: Connect ETHERNET pins to AF11* @arg GPIO_AF_FSMC: Connect FSMC pins to AF12* @arg GPIO_AF_OTG_HS_FS: Connect OTG HS (configured in FS) pins to AF12* @arg GPIO_AF_SDIO: Connect SDIO pins to AF12* @arg GPIO_AF_DCMI: Connect DCMI pins to AF13* @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF154.使用GPIO_ReadInputData(GPIO_TypeDef* GPIOx)和GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读输入信号5.使用GPIO_SetBits()/GPIO_ResetBits()设置输出引脚6.上电或复位后,引脚备用功能都没启用(JTAG引脚除外),为悬浮输入状态7.LSE引脚OSC32_IN 和OSC32_OUT(PC14 and PC15)的优先级高于GPIO8.HSE引脚OSC_IN/OSC_OUT (PH0 / PH1)的优先级高于GPIO例程:int main(void){GPIO_InitTypeDef GPIO_InitStructure;/* GPIOG Periph clock enable */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOD, GPIO_Pin_12);GPIO_ResetBits(GPIOD, GPIO_Pin_13);while (1){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0){GPIO_SetBits(GPIOD, GPIO_Pin_13);GPIO_ResetBits(GPIOD, GPIO_Pin_12);}else{GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_13);}}}。

最全的STM32八种IO口模式讲解(已经标注,新手必备)

最全的STM32八种IO口模式讲解(已经标注,新手必备)

以及上拉输入、下拉输入、浮空输入、模拟输入的区别最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多:(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_Mode_AF_PP 复用推挽输出对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。

因此,在这里做一个总结:推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。

高低电平由IC的电源低定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。

输出既可以向负载灌电流,也可以从负载抽取电流。

推拉式输出级既提高电路的负载能力,又提高开关速度。

详细理解:如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。

对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。

当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。

这样一来,输出高低电平时,VT3 一路和VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。

又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。

因此,推拉式输出级既提高电路的负载能力,又提高开关速度。

STM32F103常用的初始化步骤(第一部分2020年2月)

STM32F103常用的初始化步骤(第一部分2020年2月)
NVIC_Init();
USART_ITConfig();
6、使能串口
USART_Cmd();
编写中断处理函数
USART1_IRQHandler()
{
}
外部中断初始化过程
1、初始化IO口为输入(使能IO、初始化IO)
2、开启AFIO时钟
3、设置IO口与中断线的映射关系
GPIO_EXTILineConfig();
{
中断逻辑…
EXTI_ClearITPendingBit(EXTI_Line3);
//清除 LINE 上的中断标志位
}
}
IWDG过程
WWDG过程
1、取消寄存器写保护(向IWDG_KR写入0X5555)
IWDG_WriteAccessCmd();
2、设置独立看门狗的预分频系数和重装载值
IWDG_SetPrescaler();
//CC1P=1设置为下降沿捕获
……
}
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);
//清除中断标志位
}
电容触摸按键:
见原子代码。
FSMC初始化
1、GPIO,FSMC,AFIO时钟使能;
2、GPIO初始化:GPIO_Init()函数;
3、FSMC初始化:FSMC_NORSRAMInit()函数;
串口初始化代码方式一
串口初始化代码方式二
串口初始化代码方式三(推荐使用)
1、使能IO和USART
2、初始化IO
3、NVIC初始化
4、USART初始化
5、开启中断
USART_ITConfig();
6、使能串口

STM32GPIO相关寄存器

STM32GPIO相关寄存器

STM32 GPIO 相关寄存器每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

常用的IO端口寄存器只有四个:CRH,CRL,IDR,ODR.数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。

每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。

另外,STM32的每个端口使用前都要将其时钟使能,STM32的GPIO的时钟统一挂接在APB2上,具体的使能寄存器为RCC_APB2ENR,该寄存器的第2位到第8位分别控制GPIOx(x=A,B,C,D,E,F,G)端口的时钟使能,当外设时钟没有启用时,程序不能读出外设寄存器的数值,如打开PORTA 时钟:RCC—>APB2ENR|=1〈<2; //使能PORTA时钟使能外设时钟后,GPIOA的十六位就可以按照设定的状态工作了,之后就是具体设置哪一位了以第八位为例即高位的首位,在GPIOx_CRH寄存器中进行设置,GPIOA的每一位都有该寄存器的四位来设定相应的参数,这四位中的高两位(CNF0,CNF1)设置GPIO的输入输出模式,低两位(MODE0,MODE1)是设置GPIO的输出频率,具体可以参考STM32参考手册。

GPIOA->CRH&=0XFFFFFFF0; //清掉PA8原来的设置,同时屏蔽其它端口,不影响其它端口的设置GPIOA—〉CRH|=0X00000003;//PA8 推挽输出十六进制中的3 换成二进制 00 11 前两位00表示推挽输出,11代表输出频率50Mhz,若CRH|=0x4,表示模拟输入模式(ADC用),0x3表示推挽输出模式(作输出口用,50M速率),0x8表示上/下拉输入模式(做输入口用),0xB表示复用输出(使用IO口的第二功能,50M速率). 这是对一位的操作,当然也可以多位操作,因为STM32对GPIO操作必须是32位全字操作,设置完成后GPIOA的第8位就可以使用了之后给GPIOA—>ODR=0x xxxx xxxx送数据就行了。

STM32 GPIO教程

STM32 GPIO教程
通用输入输出端口 GPIO
系统外设
GPIO特性
最大封装(64引脚)上多达55个多功能双向GPIO(GPIO 引脚占有率相比STM32F1系列的80%更增加到86%) 几乎所有GPIO都是5V容忍(ADC引脚除外) GPIO分布在5个端口上:GPIOA[0~15]、GPIOB[0~15]、 GPIOC[0~15]、GPIOD[0~2]、GPIOF[4~7] 使用BSRR和BRR寄存器可以完成对引脚的原子置位和 复位操作 GPIO连在AHB总线,使得最高翻转速度高达12MHz 输出斜率可配置,高达50MHz 端口A和B上的引脚配置可通过LCKR寄存器锁定 55个引脚都可以配置成外部中断(可同时使能16个) 来把MCU从停止模式唤醒
I2C1端口支持1MHz超快速总线【FTf】
PB6/7 (I2C1_SCL/SDA) PB8/9 (I2C1_SCL/SDA)
其余端口都是5V容忍【FT】
10
Quiz
How many I/Os and ports there are in the STM32F0xx microcontroller ? ____________
可编程复用开关使得任意时刻只有一个外设连到 某个具体的GPIO。只有GPIOA和GPIOB有复用开关 某些外设功能还可以重映射到其他引脚,从而使 得能同时使用的外设数量更多
AF0 (SPI1_MISO) AF1 (TIM3_CH1) AF2 (TIM1_BKIN) Pin x (0…7)
AF7 (COMP1_OUT)
Output Driver
VSS
Push-Pull Open Drain
* In output mode, the I/O speed is configurable through OSPEEDR register: 2MHz, 10MHz or 50MHz

STM32通用输入输出之GPIO(STM32神舟I号开发板)

STM32通用输入输出之GPIO(STM32神舟I号开发板)
I/O
表 3:端口 C GPIO 管脚描述 描述
通用输入/输出 PC1 到 PC12 通用输入/输出 PC13 到 PC15 的 I/O 口功能有限制(同一时间内只有 一个 I/O 口可以作为输出,速度必须限制在 2MHZ 内,而且这些 I/O
口不能当作电流源(如驱动 LED))
管脚名称 PD[1:0]
6.1 通用输入/输出(GPIO) ............................................................................................1 6.1.1 管脚特性...........................................................................................................1 6.1.2 GPIO应用领域 .................................................................................................1 6.1.3 管脚分配...........................................................................................................1 6.1.4 GPIO管脚内部硬件电路原理剖析..................................................................2 6.1.5 STM32 的GPIO管脚深入分析 ........................................................................5 6.1.6 在STM32 中如何配置片内外设使用的IO端口............................................10 6.1.7 例程 01 单个LED点灯闪烁程序 ..................................................................11 6.1.8 例程 02 LED双灯闪烁实验 ........................................................................14 6.1.9 例程 03 LED三个灯同时亮同时灭 ............................................................16 6.1.10 例程 04 LED流水灯程序 ...............................................................................17

单片机中的GPIO口定义及其应用场景解说

单片机中的GPIO口定义及其应用场景解说

单片机中的GPIO口定义及其应用场景解说概述:在单片机中,GPIO(General Purpose Input/Output)引脚是一种通用输入输出引脚,具有较强的灵活性和可扩展性。

GPIO口可以被编程为输入或输出,并且可以根据需要进行读取或写入操作。

本文将介绍GPIO口的定义以及其在不同应用场景中的具体应用。

一、GPIO口的定义GPIO口是单片机芯片上的一种通用引脚,它不像专用引脚拥有特定功能,而是具有多种用途。

GPIO口的数量和功能根据不同的单片机型号而异,通常用数字编号进行标识。

在使用前,需要通过软件配置将其设置为输入或输出模式,并通过编程操作进行读取或写入。

二、GPIO口的应用场景解说1. 控制外部设备GPIO口常用于控制外部设备,如LED灯、蜂鸣器、电机、继电器等。

以LED 灯为例,将一个GPIO口设置为输出模式后,可通过向GPIO口写入高电平或低电平控制LED的亮暗。

通过编写简单的代码,可以实现各种模式的闪烁、呼吸等效果。

2. 接收外部信号GPIO口还可以被配置为输入模式,用于接收外部的信号。

比如,使用GPIO 口作为按钮的输入口,通过读取GPIO口的电平变化来检测按钮是否被按下。

这样可以实现各种应用,如开关控制、按键输入等。

3. 扩展芯片的控制通过GPIO口,可以与其他外设进行通信,控制和读取外部芯片的数据。

比如,通过GPIO口与传感器进行通信,读取传感器的数据,实现环境监测、智能家居等功能。

此外,通过GPIO口与一些外部设备进行通信,如LCD显示屏、数码管、无线模块等,实现数据的输入输出和显示功能。

4. 中断控制GPIO口也可以用于中断控制,即当GPIO口的电平发生变化时,单片机可以中断当前的程序执行,并执行预先定义好的中断服务程序。

这种方式相较于轮询检测GPIO口状态,更加高效,可以及时响应外部事件的变化。

例如,通过GPIO口接收外部传感器的触发信号,当信号发生变化时,可以立即执行相应的处理程序。

STM32IO口函数GPIO使用说明

STM32IO口函数GPIO使用说明

STM32IO口函数GPIO使用说明STM32是一款广泛使用的32位单片机,具有丰富的外设资源,其中之一就是IO(Input/Output)口。

IO口是STM32与外部世界进行通信的接口,本文将对如何使用STM32IO口函数GPIO进行详细说明。

GPIO是通用输入输出口,可以配置为输入或输出,可以连接到各种外部设备如按钮、开关、LED等。

STM32提供了一系列GPIO口,如GPIOA、GPIOB等。

每个GPIO口有多个引脚可供选择,如GPIOA口有GPIO_Pin_0到GPIO_Pin_15共16个引脚。

在使用IO口之前,需要初始化IO口的设置,包括如下步骤:1.选择GPIO口:选择需要操作的GPIO口,如GPIOA或GPIOB。

2.配置引脚模式:确定所需的引脚模式,如输入、输出或复用模式。

3.配置引脚输出类型:如果选择输出模式,需要确定输出类型,如推挽输出或开漏输出。

4.配置引脚速度:确定引脚的传输速度。

5.配置引脚上拉/下拉:确定引脚是否需要上拉或下拉电阻。

6.配置引脚复用功能:如果选择复用模式,配置引脚使用的功能。

以下为具体的GPIO函数说明:1. GPIO_InitTypeDef:GPIO初始化结构体,包含需要配置的GPIO口、引脚模式、输出类型、速度、上拉/下拉等信息。

- 参数:GPIO_TypeDef* GPIOx:需要初始化的GPIO口;uint16_t GPIO_Pin: 需要初始化的引脚。

2. GPIO_Pin_0到GPIO_Pin_15:宏定义,用于选择要配置的引脚。

3. GPIO_Mode:引脚模式枚举类型,包括输入模式(GPIO_Mode_IN)、输出模式(GPIO_Mode_OUT)和复用功能模式(GPIO_Mode_AF)。

4. GPIO_Speed:引脚速度枚举类型,包括低速(GPIO_Speed_2MHz)、中速(GPIO_Speed_10MHz)和高速(GPIO_Speed_50MHz)。

STM32中使用GPIO的总结(超强)

STM32中使用GPIO的总结(超强)

STM32 GPIO使用操作步骤:1.使能GPIO对应的外设时钟例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);2.声明一个GPIO_InitStructure结构体例如:GPIO_InitTypeDef GPIO_InitStructure;3.选择待设置的GPIO管脚例如:/* 选择待设置的GPIO第7、8、9管脚位,中间加“|”符号 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;4.设置选中GPIO管脚的速率例如:/* 设置选中GPIO管脚的速率为最高速率2MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //最高速率2MHz5.设置选中GPIO管脚的模式例如:/* 设置选中GPIO管脚的模式为开漏输出模式*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出模式6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX例如:/* 根据GPIO_InitStructure中指定的参数初始化外设GPIOC */ GPIO_Init(GPIOC, &GPIO_InitStructure);7.其他应用例:将端口GPIOA的第10、15脚置1(高电平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);例:将端口GPIOA的第10、15脚置0(低电平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);GPIO寄存器:寄存器描述CRL 端口配置低寄存器CRH 端口配置高寄存器IDR 端口输入数据寄存器ODR 端口输出数据寄存器BSRR 端口位设置/复位寄存器BRR 端口位复位寄存器LCKR 端口配置锁定寄存器EVCR 事件控制寄存器MAPR 复用重映射和调试I/O 配置寄存器EXTICR 外部中断线路0-15配置寄存器GPIO库函数:函数名描述GPIO_DeInit 将外设GPIOx寄存器重设为缺省值GPIO_AFIODeInit 将复用功能(重映射事件控制和EXTI设置)重设为缺省值GPIO_Init 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器GPIO_StructInit 把GPIO_InitStruct中的每一个参数按缺省值填入GPIO_ReadInputDataBit 读取指定端口管脚的输入GPIO_ReadInputData 读取指定的GPIO端口输入GPIO_ReadOutputDataBit 读取指定端口管脚的输出GPIO_ReadOutputData 读取指定的GPIO端口输出GPIO_SetBits 设置指定的数据端口位GPIO_ResetBits 清除指定的数据端口位GPIO_WriteBit 设置或者清除指定的数据端口位GPIO_Write 向指定GPIO数据端口写入数据GPIO_PinLockConfig 锁定GPIO管脚设置寄存器GPIO_EventOutputConfig 选择GPIO管脚用作事件输出GPIO_EventOutputCmd 使能或者失能事件输出GPIO_PinRemapConfig 改变指定管脚的映射GPIO_EXTILineConfig 选择GPIO管脚用作外部中断线路库函数:函数GPIO_DeInit功能描述:将外设GPIOx寄存器重设为缺省值例:GPIO_DeInit(GPIOA);函数GPIO_AFIODeInit功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值例:GPIO_AFIODeInit();函数GPIO_Init功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器例:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitTypeDef structureGPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”:typedef struct{u16 GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;}GPIO_InitTypeDef;GPIO_Pin该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。

最全的STM32八种IO口模式讲解

最全的STM32八种IO口模式讲解

最全的STM32八种IO口模式讲解STM32是一种基于ARM Cortex-M处理器的微控制器系列,具有强大的性能和广泛的应用领域。

而IO口是STM32微控制器中常见的功能之一,它允许我们与外部设备进行通信和数据交换。

在STM32中,IO口有八种不同的模式,本文将逐一进行讲解。

1. 输入浮空模式(Floating Input)输入浮空模式是IO口的默认模式。

在这种模式下,IO口既不输出也不输入电平信号,它的电平状态由外部电路决定。

这种模式非常适用于连接外部传感器或其他输入设备。

2. 模拟输入模式(Analog Input)模拟输入模式是用于连接模拟传感器的模式。

在这种模式下,IO口被配置为模拟输入引脚,可以读取来自传感器的模拟电压值。

3. 输出推挽模式(Push-pull Output)输出推挽模式是最常用的IO口模式之一、在这种模式下,IO口既能输出高电平,也能输出低电平。

它能够驱动较大负载,并且在输出状态下具有较低的电平谐波失真。

推挽输出模式常用于控制LED灯、继电器和其他外部设备。

4. 输出开漏模式(Open-drain Output)输出开漏模式也被称为开漏输出模式。

在这种模式下,IO口只能输出低电平,而不能输出高电平。

当IO口输出低电平时,它会与外部上拉电阻连接,使得整个电路可以实现低电平输出。

开漏输出模式常用于I2C总线和其他需要共享信号线的应用。

5. 复用推挽模式(Push-pull Alternate Function)复用推挽模式是IO口的特殊模式之一、在这种模式下,IO口既可以用于通用IO功能,也可以用作一些外设的引脚。

复用推挽模式常用于USART、SPI和I2C等串行通信接口。

6. 复用开漏模式(Open-drain Alternate Function)复用开漏模式也是IO口的特殊模式之一、在这种模式下,IO口可以用作一些外设的引脚,并且只能输出低电平。

复用开漏模式常用于I2C总线和其他需要共享信号线的应用。

STM32JTAG端口作为GPIO口使用的方法

STM32JTAG端口作为GPIO口使用的方法

STM32JTAG端口作为GPIO口使用的方法在STM32微控制器中,JTAG端口通常用作调试和编程接口。

然而,有时候我们可能需要将JTAG端口中的一些引脚用作GPIO口,以便扩展输入/输出功能。

这在特定的应用场景中非常有用。

要将JTAG端口中的引脚用作GPIO口,需要进行以下步骤:1.禁用JTAG功能:默认情况下,JTAG功能是启用的。

需要通过设置相应的寄存器来禁用JTAG功能,以使JTAG引脚变为可用的GPIO引脚。

在STM32上,相关的寄存器是AFIO_MAPR寄存器。

AFIO_MAPR寄存器是用于映射复用器的控制寄存器,通过设置它的特定位,可以将JTAG引脚与GPIO引脚进行映射。

2.设置引脚模式:将JTAG引脚转换为GPIO引脚后,需要在引脚模式寄存器中设置相应的模式。

这可以通过设置GPIOx_CRL和GPIOx_CRH寄存器来实现,其中x表示GPIO端口的编号。

引脚模式寄存器包含16位,每4位用于控制一个引脚的模式和配置。

通过设置适当的位组合,可以控制引脚的输入/输出模式、速度和推挽模式等。

3.配置引脚:在设置好引脚模式后,需要进一步配置引脚的输入/输出特性。

可以通过设置GPIOx_ODR、GPIOx_IDR和GPIOx_BRR等寄存器来实现。

-GPIOx_ODR寄存器用于设置GPIO引脚的输出值。

-GPIOx_IDR寄存器用于读取GPIO引脚的输入值。

-GPIOx_BRR寄存器用于设置GPIO引脚为低电平。

4.示例代码:-禁用JTAG功能:```c//设置AFIO_MAPR寄存器的特定位AFIO->MAPR,=AFIO_MAPR_SWJ_CFG_JTAGDISABLE;```-设置引脚模式:```c//设置GPIO引脚的模式和配置GPIOx->CRL = (GPIOx->CRL & ~(GPIO_CRL_MODEx ,GPIO_CRL_CNFx)) , (GPIO_Mode_Out_PP , GPIO_Speed_2MHz);```-配置引脚:```c//设置GPIO引脚的输出值GPIOx->ODR ,= GPIO_Pin_x;//读取GPIO引脚的输入值input_value = GPIOx->IDR & GPIO_Pin_x;//设置GPIO引脚为低电平GPIOx->BRR = GPIO_Pin_x;```以上就是将STM32的JTAG端口引脚用作GPIO口的方法。

STM32IO口函数GPIO使用说明

STM32IO口函数GPIO使用说明

6.GPIO 锁定机制:当在一个端口位上执行了所定(LOCK)程序,在下一 次复位之前,将不能再更改端口位的配置。
GPIO 基本设置
GPIOMode_TypeDef GPIO mode 定义及偏移地址 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 //推挽复用 GPIO 输入输出速度选择: typedef enum { GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz } GPIOSpeed_TypeDef; #define IS_GPIO_SPEED(SPEED) ((SPEED == GPIO_Speed_10MHz) ||
1 STM32 的输入输出管脚有下面 8 种可能的配置:(4 输入+2 输出+2 复用输出)
① 浮空输入_IN_FLOATING
② 带上拉输入_IPU
③ 带下拉输入__OD
⑥ 推挽输出_OUT_PP
⑦ 复用功能的推挽输出_AF_PP
⑧ 复用功能的开漏输出_AF_OD
3.3 GPIO 初始化完成
==================================================== =================== 最近刚开始学习 STM32,所以从最基本的 GPIO 开始学起;首先看看 STM32 的 datasheet 上对 GPIO 口的简单介绍:每个 GPI/O 端口有两 个 32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个 32 位数据寄 存器(GPIOx_IDR,GPIOx_ODR),一个 32 位置位/复位寄存器 (GPIOx_BSRR),一个 16 位复位寄存器(GPIOx_BRR)和一个 32 位 锁定寄存器(GPIOx_LCKR)。

STM32-USART1学习笔记

STM32-USART1学习笔记
2、USART1与PC串口通信(STM32串口接收,使用中断实现)
USART具有10个中断源,只有一个接口连接到中断控制器(USART的各种中断事件被连接到同一个中断向量),因此在进入中断时需要软件判断发生的是哪个中断。
USART1串口配置前三步如上节所述①②③,接下来配置串口使能中断
④USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收数据寄存器不为空产生中断
}GPIO_InitTypeDef;
************************************/
配置USART1的RX(PA10)引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
使能相应串口中断(如果需要中断)
开启相应串口,至此,串口配置完成
static void Task3Usart1(void *pdata)
{
CPU_INT08U TxCounter = 0;
pdata = pdata;
while(1)
{
while(TxCounter < strlen(TxBuffer))
{
USART_SendData(USART1, TxBuffer[TxCounter++]);//串口发送函数
{
USART_ClearITPendingBit(USART1, USART_FLAG_RXNE);//产生中断,清除中断标志
USART1RXData = USART_ReceiveData(USART1); //接收串口数据
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

固件库中与GPIO有关的函数主要有:
1.1函数GPIO_Init
1.1.1:GPIO_TypeDef为一结构体:
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;
GPIOx为一宏定义:
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
其中GPIOA_BASE=0x40010800,即PA口的起始地址,#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)这句语句的作用就是将GPIOA指定到PA口的入口地址中,也就是说将PA口的寄存器组取名为GPIOA。

1.1.2:GPIO_InitTypeDef为结构体:
typedef struct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
其中GPIO_Pin可取的值:
表面看来函数GPIO_Init只有两个输入参数,实则4个输入参数。

第二个结构体中包括了三个参数,这三个参数分别是对管脚的端口,速度,和模式进行配置。

这三个参数的值其实就是一些宏定义的数值。

对这三个参数的选择就相当于对对应的寄存器进行配置。

第一个结构体是寄存器映射,它定义在文件“stm32f10x.h”中,他的作用就是将与管脚有关的寄存器名字与硬件地址对应起来,例如寄存器CRL就相当于地址:0x40010800.第一与第二个结构体相结合并可以对某端口进行初始化了。

1.1.3:例:配置PA口为浮空输入
//定义一个名为GPIO_InitStructure的GPIO_InitTypeDef型结构体GPIO_InitTypeDef GPIO_InitStructure;
//选中所有的端口
GPIO_InitStructure. Gpio_Pin = GPIO_Pin_All;
//选择端口的速度为10M
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
//选择模式为浮空输入
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; //完成初始化
GPIO_Init(GPIOA, &GPIO_InitStructure);
函数GPIO_ReadInputDataBit
1.2.1:例:读取PB.7口的输入值
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
函数GPIO_ReadInputData
1.3.1:例:读取PC口的输入值
U16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
1.4函数GPIO_SetBits
1.4.1:例:设置PA.1和PA.2口为高电平GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
1.5函数GPIO_RsetBits
1.5.1:例:设置PA.1和PA.2口为低电平
GPIO_RsetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
1.6函数GPIO_WriteBit
1.6.1:例:设置PA.1,PA.2口为低电平
GPIO_WriteBit(GPIOA,GPIO_Pin_1 | GPIO_Pin_2,Bit_RESET);
1.7函数GPIO_Write
1.6.1:例:向PA口写入一数据
GPIO_Write(GPIOA,0X0101);
1.8:要初始化某端口时还需打开该端口的时钟及配置系统的时钟源,与之相关的两个函数为RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE)和SystemInit();
2:将GOIO口配置成外部中断的输入口
2.1与NVIC相关的函数
NVIC_InitTypeDef structure
NVIC_InitTypeDef定义于文件“stm32f10x_nvic.h”:
typedef struct
{
u8 NVIC_IRQChannel;
u8 NVIC_IRQChannelPreemptionPriority;
u8 NVIC_IRQChannelSubPriority;
FunctionalState NVIC_IRQChannelCmd;
} NVIC_InitTypeDef;
NVIC_IRQChannel
该参数用以指定IRQ通道。

Table 272. 给出了该参数可取的值
NVIC_IRQChannelPreemptionPriority
该参数设置了成员NVIC_IRQChannel中的先占优先级,Table. 273 列举了该参数的取值。

NVIC_IRQChannelSubPriority
该参数设置了成员NVIC_IRQChannel中的从优先级,Table. 273 列举了该参数的取值。

Table. 273 给出了由函数NVIC_PriorityGroupConfig设置的先占优先级和从优先级可取的值
()()
NVIC_IRQChannelCmd
该参数指定了在成员NVIC_IRQChannel中定义的IRQ通道被使能还是失能。

这个参数取值为ENABLE或者DISABLE。

例:
NVIC_InitTypeDef NVIC_InitStructure;
/*设置优先级分组*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* 选择外部中断线15-10中断*/
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
/*使能该通道*/
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure(&NVIC_InitStructure);
2.2与EXTI相关的函数
例:选择PA13为中断的输入口
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource13);
EXTI_InitTypeDef structure
EXTI_InitTypeDef定义于文件“stm32f10x_exti.h”:
typedef struct
{ u32 EXTI_Line;
EXTIMode_TypeDef EXTI_Mode;
EXTIrigger_TypeDef EXTI_Trigger;
FunctionalState EXTI_LineCmd; } EXTI_InitTypeDef;
EXTI_Line
EXTI_LineCmd用来定义选中线路的新状态。

它可以被设为ENABLE或者DISABLE。

例:使能PA13为中断的输入通道,且下降沿触发
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
/*使能中断*/
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);。

相关文档
最新文档