持续关注阿杰在线更新保姆式笔记~~坚持日更
寄存器跑马灯实验
目录
一、GPIO口工作模式
四个输出模式
四大输入模式
对应库函数
二、相关寄存器
三、硬件连接
四、库函数——步骤
五、代码区
IO:数据输出 数据输入 (所有IO口都可以作为中断输入)
通用:普通IO功能 单纯的IO做输出输入(通常:片外外设)
复用:除了IO以外的其他片上外设做数据交换 (通常:片上外设)
推挽:既能输出1也能输出0
P-MOS管输出1 N-MOS管输出0
开漏:只能输出0、不能输出1
P-MOS管一直处于高阻态 N-MOS管输出0
上拉电阻:空闲电平高 防止数据、电流倒灌
线与功能 通信协议
片上外设:芯片以内、核心以外 IO TIM....
片外外设:芯片以外 LED BEEP KEY.....
通用推挽输出 通用开漏输出 复用推挽输出 复用开漏输出
上拉输入:具有上拉功能 空闲电平高
下拉输入:具有下拉功能 空闲电平低
增强IO的驱动能力
浮空输入:按键
模拟输入:输入的模拟量
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;
1、使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();----》rcc.h-693
不同的IO组,调用的时钟使能函数不一样。
2、 初始化IO口模式。调用函数GPIO_Init();----》gpio.h-351
GPIO_SetBits();(高)----》gpio.h-357
GPIO_ResetBits();(低)----》gpio.h-358
**main.c**
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
Led_Init();
delay_init();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5输出高电平--》灭
GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5输出高电平--》灭
delay_ms(500);//延迟500ms
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//PB5输出低电平--》亮
GPIO_ResetBits(GPIOE,GPIO_Pin_5);//PE5输出低电平--》亮
delay_ms(500);
}
}
**led.c**
#include "led.h"
#include "stm32f10x.h"
void Led_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义一个结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//GPIOB 使能PB,PE端口时钟 rcc.h-693
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
//GPIOE 使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure); //根据设定参数初始化GPIOB.5 gpio.h-351
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5输出高电平 gpio.h-357
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//LED1-->PE.5 端口配置, 推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED1-->PE.5 端口配置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIOE,&GPIO_InitStructure);//根据设定参数初始化GPIOE.5
GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5输出高电平 gpio.h-358
}