GPIO

GPIO:通用型输入输出

STC8位单片机的每个引脚都有四种工作模式,分别是

工作模式 PnM1 PnM0 说明
准双向(弱上拉) 0 0
即可输入也可输出,灌电流可达20mA,拉电流为270~150uA
推挽输出(强上拉) 0 1 可达20mA,要加限流电阻
高阻输入 1 0 电流既不能流入,也不能流出,但可用于测电平
开漏输出 1 1
漏模式既可读外部状态也可对外输出,如要正确读外部状态或需要对外输出高电平,需外加上拉电阻

若想要使用引脚,则至少有三个8位寄存器搭配工作,两个配置寄存器,一个数据寄存器

PnM0,PnM1:是两个控制寄存器,n是端口组号,M0和M1是寄存器M0和寄存器M1,如下图,我们使用的板子有48个引脚,划分为6组,组号即Pxy前面的x,而每组划分为位0-7引脚,引脚编号即后面的y,每组引脚会采用两个8位的寄存器来控制该组每个引脚的工作模式,若想修改P53引脚的工作模式,只需给P5M0和P5M1寄存器的第3位赋值即可
由于通过位运算去修改寄存器某一位的值过于繁琐,所以我们可以使用单片机厂家提供的库,对配置引脚工作模式的这个功能进行函数封装
//配置GPIO端口工作模式函数
typedef struct
{
    u8	Mode;//IO模式,GPIO_PullUp(准双向,若上拉),GPIO_HighZ(高阻输入),GPIO_OUT_OD(开漏输出),GPIO_OUT_PP(推挽输出,强上拉)
	u8	Pin;//要设置的引脚	
} GPIO_InitTypeDef;
void GPIO_Config(){
    GPIO_InitTypeDef init;
    //定义一个GPIO_InitTypeDef结构体类型的变量
    //结构体成员有GPIO_Mode和GPIO_Pin,分别是端口工作模式和引脚编号
    init.Mode = GPIO_PullUp;
    init.Pin = GPIO_Pin_0;
    GPIO_Inilize(GPIO_P0,&init);
    //初始化函数的两个参数分别是端口号和结构体变量
}
posted @   剑客温华  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
点击右上角即可分享
微信分享提示