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或类似微控制器中,GPIOA 和 GPIOB 都是代表不同的 GPIO端口。这两个端口的主要区别在于它们各自的硬件映射和地址。每个GPIO端口都有一组独立的引脚,这些引脚可以配置为不同的输入或输出模式。在 STM32 或其他微控制器中,GPIOA 和 GPIOB 代表的是不同的 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:可能用于某些特定功能,比如其他通信接口或与某些硬件设备连接。
总结:
GPIOA 和 GPIOB 的主要区别在于它们各自连接的硬件资源和外设功能。尽管它们在功能上非常相似,但具体使用哪个端口通常取决于设计需求和硬件配置。
的一部分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);
}
}
浙公网安备 33010602011771号