前一段时间学习了STM32,先是用库函数学了一个星期。发现学完之后,一些基本要用的东西能配出来,但是过程却是十分的懵逼。于是决定暂时放弃库函数,用51的思维学习32,从寄存器开始,发现效果不错。一两天学一两个模块,个把星期下来对一些基本模块的常用寄存器也理解的不少。决定慢慢的回归库函数之前写下自己对STM32一些模块的理解,共勉之。
首先附上GPIO口的内部电路图:
其中蓝色方框部分代表的是GPIO的输入电路,红色方框的部分,代表GPIO的输出电路。
可见:
从写入端看输出部分的四种模式分别是:通用推挽输出、通用开漏输出、复用推挽输出、复用开漏输出。
接下来分析输出电路的四种输出形式(数据从“1”或“2”端到 I/O 端口。注意:此时输入电路会被屏蔽【通过寄存器配置】):
1、通用推挽式输出:
通过“写操作”到“位设置/清除寄存器”从而改变“输出数据寄存器”,或者直接通过“读/写操作”改变“输出数据寄存器”,后经选择器“4”选择输出的数据源(来自“1”、“2”还是“3”),最后通过“5”输出的电平 1 或 0 ,来控制P-MOS和N-MOS的导通或截止。
比如, 当5输出 1 时,P-MOS导通,N-MOS截止,则输出到 I/O 端口的电压为VDD(高);当5输出上端为 0 ,P-MOS截止,N-MOS导通,则输出到 I/O 端口的电压被拉低