学习stm32f103c8t6最小系统板+keil5的使用,学习江科协记录所用
1.GPIO的操作
GPIO的输入和输出模式
8中输入输出模式
对于8中模式从电路上理解
整个电路上半部分是IO作为输入、下半部分是IO作为输出
考虑输入情况 浮空输入、上拉输入、下拉输入、模拟输入
1.最右边IO引脚接着两个保护二极管,作用是对于输入电压进行限幅,输入电压比Vdd还高,二极管会导通,输入电压比Vss还低,二极管也会导通,避免过高过低的电压对内部电路造成影响。
2.再往左上边看,有上拉电阻和下拉电阻,开关是可以通过程序配置的,上面关闭导通,下面断开就是上拉输入模式,反之下拉输入模式,两个都断开则是浮空输入模式。具体的作用是给输入提供一个默认的电平的,如果IO什么都不接,输入情况i下IO口输入是高电平还是低电平是无法判断的,特别易受扰动改变。故这里通过上拉电阻或者下拉电阻来保证这种情形下是高电平还是低电平。
3.再往左边是肖特基触发器,估计就是施密特触发器(翻译错误?),对于输入电压整形所用,输入电压大于高阈值,输出瞬间高电平,输入小于某个低阈值,输出瞬间低电平。位于高低阈值之间的情形不改变电平情况,可以很大程度上还原各种扰动的模拟电平信号转换为数字信号,减少扰动抖动的影响。此时整形后的波形可以直接写入输入数据寄存器,此时程序读取输入寄存器某一位数据,可以读取电平了。此时上面的模拟输入和复用功能输入。模拟输入是接到stm32的ADC外设的,所以需要模拟量,接在施密特触发器前面。而复用端口输入接到其他需要读取端口的外设上面。
模拟输入时施密特触发器处于关闭,无效,整个GPIO大部分没用,就两个保护二极管,然后直接将信号给ADC外设
考虑输出情况
数字部分可以有输出数据寄存器或者片上外设控制。这两个控制方式通过输出选择器接到了输出控制部分。
写输出数据寄存器每一位就可以操作对应某个IO端口。
这个左边还有一个位设置/清除寄存器,这个可以单独设置输出数据寄存器的某一位,不影响其他位。
当然也可以用与或操作输出数据寄存器,但是效率不高。
输出控制后面接两个MOS管,其实就是两个开关,通过信号控制开关的导通和关闭,开关负责将IO口接到Vdd或者Vss,这里对应三种输出模式,推挽、开漏、关闭。
推挽输出模式,PMOS和NMOS都有效,输出数据寄存器为1时,PMOS导通,NMOS断开,输出直接接到VDD,输出高电平;输出数据寄存器为0时,NMOS导通,PMOS断开,输出直接接到Vss,输出低电平。高低电平都有较强驱动能力。stm32让你输出高就高,低就低,有绝对控制能力。
开漏模式,只有NMOS有效,也就只有低电平有驱动能力,高电平没有驱动能力,此时可以将IO口作为通信协议的驱动方式,如IIC,多机通信时,可以避免各个设备互相干扰。开漏还可以再外接上拉电阻到5v,此时低电平还是低电平vss,高电平由外接电阻直接上拉到5v
关闭模式,此时一般设置为输入模式,端口只能输入不能输出
输出模式下,输入模式也是有效的,可以一边输出,一边读取自己输出的结果。
复用开漏输出,引脚的结果由外设控制,不经过输出数据寄存器
标签:输出,高电平,STM32f103c8t6,低电平,学习,IO,寄存器,输入 From: https://www.cnblogs.com/wzxzibo/p/17150678.html