M3系列的单片机的普通I/O口可以设计为输入或者输出模式,并且程序中间可以动态变换;输入时可以配置为模拟输入,浮空输入,上拉/下拉输入;输出时可以配置为推挽输出、开漏输出、复用功能开漏输出,同时也可以设置输出I/O电平翻转速度。
(1): 模拟输入:一般作为ADC采集时使用。
(2):上拉/下拉输入:引脚内部接上拉/下拉电阻后作为输入引脚。
(3):浮空输入:引脚既没有上拉也没有下拉,悬空作为输入,此时引脚为高阻态模式,当外部没有明确的高电平输入时,引脚读出的0和1没有实际意义。
(4):开漏输出:就是I/O不输出电压,在低电平接地,在高电平类似浮空,需要外接上拉电阻。
(5):推挽输出:这种模式下,I/O引脚通过MOS管进行输出放大,输出高电平平时为3.3v,输出电流最大50mA,驱动能力比较强。
相关寄存器
(1):GPIOx_CRL(端口配置低寄存器) 每个I/O需要4位进行输入输出的配置,每个寄存器32位,一个寄存器只配置8个引脚,M3每组端口一般有16个I/0引脚,所以有高低寄存器。
复位值:0x4444 4444
(2):GPIOx_CRH(端口配置高寄存器),与GPIOx_CRL(端口配置低寄存器)配置一样。
复位值:0x4444 4444
(3):GPIOx_IDR(端口输入数据寄存器),0-15位端口输入,这些位只读,读出值对应I/O状态;16:31保留。读出数据始终为0;
(4):GPIOx_ODR(端口输出数据寄存器),0-15位:这些位可读可写;16:31保留。读出数据始终为0;
(5):GPIOx_BSRR(端口位设置/清除寄存器);0-15(BS)位置1,16:31(BR)位复位;优先级BS>BR;
(6):GPIOx_BRR(端口位清除寄存器);0-15(BR)复位,16:31位保留;