计算机的组成部分通常分为5类:运算器、控制器、储存器、输入设备、输出设备。对于STM32H743ZIT6来说,最基本的输入/输出设备就是IO口(GPIO,General-Purpose Input/Output,通用输入/输出口)。所以就以GPIO的操作作为第一个实验。
关于GPIO的内容,在参考手册的第10章。
STM32H743ZIT6共有11组GPIO,即GPIOA-GPIOK,除GPIOK只有PK0-PK7这8个引脚外,其他各组GPIO都有16个引脚Pn0-Pn15(n=A,B......J)。每一个IO口都可以独立地配置、操作。
GPIO的工作模式  GPIO的工作模式 如上图所示,GPIO有3种输入通用模式、1种模拟模式、2种通用输出模式和2种复用输出模式,从上到下依次为: 1、浮动输入模式 2、上拉输入模式 3、下拉输入模式 4、模拟输入模式 5、带上拉/下拉功能的开漏输出模式 6、带上拉/下拉功能的推挽输出模式 7、带上拉/下拉功能的开漏复用模式 8、带上拉/下拉功能的推挽复用模式 在这8种功能中,功能1-3类似,差别就是启用或禁用上拉/下拉电阻;功能4使用模拟信号,而且既可以作为输出口,又可以作输入口;功能5-8都是输出功能,但功能5、6可以直接用软件修改IO口的电平状态,而功能7、8的电平状态由硬件改变。 其实7、8的复用输出功能也可以归为输出功能,但是与通用输出功能不同的是,在复用模式下,有专门的驱动电路来驱动IO口,IO的电平状态不再受到GPIO相关寄存器的控制,其控制权将交给驱动IO口的外设,如UART、I2C等。不过GPIO的工作模式却没有复用输入模式,这是因为输入信号不需要专用的电路,只需要把信号直接送给对应的外设就可以了。但如果某一个IO口启用了复用功能(不论输入还是输出),虽然HAL库提供的GPIO读函数依然有效,但禁止使用HAL库提供的写函数修改IO口电平状态,同时也不建议读取IO口电平状态。
GPIO的结构:
GPIO的结构 GPIO的结构大同小异。就输入电压而言,可以分为两类,一类是支持5V容忍度的IO,一类是不支持5V容忍度的IO。所谓的5V容忍度,指的是某个IO口既可以使用3.3V高电平,又可以使用5V高电平且不会损坏,但要串接保护电阻。不过还是参考后者,即不支持5V容忍度的IO。
不管何种模式,图片右边的两个保护二极管都不会被禁用,也不会影响输入的电平,所以不做讨论。
对于3种输入模式,右边的上拉/下拉电阻可以根据选择使用,蓝色框为输入驱动器,实际上这部分主要是一个施密特触发器。在输入模式下,从IO输入的信号会先向模拟部分(橙色)提供一路信号(不管用不用,都会提供,由相应的模拟外设选择输入的信号,下同),之后经过施密特触发器,向复用输入功能部分(红色)提供一路信号,同时也向GPIO的输入数据寄存器(紫色)提供一路信号,作为从外部读取的电平。
在模拟功能下,除了橙色部分的模拟信号输入/输出外,其他部分都无效或者禁止使用。
如果启用了输出功能,那么就有两路可用的输出驱动信号,一路是来自GPIO输出数据寄存器的驱动信号(来自紫色的框中),另一路是复用功能驱动信号(来自左下黄色框中),具体选用哪一路信号,由输出驱动电路(绿色框)种的选择器确定,并将这一路信号送给输出控制部分,用来产生MOS管的驱动信号,通过MOS管的关断和导通,实现电平的变换。
如果和功能5-8关联起来的话,功能5、6使用的驱动信号由GPIO输出数据寄存器提供,功能7、8使用的驱动信号由复用功能驱动信号提供。在开漏模式下,P-MOS始终关闭,通过启用上拉电阻或者外接上拉电阻的形式来产生高电平,如果没有有效的上拉电阻,那么IO口的电平状态是不确定的。如果是推挽模式,那么P-MOS和N-MOS会交替导通和关断,保证高电平足够高、低电平足够低。
GPIO的复用:
STM32H743的外设非常多,其中某一些外设需要使用GPIO来输入、输出信号,此时就要把某些GPIO的控制权交给外设,由外设管理IO的电平状态。此时GPIO不能再作为通用IO使用,而是工作于由用户选定的功能,这种工作状态就叫做GPIO的复用。GPIO有16种复用模式,从AF0-AF15,详细的复用功能表再STM32H743xI的数据手册中,位于第五章靠后的部分。
 GPIOA的复用功能 虽然一个引脚支持数种复用功能,但同一时刻,只能选择一种复用功能。
|