STM32学习记录——使用固件库操作GPIO输出

本文详细记录了使用STM32F103RCT6芯片通过GPIO控制LED灯的过程,包括硬件连接分析和软件配置步骤。硬件上,LED灯一端连接3.3V电源,另一端连接STM32的GPIOB0。在软件部分,介绍了开启GPIOB端口时钟、初始化GPIOB0为低电平输出以点亮小灯的代码实现。

使用GPIO输出控制LED灯实验

本系列博客主要记录制作智能小车的过程。小车的电机控制板芯片为STM32F103RCT6,所以这一系列文章都是围绕这块控制版介绍。今天主要学习如何使用STM32芯片的GPIO口进行输出。

硬件相关

在控制版上搭载一颗LED小灯,与LED灯相关的电路图如下:
LED灯电路原理图
分析可知LED灯一端接3.3V电源,另外一端接STM32芯片GPIOB0号针脚,所以只要PB0输出高电平,LED灯熄灭;PB0输出低电平,LED灯点亮。

软件相关

控制GPIO输出流程

  • 开启GPIOB端口的时钟

  • 初始化GPIOB相关配置

  • GPIOB端口的0号针脚设置低电平,点亮LED小灯

开启GPIO端口时钟

在这里插入图片描述
分析STM32的系统结构图,我们发现GPIOB在总线APB2上。根据STM32固件库文件介绍中可以知道其在stm32f10x_rcc.h这个头文件找到相关的函数。

/**
  * @brief  启用或禁用高速APB(APB2)外设时钟。
  * @param  RCC_APB2Periph: 指定APB2外设用以控制其时钟.
  *     此参数可以是以下值的任意组合:
  *     @arg RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
  *          RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
  *          RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
  *          RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
  *          RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
  *          RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,
  *          RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11     
  * @param  NewState: 指定外设时钟的状态.
  *     此参数可以
STM32使用C语言通过固件库实现GPIO输出点亮LED灯,可按以下步骤操作: ### 1. 开启GPIO时钟 使用`RCC_AHB1PeriphClockCmd`函数开启对应GPIO端口的时钟。例如,若使用GPIOF端口,代码如下: ```c RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); ``` ### 2. 定义GPIO初始化结构体 定义一个`GPIO_InitTypeDef`类型的结构体变量,用于配置GPIO的各项参数。 ```c GPIO_InitTypeDef GPIO_InitStruct; ``` ### 3. 配置GPIO初始化结构体的成员 设置结构体的各个成员,包括引脚、模式、速度和上拉/下拉等。例如,要配置GPIOF的6、7、8引脚为输出模式: ```c GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Speed = GPIO_Low_Speed; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; ``` ### 4. 调用初始化函数 使用`GPIO_Init`函数将配置好的结构体参数写入到CRL寄存器。 ```c GPIO_Init(GPIOF, &GPIO_InitStruct); ``` ### 5. 控制LED亮灭 通过`GPIO_SetBits`和`GPIO_ResetBits`函数控制GPIO引脚输出高电平或低电平,从而控制LED的亮灭。 ```c // 灯灭 GPIO_SetBits(GPIOF, GPIO_Pin_6); // 灯亮 GPIO_ResetBits(GPIOF, GPIO_Pin_6); ``` 以下是一个完整的示例代码: ```c #include "stm32fxxx.h" // 根据实际芯片型号选择合适的头文件 void LED_GPIO_Config(void) { /* 第一步:开GPIO的时钟 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); /* 第二步:定义GPIO初始化的结构体 */ GPIO_InitTypeDef GPIO_InitStruct; /* 第三步:配置GPIO初始化结构体的成员 */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Speed = GPIO_Low_Speed; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; /* 第四步:调用初始化函数 */ GPIO_Init(GPIOF, &GPIO_InitStruct); } void Delay(uint32_t count ) { for( ;count!=0;count--); } int main(void) { // 来到这里的时候,系统的时钟已经被配置成72M LED_GPIO_Config(); while(1) { // 灯灭 GPIO_SetBits(GPIOF, GPIO_Pin_6); Delay(0xFFFFF); // 灯亮 GPIO_ResetBits(GPIOF, GPIO_Pin_6); Delay(0xFFFFF); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值