STM8 单片机的触角——I/O 口的应用 4.1 玩转 I/O 口必备的“五器” STM8S208RB 单片机的I/O 口分布情况如图4-1 所示 图 4-1 STM8S208RB 管脚分布图 从图4-1 中我们可以看到,STM8S208RB 共有64 个引脚,其中52 个通用输入/输出口( GPIO),它们分别是PA1~ PA6、 PB0~ PB7、 PC1~ PC7、 PD0~ PD7、 PE0~ PE7、 PF0、 PF3~PF7、 PG0~ PG7、 PI0。其中,每个端口都有一个输出数据寄存器(ODR),一个输入引脚寄存器 ( IDR), 一个数据方向寄存器( DDR), 一个控制寄存器1( CR1), 一个控制寄存器2( CR2),这就是STM8 单片机I/O 的“五器”。“五器”到手了,该如何使用,如表4-1。 配置模式 数据方向寄存器 DDR 控制寄存器1 CR1 控制寄存器2 CR2 配置模式 输入 0 0 0 悬浮输入 0 1 0 上拉输入 0 0 1 中断悬浮输入 0 1 1 中断上拉输入 输出 1 0 0 开漏输出 1 1 0 推挽输出 1 x 1 输出(最快速度10MHz) x x x 真正的开漏输出(特定引脚) 表 4-1 I/O 口配置表 由表4-1 中看出,当Px_DDRn 为“1”,Pxn 配置为输出,否则为输入。 当配置为输入时,若 Px_CR1 为 “ 1”, 上拉电阻使能,否则为悬浮输入。而 Px_CR2 为 “ 1”时,开启当前I/O 口的外部中断功能,为“0”时关闭外部中断功能。若想读取该I/O 引脚上的数据,只需读取相应的Px_IDR 寄存器即可。 当配置为输出时,若 Px_CR1 为 “ 1”, Pxn 配置为推挽输出,否则为开漏输出。而 Px_CR2为 “ 1” 时,当前I/O 口的最大输出速率为10MHz, 否则最大输出速率为2MHz。 想要某个I/O口输出高电平,则向Px_ODR 中写入0xff,否则写入0x00; 注:针对STM8S208RB 而言,x 为 A、 B、 C、 D、 E、 F、 G、 I; n 为 0~ 7。 下面的例子演示了如何设置PB 口低四位为推挽输出,最快速度10MHz,并输出高电平,高四位为上拉输入。 unsigned char i; … /*设置输出高电平*/ PB_ODR = (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0); /*设置端口方向*/ PB_DDR = (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0); /*设置推挽输出和定义上拉电阻*/ PB_CR1 = 0xff; /*设置端口最大速度和关闭中断*/ PB_CR2 = (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0); /*读取端口输入数据*/ i = PB_...