void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将指定参数设置为高电平    灯灭
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将指定参数设置为低电平  灯亮
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//前两个参数指定端口  第三个根据指定端口的值来设定参数,可以设置高电平或低电平
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//第一个参数选择外设   第二个可以同时对16个端口进行写入操作

端口:

在STM32或类似微控制器中,GPIOAGPIOB 都是代表不同的 GPIO端口。这两个端口的主要区别在于它们各自的硬件映射和地址。每个GPIO端口都有一组独立的引脚,这些引脚可以配置为不同的输入或输出模式。在 STM32 或其他微控制器中,GPIOAGPIOB 代表的是不同的 GPIO端口,它们的区分通常体现在硬件层面和寄存器的配置上,而不是直接在开发环境中以不同的端口名称显示。

1. 硬件映射

  • GPIOA 和 GPIOB 是微控制器内部的两组不同GPIO端口。每个端口通常具有16个引脚(从GPIOA0到GPIOA15,和GPIOB0到GPIOB15),用于与外部设备或其他模块进行通信。
  • 每个端口都通过特定的地址映射在微控制器的内存空间中,通常通过寄存器来控制。不同的端口可能连接到不同的外设或具有不同的功能。

2. 功能差异

  • 外设连接:GPIO端口的引脚可以用作通用的输入输出,也可以连接到特定的外设。例如,某些外设(如USART、SPI、I2C等)的引脚可能会通过特定的GPIO端口映射,而每个端口的引脚用于不同的外设功能。
  • 端口差异:在某些微控制器中,GPIOA和GPIOB上的引脚可能有不同的特殊功能。例如,某些特定的时钟信号、复位信号或外部中断可能只与GPIOA或GPIOB某些引脚相关联。

3. 时钟配置

  • 每个GPIO端口的时钟通常由**时钟控制模块(RCC)**进行配置。例如,如果要使用GPIOA上的引脚进行输入输出操作,你需要确保GPIOA的时钟已经启用。同样的,GPIOB的时钟也需要启用才能使用。

4. 常见应用

  • GPIOA:通常用于普通的I/O操作或连接外设如ADC、USART等。
  • GPIOB:可能用于某些特定功能,比如其他通信接口或与某些硬件设备连接。

总结:

GPIOAGPIOB 的主要区别在于它们各自连接的硬件资源和外设功能。尽管它们在功能上非常相似,但具体使用哪个端口通常取决于设计需求和硬件配置。

 的一部分LED闪烁代码

#include "stm32f10x.h"   // Device header
#include "Delay.h"
void delay(uint32_t time)
{
    while(time--);
}
int main(void){
	//外设通常包括处理输入、输出、通信等任务
	//GPIO用于连接各种输入输出设备
	//RCC用于控制所有外设的时钟源和时钟频率,包括外设的启动关闭复位等
	//点灯步骤:1.rcc开启GPIO时钟 2.使用GPIO_Init函数初始化GPIO 3.使用输入输出函数控制GPIO口
	//AHB是指一种高性能总线,还有APB1,APB2,不同的外设使用不同的总线,在stm32f10x_rcc.c里面找
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    //推挽输出高低电平均有驱动能力,开漏输出,只有低电平有驱动能力,高电平相当于高阻态
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_ResetBits(GPIOA, GPIO_Pin_0);
	GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_RESET);
	while(1){
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);
		Delay_ms(500);
		GPIO_SetBits(GPIOA, GPIO_Pin_0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_RESET);
		//delay(1000000);
		//设置延迟
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_SET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0,(BitAction)0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0,(BitAction)1);
		Delay_ms(500);
	}
}

 

posted on 2025-07-23 20:54  fafrkvit  阅读(13)  评论(0)    收藏  举报