转自:http://www.51hei.com/bbs/dpj-128101-1.html
#include "stm32f10x.h" #include "gpio.h" //对于STM32 GPIO一般用法配置(这里不包括复用功能),以下的说明可以应用点亮灯多种方式 void GPIO_Configure_GPIOA(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//设置时钟,针对GPIOA时钟使能 /* 为什么要设置时钟呢??? 任何外设都需要时钟,51单片机,stm32,430等等, 因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入。 stm32之所以是低功耗,他将所有的门都默认设置为disable,在你需要用哪个门的时候, 开哪个门就可以,也就是说用到什么外设,只要打开对应外设的时钟就可以, 其他的没用到的可以还是disable,这样耗能就会减少。 stm32的时钟是有分工的,并且每类时钟的频率不一样,因为没必要所有的时钟都是最高频率,只要够用就行, 好比一个门出来水流大小,我只要洗脸,但是出来的是和洪水一样涌出来的水,那就gg了,消耗能源也多, 所以不同的时钟也会有频率差别,或者在配置的时候可以配置时钟分频。 */ GPIO_InitTypeDef GPIO_InitStructure;//GPIO设备的初始化函数 //GPIO_InitTypeDef是一个结构体类型同义字,其功能是定义一个结构体, //该结构体有三个成员分别是 u16类型的GPIO_Pin、 // GPIOSpeed_TypeDef 类型的GPIO_Speed 和GPIOMode_TypeDef 类型的GPIO_Mode。即以下三种: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//普通推挽输出 //GPIO有8种工作模式(4种输入模式和4种输出模式): /* 4种输入模式: 上拉输入模式(GPIO_Mode_IPU)-->在默认状态下(GPIO引脚无输入),读取得的GPIO引脚 数据为1,高电平。 而下拉输入模式(GPIO_Mode_IPD)则相反。在默认状态下(GPIO引脚无输入),读取得的GPIO引脚 数据为0,低电平。 浮空输入模式(GPIO_Mode_IN_FLOATING)在芯片内部既没有接上拉,也没有接下拉电阻, 经由触发器输入。这种模式用于标准的通信协议如I2C、USART的接收端 模拟输入模式(GPIO_Mode_AIN)则关闭了施密特触发器,不接上、下拉电阻,经由另一线路 把电压信号传送到片上外设模块。如传送至ADC模块,由ADC采集电压信号。所以使用ADC外设时,必须设置为模拟输入模式 4种输出模式: 普通推挽输出(GPIO_Mode_Out_PP)一般应用在输出电平为0和3.3伏的场合 普通开漏输出(GPIO_Mode_Out_OD)一般在电平不匹配的场合,如需要输出5伏的高电平,就需要在外部接一个 上拉电阻,电源为5伏,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5伏的电平 复用推挽输出(GPIO_Mode_AF_PP),是根据GPIO的复用功能来选择的,如GPIO的引脚用作串口的输出, 则使用复用推挽输出模式。 复用开漏输出(GPIO_Mode_AF_OD),同理,其用在IC、SMBUS这些需要线与功能的复用场合 在使用任何一种开漏模式时,都需要接上拉电阻。 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//针对某组的一个引脚进行初始化 //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;//针对某组的两个引脚进行初始化 //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//针对某组的16个引脚进行初始化 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* 又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路, 用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块, 达到最佳的噪声控制和降低功耗的目的。) 可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。 (如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。失真因素?) 如果信号频率为10MHz,而你配置了2MHz的带宽,则10MHz的方波很可能就变成了正弦波。 就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行, 如果超过设计时速就会颠簸,甚至翻车。 关键是: GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。 带宽速度高的驱动器耗电大、噪声也大,带宽低的驱动器耗电小、噪声也小。 使用合适的驱动器可以降低功耗和噪声 比如:高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路, 这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号, 但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。 关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。 */ GPIO_Init(GPIOA,&GPIO_InitStructure);//进行GPIOA初始化 } void Delay_ms(u16 ms) { int i; while(ms--) { i = 12000; while(i--); } } void GPIO_Achieve(u8 n,u16 ms) { // u8 Readoutbit; // u16 Readoutdate; if(n == 0) { GPIO_ResetBits(GPIOA,GPIO_Pin_1);//设置PA0引脚为低电平,清除引脚位 Delay_ms(ms);//不精准的延时函数,毫秒单位 /*这是GPIO_ResetBits(GPIOx,GPIO_Pin)代码 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { //Check the parameters assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_PIN(GPIO_Pin)); GPIOx->BRR = GPIO_Pin;//位复位寄存器赋值(将某个引脚变为低电平) } */ //Readoutbit = GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0);//将PA0引脚输出的值赋给Readoutbit //Readoutdate = GPIO_ReadOutputData(GPIOA);//将PA所有引脚输出的值赋给Readoutdate //GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);//获取PA0引脚的值 //GPIO_ReadInputData(GPIOA);//获取PA所有引脚的值 //GPIO_WriteBit(GPIOA,GPIO_Pin_0,RESET);//将RESET值写入给PA0引脚(其实就是将PA0引脚置0) //GPIO_Write(GPIOA,0xffff);//将0xffff值写入PA端口(其实就是将PA所有引脚置1) } else { GPIO_SetBits(GPIOA,GPIO_Pin_1);//设置PA0引脚为高电平,置位引脚 Delay_ms(ms); /* void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { //Check the parameters assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_PIN(GPIO_Pin)); GPIOx->BSRR = GPIO_Pin;//位置位寄存器赋值(将某个引脚变为高电平) } */ //Readoutbit = GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0); //Readoutdate = GPIO_ReadOutputData(GPIOA,GPIO_Pin_0); } } /* 注释: GPIOx->BSRR= GPIO_Pin;-----------位置位寄存器---这是单个引脚的 GPIOx->BRR= GPIO_Pin;------------位复位寄存器---这是单个引脚的 GPIOx-ODR= PortVal;--------------端口输出寄存器---这是16个引脚的 GPIOx-IDR= PortVal;--------------端口输入寄存器---这是16个引脚的 对于GPIO来说,还有其他函数 以上,是我对GPIO的部分理解,有些可能理解不到位,请谅解(有些是从网上查找的) */
相关推荐
在提供的"实验6-像51单片机一样操作STM32的GPIO"文件中,你应该能找到详细的代码示例和注释,这对于初学者理解STM32的GPIO操作非常有帮助。通过实践和学习,你可以逐步掌握STM32的GPIO编程技巧,为后续的项目开发...
这些示例代码可以帮助理解STM32 GPIO的基本操作,对于理解和使用STM32进行嵌入式开发非常有帮助。 学习STM32 GPIO的例子,你将接触到的关键步骤包括: - 初始化GPIO端口:设置端口的工作模式、速度、输出类型等。 -...
STM32 GPIO(通用输入/输出)是STM32微控制器系列中的一个重要组成部分,它提供了对外部设备的接口,使得MCU能够与开关、LED、传感器等硬件进行通信。在这个基础例程中,我们将深入探讨STM32 GPIO的配置、读写以及...
从提供的文件内容中,我们可以提炼出以下关于STM32 GPIO编程的知识点: 1. STM32概述:STM32系列微控制...对于初学者来说,理解这些要点能够有助于他们快速上手STM32微控制器的GPIO编程,并有效地将理论应用到实践中。
提供的压缩包"STM32_GPIO.rar"内含现成的工程代码,可以帮助开发者快速理解和应用STM32的GPIO功能。这个工程可能包含了初始化配置、中断处理函数、读写GPIO的示例代码,以及必要的头文件和链接库。对于初学者来说,...
9. **文档理解**:提供的详细讲解文档对于初学者来说是宝贵的资源,可以帮助理解STM32 GPIO的工作原理,掌握配置和编程方法。 10. **实践应用**:通过实际项目练习,如点亮LED灯、控制继电器、读取传感器数据等,能...
对于初学者,理解STM32 GPIO的基本原理和配置方法至关重要,因为它是实现与外部设备交互的基础。同时,配合作者的博文,可以更深入地学习STM32 GPIO的实际应用和调试技巧,这对于嵌入式开发人员来说是非常宝贵的资源...
### STM32 GPIO 实例教程解析 #### 一、STM32 GPIO 输入输出管脚配置 ...以上内容涵盖了STM32 GPIO配置的基础知识以及一些具体的配置示例,希望能帮助初学者更好地理解和掌握STM32 GPIO的相关概念和技术细节。
STM32的开发过程中,经常需要参考官方的参考手册,这本手册详细列出了所有寄存器的配置方法和功能说明。对于初学者而言,可能难以直接从手册中快速找到需要的配置方法,因此整理一份资料以便快速查阅和理解这些配置...
对于初学者来说,这是一份宝贵的资料,可以帮助他们深入理解STM32 GPIO的工作原理和实际应用。通过学习和实践这个教程,开发者能够更好地掌握STM32的GPIO控制,为进一步的嵌入式系统开发打下坚实基础。
STM32是一款基于ARM Cortex-M内核的微控制器系列,由意法半导体(STMicroelectronics)生产。在STM32的众多功能中,GPIO(General Purpose...这份PDF文档应该会详细解释这些内容,帮助初学者快速掌握STM32 GPIO的使用。
这个简单的示例程序可以帮助初学者快速理解STM32 GPIO的基本用法,进一步学习时可以尝试更复杂的GPIO应用,如GPIO扩展、中断处理、外部中断等。通过实践,开发者能够熟练掌握STM32 GPIO的使用,为后续的项目开发打下...
在本项目中,"gpio.zip_stm32f103 gpio_stm32f103 keil" 提供了基于STM32F103的GPIO编程实例,采用Keil uVision 3作为开发环境,非常适合初学者学习STM32的基础操作。 Keil uVision是一款强大的嵌入式开发工具,...
这份"STM32的GPIO输入-(软件延时方式)(库函数)"的学习资料应该包含了详细的代码注释和说明,帮助初学者理解如何使用STM32的库函数实现GPIO输入,并通过软件延时保证信号的稳定读取。通过实践这个实验,你可以深入...
6. **示例代码**:压缩包中的CEPARK IAR_Stm32Gpio文件可能包含了示例代码,演示了如何初始化GPIO、设置工作模式、读写GPIO值以及配置中断等基本操作,这对于初学者理解STM32 GPIO的使用非常有帮助。 7. **应用实例...
STM32 GPIO(通用输入/输出)是STM32微控制器系列中不可或缺的一部分,它允许开发者通过编程方式控制芯片上的引脚,实现对外部设备的开关、读取信号等多种功能。在嵌入式系统设计中,GPIO控制是基础且至关重要的,...
这些代码对于初学者来说是宝贵的资源,通过阅读和实践,可以更好地理解和掌握STM32 GPIO的使用。在实际项目中,GPIO不仅用于点亮LED,还可以控制各种外围设备,如传感器、电机、通信接口等,是STM32开发的基础。
1. **STM32 GPIO结构**:理解STM32F401VE的GPIO结构,包括GPIO端口(如GPIOA、GPIOB等)、引脚(如PA0、PB7等)以及相关的寄存器配置,如MODER、OTYPER、OSPEEDR、PUPDR等,这些寄存器控制GPIO的行为。 2. **GPIO...
根据提供的标题“stm32 GPIO”以及描述“快速入门stm32”,...掌握STM32 GPIO的基本配置方法和常见应用场景对于初学者来说是非常重要的。通过不断实践和探索,可以更好地利用STM32 GPIO解决实际问题,提高开发效率。