1、stm32输入输出模式
stm32共八种输入输出模式
(1)输出模式
推挽输出模式:pmos和nmos均可使用,即此时可输出高电平和低电平,但高电平电压最高为3.3v
开漏输出模式:只有nmos可用,即此时无法输出高电平,但可外接上拉电阻实现输出高电平,此时高电平最高看上拉电阻。
复用推挽和复用开漏功能同上,复用模式时输出状态由单片机外设控制(IIC,USART等),普通模式由寄存器控制
(2)输入模式
上拉输入:即启用内部输入上拉电阻,即空闲状态下该脚点平为高电平,经过施密特触发器后变为0或1
下拉输入:即启用内部输入下拉电阻,即空闲状态下该脚电平为低电平,经过施密特触发器后变为0或1
浮空输入:既不使用上拉电阻也不使用下拉电阻,该状态下空闲时引脚电平开单片机心情
模拟输入:信号不经过上下拉电阻和施密特触发器(保持信号原汁原味),此状态可用于读取引脚电压大小
ps:单片机在输出状态下不影响输入(模拟输入除外)
2、stm32中NVIC中断
STM32中共有19条(0-18)EXTI线,
其中EXTI0_15为GPIO中断线(中断部分)
EXTI线16连接道PVD输出、EXTI17为RTC闹钟、EXTI18为USB唤醒事件。(事件部分)
NVIC控制部分
NVIC内部为向量表,根据触发中断的EXTI线调用响应的处理函数(ps:调用完成后记得清零中断屏蔽寄存器响应的位,避免重复中断)
ps:系统延时函数的原理即为中断,通过滴答定时器中断来确定延时时间,滴答定时器的中断优先级为15(最低),故建议在中断中使用延时函数(不听话非要使用的话就先修改滴答定时器中断优先级)
3、usart通信
串口通信为异步全双工通信模式
轮询模式下需要设置等待时间,一直占用CPU资源
中断模式下在接受完一段字节后进入中断,中断仍需CPU来处理
空闲中断+DMA可实现自动处理数据,可实现不定长数据包收发,并大大节约CPU资源
4、IIC通信
IIC通信为同步半双工通信(SCL、SDA(开漏输出模式))
速度:低速100k,高速:400k
开始信号为SCL高电平时SDA由高电平变为低电平、结束信号为SCL高电平期间SDA由低电平变为高电平,传输数据时SDA需在SCL低电平期间改变SDA状态,从机可在SCL高电平期间读取SDA数据。
IIC通信也可以使用中断+DMA来节约CPU资源
大佬的取模助手https://led.baud-dance.com
5、时钟源
内容参考自B站大佬 keysking