当前位置: 首页> 科技> 互联网 > 企业管理小程序_如何建立网站快捷方式到桌面_网站上做推广_培训中心

企业管理小程序_如何建立网站快捷方式到桌面_网站上做推广_培训中心

时间:2025/7/11 8:23:42来源:https://blog.csdn.net/ElePower9527/article/details/145086628 浏览次数:0次
企业管理小程序_如何建立网站快捷方式到桌面_网站上做推广_培训中心

GPIO相关函数

STM32的时钟函数

RCC_APB1ReriphClockCmd

RCC_APB1PeriphClockCmd 函数是用于控制STM32微控制器中APB1(Advanced Peripheral Bus 1)总线上外设时钟的开启或关闭的。这个函数是STM32标准外设库(Standard Peripheral Library)或者HAL库(Hardware Abstraction Layer)中的一个函数,用于配置和管理微控制器的硬件资源。

在STM32微控制器中,时钟系统是非常关键的,它负责为微控制器的CPU核心、外设等提供工作时钟。APB1和APB2是两条外设总线,它们连接着微控制器的各种外设,如定时器、串口、SPI等。APB1和APB2的总线速度不同,APB1的速度较低,APB2的速度较高。

RCC_APB1PeriphClockCmd 函数的主要作用是控制连接到APB1总线上的外设的时钟。通过这个函数,用户可以开启或关闭特定外设的时钟,以达到节能或者根据应用需求动态管理硬件资源的目的。

void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
  • RCC_APB1Periph:这是一个或多个APB1总线上的外设的标识符,通过宏定义指定,表示要控制时钟的外设。APB1 上面连接的是低速外设,包括电源接口、 备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等

  • NewState:这是一个枚举值,表示要执行的操作,ENABLE表示开启时钟,DISABLE表示关闭时钟。

RCC_APB2ReriphClockCmd

RCC_APB2PeriphClockCmd函数是STM32微控制器固件库中的一个函数,用于启用或禁用高速APB2(APB2总线)上的外设时钟。这个函数对于管理STM32微控制器上的外设时钟非常重要,因为只有在相应的时钟被启用后,外设才能正常工作。

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
  • uint32_t RCC_APB2Periph:这是一个32位的无符号整数,用于指定要启用或禁用的APB2总线上的外设。STM32的固件库定义了一系列的宏来表示不同的外设,例如RCC_APB2Periph_GPIOA表示GPIOA端口的时钟,RCC_APB2Periph_SPI1表示SPI1接口的时钟等。可以通过逻辑或操作符|组合多个外设来同时启用或禁用它们的时钟。APB2 上面连接的是高速外设包 括 UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。对应外设的选择可以参考下图。

  • FunctionalState NewState:这是一个枚举类型的参数,用于指定是要启用(ENABLE)还是禁用(DISABLE)指定的外设时钟。ENABLEDISABLE通常在STM32的固件库中被定义为10


GPIO引脚操作函数

GPIO_DeInit

GPIO_DeInit 函数是用于将指定 GPIO(通用输入输出)端口或引脚重置为其默认复位状态的函数。这在一些情况下非常有用,例如当你需要重新配置 GPIO 引脚或者当你不再需要某个引脚配置时,可以通过调用这个函数来清除之前的配置,恢复到初始状态。

void GPIO_DeInit(GPIO_TypeDef* GPIOx, uint32_t GPIO_Pin);
  • GPIOx:这是一个指向 GPIO 端口的指针,例如 GPIOAGPIOB 等等。STM32 微控制器通常有多个 GPIO 端口,每个端口包含一组引脚。
  • GPIO_Pin:这是指定要重置的引脚,可以使用库中定义的宏,如 GPIO_PIN_0GPIO_PIN_1GPIO_PIN_All 等,来指定单个引脚或多个引脚。

注意事项

  • 调用时机‌:确保在调用 GPIO_DeInit 之前,相关的 GPIO 时钟已经被使能。否则,重置操作可能不会生效。
  • 状态恢复‌:GPIO_DeInit 会将引脚恢复到复位状态,这通常意味着引脚被配置为浮空输入模式,并且关闭了任何与该引脚相关的外设功能(如中断、复用功能等)。
  • 多引脚操作‌:你可以通过组合多个 GPIO_PIN_x 宏(使用按位或操作符 |)来一次性重置多个引脚,例如 GPIO_PIN_0 | GPIO_PIN_1

GPIO_AFIODeInit 

GPIO_AFIODeInit 函数是一个特定于某些 STM32 微控制器系列的函数,用于重置 AFIO(Alternate Function I/O,备用功能输入输出,复用功能)相关的配置到其默认复位状态。AFIO 允许 GPIO 引脚除了基本输入/输出功能外,还可以配置为其他特殊功能,如定时器输出、串行通信接口等。如果GPIO_AFIODeInit函数在你的开发环境中是可用的,那么它通常被用来在不需要 AFIO 配置时将其恢复到默认状态,或者在重新配置 AFIO 之前清除之前的设置。

void GPIO_AFIODeInit(void);

注意事项

  • 库版本和微控制器系列‌:确认你的 STM32 微控制器系列和所使用的库版本是否支持GPIO_AFIODeInit函数。

  • 调用时机‌:通常,你会在初始化代码的早期阶段调用这个函数,以确保 AFIO 配置从一个已知状态开始。或者,在需要重新配置 AFIO 时,先调用这个函数来清除之前的配置。

  • 时钟使能‌:在调用GPIO_AFIODeInit之前,确保 AFIO 时钟(如果适用)已经被使能。在某些微控制器上,AFIO 功能可能需要单独的时钟源。

  • 中断和复用功能‌:如果 AFIO 配置了中断或复用功能,调用GPIO_AFIODeInit可能会禁用这些功能。确保在调用此函数后重新配置任何需要的功能。


