STM32f103c8t6 学习
学习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
关闭模式,此时一般设置为输入模式,端口只能输入不能输出
输出模式下,输入模式也是有效的,可以一边输出,一边读取自己输出的结果。
复用开漏输出,引脚的结果由外设控制,不经过输出数据寄存器
2.EXTI外部中断
什么是中断?
中断优先级
中断嵌套
stm32的中断
68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设
使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级
抢占优先级和响应优先级?
目前使用的中断资源
1.EXTI0-EXTI4
2.EXTI9_5
3.EXTI15_10
中断地址:程序中断函数,地址由编译器分配的,不固定,但是中断跳转由于硬件限制,必须跳到固定的地址执行程序。因此为了能让硬件跳转到不固定的中断函数中,利用中断向量表,中毒案发生后,跳转这个位置,由编译器加上一条跳转到中断函数的代码。
NVIC(嵌套中断向量控制器)
一个外设可能会同时占用多个中断通道,故有一个n字母,NVIC只有一个输出口,告知CPU处理哪个中断。
NVIC优先级分组
优先级寄存器的四位(0-15)决定,值越小优先级越高,高n位决定抢占优先级,低4-n位决定响应优先级。抢占优先级高可以中断嵌套,就是直接运行其他的了,响应优先级高可以优先排队。要是两个都相同,按照中断号排队。
EXTI外部中断的原理:
EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
支持的触发方式:上升沿/下降沿/双边沿/软件触发
支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、
以太网唤醒
触发响应方式:中断响应/事件响应
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通