1)红色框围绕输出电路 蓝色框围绕输出电路
2) 如何实现输出?
通过一个写操作 写到 位置设置/清楚寄存器 ,然后改变输出寄存器, 也可以通过 读/写直接改变输出数据寄存器,以上两种方式改变输出数据寄存器 ,然后下面是一个选择开关,进行两路选着 。是GPIO输出还是复用功能输出, 输出控制是一个锁存器,
假设 如果输入是1 则输出控制就是1 和0 P-mos 导通 ,N-MOS 截止 ,内部 VDD为 3.3v ,输出高电平 。
如果做输入时候 一定要屏蔽掉下面红色框框的的输出电路
如果输入0 输出 反相 是 0 1 ,Pmos 截止 N-MPS 导通 内部Vss 低电平 ,输出为低电平。
两个内部上下拉开关 ,在51 单片机只有一个上拉 在m3 有上下拉 ,这两个开关都可以打开 ,即浮空。
在模拟输入的时候,不希望任何一点变化, 所以设置为浮空输入 ,经过施密特触发器 ,如果是捕获输入 则只用复用功能,
如果是作为IO口输入 ,首先改变的是输入数据寄存器 ,将数据数据寄存器相应的位改变以后 ,然后用户读入数据寄存器,将数据读到芯片内部中去 ,然后知道外部电压的高低。
3)通用功能的IO 称为GPIO 复用功能的io称为 AFIO
2 个 32 位数据寄存器(GPIOx_IDR 输入数据寄存器和 GPIOx_ODR输出数据寄存器) 开关的状态 输入输出 由配置寄存器决定 例如 :GPIOx_MODER、
1 个 32 位置位/复位寄存器 (GPIOx_BSRR) 置位就是1 复位就是0 对应上图的 位设置 /清除寄存器
4)推挽输出 p-mos n-mos 都正常工作 推挽式复用 输出: 不是由输出数据寄存器决定的 ,而是由复用数据寄存器决定的
输出模式的设置
GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32) 8<<28;
GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32) 8<<28;
GPIO口B的低8个端口控制寄存器CRL的低4个bits清为0,其余bits不变。
如果有错误希望指正