GPIO_Init

GPIO_Init 函数是 STM32 HAL(硬件抽象层)库中用于初始化 GPIO(通用输入输出)端口或引脚的函数。通过这个函数,你可以配置 GPIO 引脚的多种参数,如模式(输入、输出、复用或模拟)、速度、输出类型(推挽或开漏)、上拉/下拉电阻等。

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

参数说明

  • GPIOx:这是一个指向 GPIO 端口的指针,例如 GPIOAGPIOB 等。STM32 微控制器通常有多个 GPIO 端口,每个端口包含一组引脚。
  • GPIO_InitStruct:这是一个指向 GPIO_InitTypeDef 结构体的指针,该结构体包含了要配置的 GPIO 引脚的所有参数。

GPIO_InitTypeDef 结构体通常包含以下成员

  • GPIO_Pin:指定要配置的引脚,可以使用库中定义的宏,如 GPIO_Pin_0GPIO_Pin_1GPIO_Pin_All 等,来指定单个引脚或多个引脚。在GPIO_InitStructure.GPIO_Pin引脚选择中,如果要同时控制一个GPIO外设的多个引脚,可以在GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0  |  GPIO_Pin_1  |  GPIO_Pin_2  ...,当然也可以直接用GPIO_Pin_ALL,这样就相当于选中了所有的引脚。
  • GPIO_Mode:设置引脚的模式,有如下参数
GPIO_Mode_AIN               //模拟输入
GPIO_Mode_IN_FLOATING       //浮空输入
GPIO_Mode_IPD               //下拉输入
GPIO_Mode_IPU               //上拉输入
GPIO_Mode_Out_OD            //开漏输出
GPIO_Mode_Out_PP            //推挽输出
GPIO_Mode_AF_OD             //复用开漏
GPIO_Mode_AF_PP             //复用推挽
  • GPIO_Speed:GPIO传输速度选择,有如下参数
GPIO_Speed_2MHz
GPIO_Speed_10MHz
GPIO_Speed_50MHz

GPIO_StructInit

GPIO_StructInit 函数是 STM32库中的一个辅助函数,用于将 GPIO_InitTypeDef 结构体初始化为其默认状态。这个函数通常在你想要重置或初始化一个 GPIO_InitTypeDef 结构体到已知状态时使用,以确保所有成员都被设置为合理的默认值。

void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

参数说明

  • GPIO_InitStruct:这是一个指向 GPIO_InitTypeDef 结构体的指针,该结构体将被初始化。

GPIO_ResetBits

函数是 STM32 标准外设库中用于将指定 GPIO 端口上的一个或多个引脚设置为低电平(即“复位”或“写0”)的函数。与 GPIO_SetBits 类似。

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

参数说明

  • GPIOx:这是一个指向 GPIO_TypeDef 结构体的指针,代表了要操作的 GPIO 端口(如 GPIOA、GPIOB 等)。
  • GPIO_Pin:这是一个 16 位的无符号整数,用于指定要置为低电平的引脚。可以使用库中预定义的宏(如 GPIO_PIN_0GPIO_PIN_1 等)或者通过位运算组合多个引脚(如 GPIO_PIN_0 | GPIO_PIN_1)。

GPIO_WriteBit

GPIO_WriteBit 函数,作为 STM32 标准外设库的一部分,为开发者提供了一个便捷的接口,用于控制特定 GPIO 端口上单个引脚的电平状态。通过此函数,你可以轻松地将引脚电平设置为高(Bit_SET)或低(Bit_RESET)。

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

参数解读‌:

  • GPIOx:指向 GPIO_TypeDef 结构体的指针,该结构体代表了你想要操作的 GPIO 端口,例如 GPIOA、GPIOB 等。
  • GPIO_Pin:用于指定要操作的引脚,通常通过库中定义的宏(例如 GPIO_PIN_0GPIO_PIN_1)来指定,这些宏对应着端口的各个引脚。
  • BitValBitAction 枚举类型的值,用于设定引脚的目标电平状态。它可以是 Bit_SET(代表高电平)或 Bit_RESET(代表低电平)。

GPIO_Write

函数是 STM32 标准外设库中用于一次性设置指定 GPIO 端口上所有引脚电平状态的函数。与 GPIO_WriteBit 不同,GPIO_Write 允许你同时写入一个 16 位的值到 GPIO 端口的输出数据寄存器,从而控制该端口上所有引脚的电平状态。

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

参数说明

  • GPIOx:这是一个指向 GPIO_TypeDef 结构体的指针,代表了要操作的 GPIO 端口(如 GPIOA、GPIOB 等)。
  • PortVal:这是一个 16 位的无符号整数,用于指定要写入 GPIO 端口输出数据寄存器的值。每一位对应端口上的一个引脚,其中第 0 位对应引脚 0,第 1 位对应引脚 1,依此类推。将某一位设置为 1 会将对应的引脚置为高电平,设置为 0 则会将其置为低电平。

实例

int main(void)
{// ... 系统初始化代码 ...// 使能 GPIOA 时钟(假设需要操作 GPIOA 端口)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 配置 GPIOA 的所有引脚为输出模式(这里只是一个示例,通常不会这样做)GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_PIN_ALL; // 假设有这样一个宏定义表示所有引脚GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);// 将 GPIOA 端口的所有引脚设置为特定的电平状态// 假设我们想要将引脚 0-2 设置为高电平,其余引脚设置为低电平// 那么对应的 16 位值应该是 0x00000007(二进制:0000 0000 0000 0111)GPIO_Write(GPIOA, 0x00000007);// ... 主循环及其他代码 ...
}

关键字:企业管理小程序_如何建立网站快捷方式到桌面_网站上做推广_培训中心

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: