STM32标准库之点亮LED灯

一、所需库函数

1.RCC_APB2PeriphClockCmd

  • 使能或者失能 APB2 外设时钟
  • 函数原形:void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph, FunctionalState NewState)
  • 参数 RCC_APB2Periph门控 APB2 外设时钟
  • 参数 NewState指定外设时钟的新状态,ENABLE 或者 DISABLE
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);

2. GPIO_Init

  • 根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器
  • 函数原型void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
  • 参数 GPIOxx 可以是 ABCD 或者 E,来选择 GPIO 外设
参数 GPIO_InitStruct :指向结构 GPIO_InitTypeDef 的指针,包含了外设 GPIO 的配置信息
结构体参数 GPIO_Pin该参数选择待设置的 GPIO 管脚,使用操作符 “|” 可以一次选中多个管脚
结构体参数 GPIO_SpeedGPIO_Speed 用以设置选中管脚的速率
结构体参数 GPIO_ModeGPIO_Mode 用以设置选中管脚的工作状态 
GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量
	
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引脚,赋值为第0号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHz
	
GPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数
														//函数内部会自动根据结构体的参数配置相应寄存器
														//实现GPIOA的初始化

3.GPIO_SetBits

  • 设置指定的数据端口位高电平
  • 函数原形:void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
  • 参数 GPIOxx 可以是 ABCD 或者 E,来选择 GPIO 外设
  • 参数 GPIO_Pin:待设置的端口位,该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

4.GPIO_ResetBits

  • 设置指定的数据端口位低电平
  • 函数原形:void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
  • 参数 GPIOx x 可以是 A B C D 或者 E ,来选择 GPIO 外设
  • 参数 GPIO_Pin:待设置的端口位,该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合
GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

5.GPIO_WriteBit

  • 设置指定的数据端口位高电平或者低电平
  • 函数原形:void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
  • 参数 GPIOxx 可以是 A B C D 或者 E ,来选择 GPIO 外设
  • 参数 GPIO_Pin:待设置的端口位,该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合

参数 BitVal该参数指定了待写入的值,该参数必须取枚举 BitAction 的其中一个值

Bit_SET:设置数据端口位高电平

Bit_RESET:设置数据端口位低电平

GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);

二、点亮LED灯

方法一:使用GPIO_ResetBits函数点亮LED灯

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//开启GPIOC的时钟
															//使用各个外设前必须开启时钟,否则对外设的操作无效
	
	GPIO_InitTypeDef GPIO_InitStruct;						//定义结构体变量
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;				//GPIO模式,赋值为推挽输出模式
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;					//GPIO引脚,赋值为第13号引脚
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;			//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOC,&GPIO_InitStruct);						//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOC的初始化
	
	GPIO_ResetBits(GPIOC,GPIO_Pin_13);						//将PC13引脚设置为低电平
	while(1)
	{
		
	}
}

方法二:使用GPIO_WriteBit函数点亮LED灯

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//开启GPIOC的时钟
															//使用各个外设前必须开启时钟,否则对外设的操作无效
	
	GPIO_InitTypeDef GPIO_InitStruct;						//定义结构体变量
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;				//GPIO模式,赋值为推挽输出模式
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;					//GPIO引脚,赋值为第13号引脚
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;			//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOC,&GPIO_InitStruct);						//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOC的初始化
	
	GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);				//将PC13引脚设置为低电平
	while(1)
	{
		
	}
}

三、LED灯闪烁

LED灯闪烁需要用到江协科技的Delay库函数。

方法一:使用GPIO_ResetBits函数和GPIO_SetBits函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//开启GPIOC的时钟
															//使用各个外设前必须开启时钟,否则对外设的操作无效
	
	GPIO_InitTypeDef GPIO_InitStruct;						//定义结构体变量
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;				//GPIO模式,赋值为推挽输出模式
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;					//GPIO引脚,赋值为第13号引脚
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;			//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOC,&GPIO_InitStruct);						//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOC的初始化
	
	while(1)
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);					//将PC13引脚设置为低电平
		Delay_ms(500);										//延时500ms
		GPIO_SetBits(GPIOC,GPIO_Pin_13);					//将PC13引脚设置为高电平
		Delay_ms(500);										//延时500ms
	}
}

方法二:使用GPIO_WriteBit函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//开启GPIOC的时钟
															//使用各个外设前必须开启时钟,否则对外设的操作无效
	
	GPIO_InitTypeDef GPIO_InitStruct;						//定义结构体变量
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;				//GPIO模式,赋值为推挽输出模式
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;					//GPIO引脚,赋值为第13号引脚
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;			//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOC,&GPIO_InitStruct);						//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOC的初始化
	
	while(1)
	{
		/* GPIO_WriteBit设置低/高电平,由Bit_RESET/Bit_SET指定 */
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);		//将PC13引脚设置为低电平
		Delay_ms(500);										//延时500ms
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);			//将PC13引脚设置为高电平
		Delay_ms(500);										//延时500ms
		
		/* GPIO_WriteBit设置低/高电平,由数据0/1指定,数据需要强转为BitAction类型 */
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)0);	//将PC13引脚设置为低电平
		Delay_ms(500);										//延时500ms
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)1);	//将PC13引脚设置为高电平
		Delay_ms(500);										//延时500ms
	}
}

你可能感兴趣的:(STM32,stm32,嵌入式硬件,单片机,STM32标准库)