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);
//初始化函数的两个参数分别是端口号和结构体变量
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!