简单IO口配置_LED灯(STM32)

删除回忆录丶 提交于 2019-12-25 19:53:29

GPIO口(可编程IO)

一、GPIO口概念

GPIO是通用输入/输出端口的简称。可以实现输出(驱动外部电路)、输入(检测外来信号)以及模拟一些通信接口通信协议功能,是单片机和外界进行数据交换的必要窗口。GPIO和外界进行都是通过TTL数字电平(高电平或低电平)来进行数据交换的,高电平表示数字“1”,低电平表示数字“0”。

二、单片机内部系统框图

STM32数据手册
在这里插入图片描述在这里插入图片描述
STM32 中文参考手册.pdf GPIO 章节位于:第8章 框图位于105页

I/O端口位的基本结构
在这里插入图片描述

三、编程思路:

1、 看原理图:GPIO与设备连接情况;
在这里插入图片描述

2、看数据手册 所处时钟总线;

在这里插入图片描述
3、固件库手册

(1)寄存器编程(难度系数高、了解一款芯片 举一反三)
(2)库函数编程ST(难度系数小、出现问题找问题比较麻烦、容易上手)

四、编程

1、 开启时钟

展开:RCC库函数 RCC_APB2PeriphClockCmd 使能或者失能 APB2 外设时钟

函数原型: void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph,FunctionalStateNewState)

参数1

RCC_AHB2Periph 描述
RCC_APB2Periph_AFIO 功能复用 IO 时钟
RCC_APB2Periph_GPIOA GPIOA 时钟
RCC_APB2Periph_GPIOB GPIOB 时钟
RCC_APB2Periph_GPIOC GPIOC 时钟
RCC_APB2Periph_GPIOD GPIOD 时钟
RCC_APB2Periph_GPIOE GPIOE 时钟
RCC_APB2Periph_ADC1 ADC1 时钟
RCC_APB2Periph_ADC2 ADC2 时钟
RCC_APB2Periph_TIM1 TIM1 时钟
RCC_APB2Periph_SPI1 SPI1 时钟
RCC_APB2Periph_USART1 USART1 时钟
RCC_APB2Periph_ALL 全部 APB2 外设时钟

输入参数2: 这个参数可以取: ENABLE 或者 DISABLE

以PB5为例: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

2、初始化GPIO口:

展开GPIO库函数

 GPIO_Init        根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器  

函数原型:

  函数原形        void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 

输入参数 1 GPIOx: x 可以是 A, B, C, D 或者 E,来选择 GPIO外设

输入参数2

typedef struct
{
u16 GPIO_Pin;                   //管脚
GPIOSpeed_TypeDef GPIO_Speed;   //输出速率
GPIOMode_TypeDef GPIO_Mode;     //模式
} GPIO_InitTypeDef;
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct. GPIO_Pin = GPIO_Pin_5;
GPIO_InitStruct. GPIO_Speed= GPIO_Speed_50MHz;
GPIO_InitStruct. GPIO_Mode = GPIO_Mode_Out_PP;

以PB5举例:GPIO_Init(GPIOB,& GPIO_InitStruct);

3、程序编写示例:

led.c

#include "led.h"
/**************************
*函 +数 名:void LED_Gpio_Init(void)
*函数功能:LED灯连接管脚初始化
*参    数:无
*返 回 值:无
***************************/
void LED_Gpio_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
	/*配置管脚 PB5*/
	GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_5;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	/*配置管脚 PE5*/
	GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_5;
	GPIO_Init(GPIOE,&GPIO_InitStruct);
	/*配置管脚 PA5PA6*/
	GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_5|GPIO_Pin_6;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
    /*初始化之后不亮*/
	LED1_OFF;
	LED2_OFF;
	LED3_OFF;
	LED4_OFF;
}

led.h

#ifndef _LED_     //如果没有定义    防止重复定义
#define _LED_     //定义     
//头文件
#include "stm32f10x.h"
//函数声明
void beep_init(void);
//宏定义
#define BEEP_ON  GPIO_ResetBits( GPIOB,GPIO_Pin_8)

#define BEEP_OFF  GPIO_SetBits(GPIOB,GPIO_Pin_8)

#endif
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!