Bootstrap

STM32F103C8T6寄存器组GPIOA、GPIOB、GPIOC详解

1  示例:通过一个按钮控制LED灯亮灭,了解gpio外设寄存器组。

#include "stm32f10x.h"
#include "stm32f10x_pal.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

int main(void)
{
	GPIO_InitTypeDef GPIOInitStruct;
	uint8_t current = Bit_SET;
	uint8_t previous = Bit_SET;
	PAL_Init();
	
	// PC13 Out_OD
	// GPIOC
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // GPIOC的时钟
	
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIOInitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOC, &GPIOInitStruct);
//	GPIO_Write(GPIOC,0);
	// PA0  IPU
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOA的时钟
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIOA, &GPIOInitStruct);
	
	while(1)
	{
		previous = current; 
		
		current = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
		
		if(current != previous)
		{
//			PAL_Delay(10);
			
			current = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
			
			if(current != previous)
			{
				if(current == Bit_RESET) // 按钮按下
				{
					
				}
				else // 按钮松开
				{
					// ODR
					if(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13) == Bit_RESET)
					{
						
						PAL_Delay(50);
						
						GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
						PAL_Delay(50);
						GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
					}
					else
					{
						GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
					}
				}
			}
		}
	}
}

2 未按下复位 

1 GPIOA寄存器组

PA14 引脚默认具有特殊功能,被用作 JTAG 调试接口的一部分。当你将其配置为下拉输入模式但仍然测量到高电平时,可能是因为没有正确禁用 JTAG 功能并将该引脚重映射为普通 I/O 口。
 
要解决这个问题,可以按照以下步骤进行操作:
 
1. 在时钟配置部分,开启 AFIO 复用时钟。例如:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
 
2. 进行重映射配置,以禁用 JTAG 功能并将 PA13、PA14、PA15、PB3、PB4 引脚设置为普通 I/O 口。使用以下代码:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); 
 
完成上述步骤后,PA14 引脚就可以作为普通的下拉输入引脚使用了,在没有外部输入信号时,它应该呈现低电平。如果仍然存在问题,请检查硬件电路连接是否正确。 

2 GPIOB寄存器组 

 

PB4 引脚具有多种功能,默认情况下,它被用作 JTAG 的调试端口之一。
 
如果要将 PB4 用作普通 GPIO(通用输入输出)引脚,需要进行一些配置。具体来说,需要关闭 PB4 引脚的 JTAG 功能,使其可以充当普通 GPIO 来进行使用,配置方式如下:
 
首先开启 AFIO(复用功能 I/O)复用时钟: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
 
然后进行引脚重映射: GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 
 
经过上述配置后,PB4 就可以作为普通 GPIO 使用了。
 
PB4 还可以通过复用功能重映射,用于其他外设功能,例如 TIM3 的通道 1(CH1)。在这种情况下,需要进行相应的外设配置,例如配置定时器等。

3 GPIOC寄存器组 

C端口都是浮空输入


 

3 按下复位,打开时钟,初始化GPIOA、GPIOC

PA0     上拉输入

PC13   开漏输出    2Mhz

初始化完成 

 

 

;