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. 创建工程文件
-
复制工程建立 - LI,Yi-han - 博客园一篇中创建的
2-3 STM32工程模板(标准开发)文件,粘贴副本,重命名为2-4 点灯例程(标准库开发)文件 -
打开工程文件
-
最小系统板接上下载器,下载器通过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口测试灯上电后长亮
本文来自博客园,作者:LI,Yi-han,转载请注明原文链接:https://www.cnblogs.com/LiYi-han/p/19018732

浙公网安备 33010602011771号