3-1 LED输出


title: 3-1 LED输出
tags:

  • STM32
    categories:
  • STM32学习

示意图

|875

注意:keilkill.bat程序可以删掉中间文件,这样体积就可以大大减小
回顾操作顺序:

  1. 使用RCC开启GPIO的时钟
  2. 使用GPIO_Init初始化GPIO
  3. 使用输出或者输入的函数控制GPIO

RCC的常用函数
GPIO_DeInit初始化GPIO,调用这个函数所指定的GPIO外设会被复位
GPIO_AFIODeInit可以复位AFIO外设
GPIO_Init结构体的参数来初始化GPIO口,需要先定义一个结构体变量,再给结构体赋值,最后再调用这个函数,这个函数就会自动读取结构体的值,然后自动把外设的各个参数配置好
GPIO_StructInit可以把结构体变量赋一个默认值
接下来是GPIO的读取函数|500
然后是GPIO的写入函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"       //delay函数直接拿来用就行,不需要问为什么

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     //RCC使能
	
	GPIO_InitTypeDef GPIO_InitStructure;         //GPIO的结构体初始化
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       //定义其中的结构体变量
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);           //然后引用GPIO初始化
	
	while (1)
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);      //分别是3种不同的输入方式
		Delay_ms(500);                       //注意这里是Bits,说明这个函数的参数可以是PIN的各种组合
		GPIO_SetBits(GPIOA, GPIO_Pin_0);         //这种是通过向GPIOA一整排set和reset来控制
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);      //这个是通过向具体的GPIOA中的A0写数据来控制
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);    //其中的BitAction是在库函数中的声明,是枚举类型,强制类型转化便可以正常输出
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);
		Delay_ms(500);
	}
}

GPIO的8种输入模式

AIN(Analog IN):模拟输入
IN_FLOATING:浮空输入
IPD(In Pull Down)是下拉输入
IPU(In Pull Up)是上拉输入
Out_OD:开漏输出
开漏输出的高电平相当于高阻态,没有输出能力,低电平有驱动能力
Out_OO:推挽输出
高低电平均有驱动能力,所以一般的输出用推挽输出就可以了,但有一个问题是输出口不能串联
AF_OD(Atl Open Drain):复用开漏
AF_PP(Atl Push Pull):复用推挽

System文件夹是用来存放系统的资源:比方说Delay函数

LED闪烁

  • 接线图|500
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);       //此处也是需要开启GPIOA的使能
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;           //直接使用GPIO_ALL 来开启全部端口
	GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|     //可以使用或|来进行多位的赋值
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001    因为是低电平点亮,所以要取反
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000
		Delay_ms(100);
	}
}

蜂鸣器

|500

注意不要是要使用A15,B3,B4,这三个端口默认是JTAG的调试端口,如果想正常使用还需要外加配置

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

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);       //此处也是需要开启GPIOB的使能,蜂鸣器使用的是B12输出
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;           //直接使用GPIO_ALL 来开启全部端口
	//GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|     //可以使用或|来进行多位的赋值
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);  //记得要取地址
	
	while (1)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);   //因为这个蜂鸣器是有源蜂鸣器,所以直接输入高电平就可以响    
		Delay_ms(100);                       
		GPIO_SetBits(GPIOB, GPIO_Pin_12);         
		Delay_ms(100);
		
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值