前言
事情是这样的,最近写了个串口通信的代码,结果死活都发不出去消息,然后研究了好久发现把TX引脚的推挽输出模式改成推挽复用输出模式就正常了,于是来剖析下原理。
正文
我们先来看这一幅图
两者的共同点都是引脚可以通过给出正反向电压来控制MOS管导通从而让引脚输出高低电平,而两者区别就在于推挽复用输出不经过输出数据寄存器(ODR)。
拿usart1为例:若要实现usart1的通信功能,我们就要同时使能GPIOA和外设USART1。如果采用推挽输出,则该引脚电平直接由ODR控制而不受usart外设的控制。因此采用推挽复用输出从而绕过ODR的限制,由相应的外设模块控制。
官方的参考手册也明确给出使用USASRT外设时需要采用推挽复用输出
参考资料
STM32中文参考手册