一、GPIO是什么?
全称:General-purpose input/output(通用型输入输出)
操作要点:
1. 使能 GPIO 端口时钟。
2. 初始化 GPIO 目标引脚为推挽输出模式。
3. 编写简单测试程序,控制 GPIO 引脚输出高、低电平。
二、使用步骤
1.GPIO功能与模式
1.输入浮空 :输入模式施密特触发器打开及GPIO端口内部上下拉开关打开, 并且状态不确定。
2.输入上拉:输入模式施密特触发器打开及GPIO端口内部上拉开关关闭,默认为高电平。
3.输入下拉 :输入模式施密特触发器打开及GPIO端口内部下拉开关关闭,默认为低电平。
4.模拟输入 : 模拟输入施密特触发器关闭─,输入数据寄存器禁止,实现模拟信号采集。
5.开漏输出 : 开漏输出即在输出数据寄存器为‘0’时,控制NMOS打开,Pmos关闭,在数据寄存器为‘1时将端口置为高阻态,IO口状态由外部上下拉决定。
6.推挽输出 :POMS,NMOS均启用,输入数据寄存器输出‘1’时PMOS打开,为高电平状态,反之为低电平。
7. 推挽复用功能 :GPIO端口复用功能输出推挽。
8. 开漏复用功能:GPIO端口复用功能输出开漏。
2.寄存器操作
GPIOX_CRL --端口配置低寄存器 ---设置输入输出模式及速度0-7 config register low
GPIOX_CRH--端口配置高寄存器---设置输入输出模式及速度8-15 config register hight
GPIOX_IDR--端口输入数据寄存器---低16位有效,读对应IO口状态 input date register
GPIOX_ODR--端口输出数据寄存器---低16位有效,写状态 output date register
GPIOX_BSRR--端口位设置/清除寄存器--操作ODR寄存器置1置0 bit set reset register
GPIOX_BRR--端口位清除寄存器--操作ODR寄存器置0 bit reset register
GPIOX_LCKR--端口配置锁定寄存器
存储器映像 GPIOA 起始地址 0x4001 0800 -0x4001 0BFF
#define GPIOA_CRL *(unsigned int*)(0x40010800+0x00) //强制类型转换先转换成指针
#define GPIOA_CRH *(unsigned int*)(0x40010800+0x04) //然后指针解引用,给对应寄存器赋值
#define GPIOA_IDR *(unsigned int*)(0x40010800+0x08) //地址位GPIOA基地址+偏移值
#define GPIOA_ODR *(unsigned int*)(0x40010800+0x0C)
#define GPIOA_BSRR *(unsigned int*)(0x40010800+0x10)
#define GPIOA_BRR *(unsigned int*)(0x40010800+0x14)
#define GPIOA_LCKR *(unsigned int*)(0x40010800+0x18)
gpio.c文件中为结构体类型
typedef struct
{
unsigned int CRL;
unsigned int CRH;
unsigned int IDR;
unsigned int ODR;
unsigned int BSRR;
unsigned int BRR;
unsigned int LCKR;
}GPIO_TypeDef;
#define GPIOA ((GPIO_TypeDef*)GPIOA_BASE) //强制类型转换为结构体指针类型,指向上边的结构体。
3.库函数操作
#include "led.h"
#include "stm32f10x.h" // Device header
void LED_init(void)
{
//1.创建结构体变量
GPIO_InitTypeDef led_init;
//2.使能APB2 GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
//3.结构体配置
led_init.GPIO_Mode =GPIO_Mode_Out_PP;
led_init.GPIO_Pin=GPIO_Pin_5 ;
led_init.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &led_init);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
led_init.GPIO_Mode =GPIO_Mode_Out_PP;
led_init.GPIO_Pin=GPIO_Pin_5 ;
led_init.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOE, &led_init);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
}
总结
GPIO是目前操作的第一个外设,通过库函数操作还是很简单的,步骤比较一致。
1.使能对应外设时钟
2.配置相关对应寄存器/结构体配置
3.初始换GPIO
上一篇:STM32F10x外部中断EXTI
下一篇:STM32F10X库函数逻辑
推荐阅读最新更新时间:2024-11-11 18:58
设计资源 培训 开发板 精华推荐
- 使用VIPer™Plus-VIPER06HN的3W,5V输出,隔离式反激转换器
- 改1111111111
- 使用 Analog Devices 的 LTC3130EUDC-1 的参考设计
- Audio Mezz,Audio Mezzanine Board 是一款 Grove 接口扩展板,适用于 96boards
- LT3796 演示板,具有电流监视器的 100V LED 控制器
- 使用 Analog Devices 的 LTC4235IUFD-1 的参考设计
- 使用 ROHM Semiconductor 的 BD5234 的参考设计
- USB扩展坞【已验证】
- 【CW32】基于CW32F030的旋转展示台
- 使用 TB62737FUG 升压 DC-DC 转换器用于 4 WLED 驱动器的典型应用
- 邀您观看 微信直播:户外照明智能互连解决方案 让TE连接光明与智能未来
- [直播预报名] TI 最新蓝牙技术培训,2017 震撼首发!
- 【1月14日 技术直播】工程师请就位,Keysight计量专家开讲啦 ~电子仪器计量校准基础知识与校准周期探讨
- ADI•世健工业嘉年华—有奖直播:ADI赋能工业4.0—助力PLC/DCS技术创新
- 翻开《射频技术For Dummies系列》书籍,跟帖漫谈射频世界
- 电感知识大考:遇到这些问题怎么办?|“MPS电感探索季:发现小且不凡的秘密!”第一站
- 瑞萨电子100套开发套件等你来抢
- 有奖直播|ADI多参数光水质分析平台
- 阅读是德科技 Power Supply、汽车电子精彩专题,让您的设计更精准!参与答题赢好礼!