首页 » 智能 » stm32操作GPIO的 代码及超具体注释_引脚_暗记

stm32操作GPIO的 代码及超具体注释_引脚_暗记

南宫静远 2025-01-18 17:31:33 0

扫一扫用手机浏览

文章目录 [+]

#include \"大众gpio.h\"大众

//对付STM32 GPIO一样平常用法配置(这里不包括复用功能),以下的解释可以运用点亮灯多种办法

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的部分理解,有些可能理解不到位,请包涵(有些是从网上查找的)

/

感激阅读。

感兴趣的朋友可以关注我,后续我会持续更新机器人的运动掌握、机器设计干系文章。
大家一起学习进步:)

标签:

相关文章

一种防雾霾智能口罩的设计_蓝牙_口罩

(四川大学 电子信息学院,四川 成都 610000 设计了一款防霾、环保、透风、可改换滤芯,具有听歌、接电话、发短信等智能功能的雾...

智能 2025-01-18 阅读0 评论0