2-3 点灯例程(库函数开发)

视频选集(4/50)[2-2] 新建工程

注.使用库函数本质上是间接地配置寄存器

0. GPIO初始化-库函数

3.1 时钟使能

/**
  * @brief  使能或失能APB2的外设时钟
  * @param  RCC_APB2Periph: 选择外设。这个参数可以是以下这些值
  *     @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: 选择新的状态
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

3.2 端口配置

/**
  * @brief  Initializes the GPIOx peripheral according to the specified
  *         parameters in the GPIO_InitStruct.
  * @param  GPIOx: 选择GPIO
  * @param  GPIO_InitStruct: 指向包含设置参数的结构体变量的指针
  * @retval None
  */
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)  

创建GPIO_InitTypeDef类型的结构体变量GPIO_InitStruct,用点号引出它的所有配置参数

typedef struct
{
  uint16_t GPIO_Pin;
  GPIOSpeed_TypeDef GPIO_Speed;
  GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
typedef enum
{ GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48, // 上拉输入
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10, // 通用推挽输出
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

typedef enum
{ 
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

/** @defgroup GPIO_pins_define 
  * @{
  */

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */

1. 器件

  • STM32最小系统板
  • 杜邦线(母对母)*4
  • ST-LINK V2下载器

2. 实现目标

点亮开发板上的IO口测试灯

2. 创建工程文件

  1. 复制工程建立 - LI,Yi-han - 博客园一篇中创建的2-3 STM32工程模板(标准开发)文件,粘贴副本,重命名为2-4 点灯例程(标准库开发)文件

  2. 打开工程文件

  3. 最小系统板接上下载器,下载器通过USB口与PC主机连接

4. 程序

main.c文件如下:

#include "stm32f10x.h"                  // Device header

/*------------------------------主函数------------------------------*/
int main(void)
{
	/*-----变量声明-----*/
	GPIO_InitTypeDef GPIO_InitStruct; // 定义包含配置参数的结构体变量
	
	/*-----时钟使能-----*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 开启GPIOC的时钟
	
	/*-----端口配置-----*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; // PC13引脚
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	/*-----输出设置-----*/
	//GPIO_SetBits(GPIOC, GPIO_Pin_13); // 【关灯】将PC13引脚设为高电平
	GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 【点灯】将PC13引脚设为低电平
}

编译,下载

现象:IO口测试灯上电后长亮

posted @ 2025-08-02 13:40  LI,Yi-han  阅读(14)  评论(0)    收藏  举报