一.什么是中断?
通常,把CPU内部产生的紧急事件叫做异常,比如非法指令(除零)、地址访问越界等;把来自CPU外 部的片上外设产生的紧急事件叫做中断,比如GPIO引脚电平变化、定时器溢出等。异常和中断的效果基本 一致,都是暂停当前任务,优先执行紧急事件,因此一般将中断和异常统称为中断。
STM32 的中断和优先级
STM32中断重点理解中断优先级分组,然后根据中断优先级分组确定抢占优先级级数和子优先级级数。 体现在编程里,就是根据中断需求,先使用“HAL_NVIC_SetPriorityGrouping()”函数设置中断优先级分组, 再使用“HAL_NVIC_SetPriority()”函数设置不同中断的抢占优先级级数和子优先级级数。
假设中断A的抢占优先级比中断B的抢占优先级高,两个中断同时发生,那么中断A优先执行。
假设中断A的抢占优先级和中断B的抢占优先级一样,两个中断同时发生,那么子优先级高的中断优先执行。
假设中断A的抢占优先级比中断B的抢占优先级高,中断B先发生,随后A也发生,那么将暂停中断B, 先执行中断A,A执行完后,再回来执行中断B,最后执行主程序,这种效果即中断嵌套。
假设中断A的抢占优先级比中断B的抢占优先级一样,中断A的子优先级比中断B的子优先级高,中断B 先发生,随后A也发生,那么中断A将等待中断B执行完后,才会执行中断A,即子优先级不能中断嵌套。
假设中断A的抢占优先级和中断B的抢占优先级一样,且子优先级也一样,两个中断同时发生,那么根 据前面表 10.2.1 顺序,排在前面的先执行。
总结中断是否会优先执行依据:首先是抢占先式优先级等级,其次是子优先级等级,只有抢占优先级才 可能出现中断嵌套。
二.通信
按照数据传输的方式,通信可以分为串行通信和并行通信。串行通信简单的说就是数据依次传输,比如 要传输0x11111111,一位一位的发送,需要发送8次。并行通信则是几个数据一起传输,同样是0x11111111, 如果8位一起发送,只需要发送1次,如下图所示
同样,我们要认识一下全双工,半双工,单工。
全双工就像电话通信,双方任意时刻都可以同时收发信息;
半双工就像对讲机通信,双向都可得到信息, 但是同一时刻只能是一方发射另一方接收,发射和接收不能同时进行;
单工就像收音机,只能由广播站发送 给收音机,单向不可逆的。
同步通信的做法是加一个时钟信号,发送方和接收方在这个时钟的节拍下传输数据,比如常 见的SPI、I 2 C。而异步通信的做法是对数据进行封装,在数据开头加上起始信号,在数据结尾加上终止信号, 双方就按这个规则传输数据
说到串口,经常提到TTL、RS232、RS422、RS485,简单的说,就是为了适应不同的环境条件,使用了 不同的电平标准。假如微处理器和板载的蓝牙透传模块通信时,一般就使用TTL电平,引脚直接连接即可。 假如微处理器在工业现场,需要连接一个几十米外的装置,则应该考虑将TTL电平转为RS232、RS422、RS485。
串口通信通常需要三根线,Tx,Rx,GND。
串口在嵌入式中经常使用,一般使用UART就足够了,常见的用途如下:
1. 作为调试口,打印程序运行的状态信息;
2. 连接串口接口的模块(比如GPS模块),传输数据;
3. 通过电平转换芯片变为RS232/RS485电平,连接工控设备;