I/O 端口是MCU与外部电路连接的进行数据传输的通道。
4.6.1 概述
I/O口的作用是通过PDR寄存器将数据从CPU中输出或装载输入的信号到CPU。通过设置DDR寄存器来配置每一位的方向(输入/输出)。
寄存器列表如下:


R/W:可读/可写(读写的值相同)
R,RM/W: 可读/可写(作为标志位被状态改变)
4.6.2 P0 口
P0口是一个通用I/O口
P0口配置:
P0口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P0口数据寄存器(PDR0)
P0口方向寄存器(DDR0)
该端口有8个引脚


P0口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR0全部为”0”。
4.6.3 P1 口
P1口是一个通用I/O口
P1口配置:
P1口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P1口数据寄存器(PDR1)
P1口方向寄存器(DDR1)
P1口上拉寄存器(PUL1)
输入级别选择寄存器(ILSR)
该端口有5个引脚:
P1口引脚
点击查看图片![]()

P1口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据;
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR1全部为”0”。
4.6.4 P2 口
P2口是一个通用I/O口
P2口配置:
P2口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P2口数据寄存器(PDR2)
P2口方向寄存器(DDR2)
P2口上拉寄存器(PUL2)
该端口有5个引脚:

P2口框图
点击查看图片![]()
P2口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR2全部为”0”。
4.6.5 P3 口
P3口是一个通用I/O口
P3口配置:
P3 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P3 口数据寄存器(PDR1)
P3口方向寄存器(DDR1)
P3口上拉寄存器(PUL1)
A/D输入使能寄存器(AIDRL)
该端口有8个引脚:

P3口框图
点击查看图片![]()
DDR3
PUL3
AIDRL
P3口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR3全部为”0”。
4.6.6 P4 口
P4口是一个通用I/O口
P4口配置:
P4 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P4口数据寄存器(PDR1)
P4口方向寄存器(DDR1)
P4口上拉寄存器(PUL1)
A/D输入使能高位(AIDRH)
该端口有4个引脚:
点击查看图片![]()
点击查看图片![]()
P4口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR4全部为”0”。
4.6.7 P5 口
P5口是一个通用I/O口
P5口配置:
P5 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P5口数据寄存器(PDR5)
P5口方向寄存器(DDR5)
P5口上拉寄存器(PUL5)
输入级别选择寄存器(ILSR)
该端口有4个引脚:

![]()
P5口寄存器
P5口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR5全部为”0”。
4.6.8 P6 口
P6口是一个通用I/O口
P6口配置:
P6 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P6 口数据寄存器(PDR6)
P6口方向寄存器(DDR6)
P6口上拉寄存器(PUL1)
输入级别选择寄存器(ILSR)
该端口有8个引脚:



P6口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR6全部为”0”。
4.6.9 P7 口
P7口是一个通用I/O口
P7口配置:
P7 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P7口数据寄存器(PDR7)
P7口方向寄存器(DDR7)
P7口上拉寄存器(PUL7)
该端口有2个引脚:

P7口框图
点击查看图片![]()
P7口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR7全部为”0”。
4.6.10 P8 口
P8口是一个通用I/O口
P8口配置:
P8 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
P8口数据寄存器(PDR8)
P8口方向寄存器(DDR8)
该端口有4个引脚:
点击查看图片![]()
寄存器和引脚的对应
寄存器和引脚的对应关系

P8口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDR8全部为”0”。
4.6.11 PE 口
PE口是一个通用I/O口
PE口配置:
PE 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
PE口数据寄存器(PDRE)
PE口方向寄存器(DDRE)
PE口上拉寄存器(PULE)
输入级别选择寄存器(ILSR)
该端口有5个引脚:

PE口框图
点击查看图片![]()
寄存器和引脚的对应
寄存器和引脚的对应关系:
引脚----PE3 PE2 PE1 PE0
PDRE
DDRE ----Bit3 Bit2 Bit1 Bit0
PULE
PE口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDRE全部为”0”。
4.6.12 PG 口
PG口是一个通用I/O口
PG口配置:
PG 口由下面几个部分组成:
通用I/O引脚/外围功能引脚
PG口数据寄存器(PDRG)
PG口方向寄存器(DDRG)
PG口上拉寄存器(PULG)
该端口有3个引脚:
点击查看图片![]()
点击查看图片![]()
PG口的操作:
作为输出引脚的操作:
1.设置相应的DDRbit 为“1”,该引脚为输出引脚;
2.作为外部复用功能,该设置无效;
3.作为输出功能引脚,输出的数据是PDR中的数据
4.数据写入PDR中,储存在输出锁存器,输出到引脚的值就是输出锁存器中的数据;
5.读PDR返回PDR中的值。
作为输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为输入引脚;
2.作为外部复用功能,该设置无效;
3.数据写入PDR中,储存在输出锁存器,不输出到引脚;
4.读PDR返回外部引脚的值,读刷新写命令返回PDR的值。
作为外部功能输出引脚的操作:
1.设置相应的使能位,引脚工作在外部功能输出模式;
2.引脚的状态从PDR0读出
作为外部功能输入引脚的操作:
1.设置相应的DDRbit 为“0”,该引脚为外部功能输入引脚;
2.读PDR0寄存器的时候返回引脚的状态,与外部功能设置无关。
复位时的操作:
回到初始的状态,DDRG全部为”0”。


