STM8 通用输入输出口--GPIO
通用输入/ 输出口用于芯片和外部进行数据传输。一个IO端口可以包括多达8 个引脚,每个引脚可以被独立编程作为数字输入或者数字输出口。另外部分口还可能会有如模拟输入,外部中断,片上外设的输入/ 输出等复用功能。但是在同一时刻仅有一个复用功能可以映射到引脚上。复用功能的映射是通过选项字节控制的。请参考数据手册关于选项字节的描述。
每个端口都分配有一个输出数据寄存器,一个输入引脚寄存器,一个数据方向寄存器,一个选择寄存器,和一个配置寄存器。一个I/O 口工作在输入还是输出是取决于该口的数据方向寄存器的状态。
GPIO主要功能
● 端口的各个位可以被单独配置
● 可选择的输入模式:浮动输入和带上拉输入
● 可选择的输出模式:推挽式输出和开漏输出
● 数据输入和输出采用独立的寄存器
● 外部中断可以单独使能和关闭
● 输出摆率控制用以减少EMC噪声
● 片上外设的I/O 功能复用
● 当作为模拟输入时可以关闭输入施密特触发器来降低功耗
● 在数据输出锁存时支持读-修改-写
● 输入兼容 5V 电压
● I/O 口工作电压范围为1.6 V 到V DDIOmax
I/O 的配置和使用
每一个端口都有一个输出数据寄存器 (ODR),一个引脚输入寄存器 (IDR) 和一个数据方向寄存器 (DDR) 总是同相关的。
控制寄存器1(CR1)和控制寄存器2(CR2)用于对输入/ 输出进行配置。任何一个I/O 引脚可以通过对DDR,ODR,CR1 和CR2寄存器的相应位进行编程来配置。
寄存器中的位n对应于口的引脚 n 。
各种不同配置总结。
IO 口配置表
输入模式
将DDRx 位清零就选择了输入模式。在该模式下读IDR 寄存器的位将返回对应I/O 引脚上的电平值。
来了解关于模拟输入,外部中断,和施密特触发使能/ 关闭的细节。
理论上可以通过软件配置得到四种不同的输入模式:悬浮不带中断输入,悬浮带中断输入,上拉不带中断输入和上拉带中断输入。但是在实际情况下不是所有的口都具有外部中断能力和上拉,用户应参考数据手册中关于每个引脚的实际硬件性能描述来了解更多细节。
输出模式
将DDRx 位置1就选择了输出模式。在该模式下向ODR寄存器的位写入数据将会通过锁存器输出对应数字值到I/O 口。读IDR 的位将会返回相应的I/O 引脚电平值。通过软件配置CR1,CR2寄存器可以得到不同的输出模式:上拉输出,开漏输出。
复位后的默认配置
复位之后,所有的引脚都是悬浮输入模式。
没有使用的引脚
没有使用的I/O 引脚必须连接到一个固定的电平值。或者是上拉或者是下拉。
低功耗模式
低功耗模式对GPIO口的影响
输入模式的详述
复用功能输入
部分I/O 口可以被用作复用功能输入。例如:可以被用来作为输入到定时器的输入捕捉口。复用的输入功能是不会自动选择的,用户可以通过写相应的外设寄存器的控制位来选择复用功能。
对于复用功能的输入,用户必须通过配置DDR和CR1 寄存器设置将对应的I/O 口设为为悬浮或是上拉输入。
中断功能
用户可以在I/O 引脚为输入模式时通过设置Px_CR2 寄存器的相应位来配置某个I/O 作为外部输入中断模式。在该配置下,I/O 引脚上的一个信号沿或是低电平会产生一个中断请求。
在EXTI_CR[2:1]寄存器中对于每一个中断向量都可以独立编程为上升沿或下降沿触发。
外部中断只有在对应I/O 口被设置为输入模式下才有效。
中断屏蔽
可以通过对Px_CR2 寄存器的相应位进行编程来单独使能/ 关闭外部中断功能。复位后外部中断是关闭的。
模拟通道
DC外设可以选择某些I/O 口作为模拟输入通道。如下面一节描述,当使用模拟通道的时候,DC_TDR 寄存器的输入施密特触发器必须被关闭。
推荐的和不推荐的模拟输入配置
施密特触发器
部分I/O 口包括一个内嵌的输入施密特触发器。可以通过ADC_TDR 施密特触发器禁止寄存器来使能/ 禁止施密特触发器。
输出模式详述
复用功能的输出
复用输出功能为外设输出到外部或者I/O 引脚提供一个方便的操作方法。当复用功能使能时,复用功能模块接管了输出锁存寄存器(Px_ODR) 并强制Px_ODR 相应的位为1。
复用输出功能可以是上拉或者开漏输出,取决于外设本身和控制寄存器1(Px_CR1) ,输出摆率取决于控制寄存器2 (Px_CR2)的值。
例如:
考虑到要达到最佳性能,SPI输出引脚必须设置为上拉,快速摆率。UART_Tx可以被配置为或者是上拉或者是开漏带外部上拉来实现多从机的配置。
摆率控制
输出摆率可以使用CR2 的相应位通过软件控制。置位CR相应位选择为10MHz的输出频率。该功能既可以用在开漏也可以用在带上拉的输出模式I/O 口,输出类型为O3 或者O4。请参考引脚描述表来了解每个口的输出类型。
STM8输入输出口GPI 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)