单片机(以32为例)的中断系统
NVIC控制器控制中断。
在stm32中,中断的优先级由四位控制字表示,分别是先占优先级和相应优先级。首先需要指定几位表示抢占,几位表示响应。
两个中断同时发生,响应优先级高的先执行,抢占优先级相同时,响应优先级高的先发生。抢占优先级高的可以打断低的,但响应优先级高的不能打断低的。数字越小越高。
配置方式:(1)配置io口,包括时钟,电气属性。(2)将io与中断线相关联。(3)配置NVIC(4)配置外部中断,如触发方式(5)编写中断服务函数
Co’rte’x—M3有0~255个异常,编号为0和7 ~ 10这5个是未用的异常编号,另有10个系统异常,240个外部中断,简称IRQ。外部中断的编号为IRQ#0 ~ IRQ#239。
NonMaskable Interrupt,不可屏蔽中断,通过NVIC连接一条NMI输入信号线,用于紧急事件的触发,其优先级在最高优先级(-3)之后,系统启动后的任何时间都可触发。
异常向量表是一个4字节数组,数组下标为异常编号,数组值为对应的异常服务程序的入口地址。当一个异常发生后,硬件会根据异常编号计算出在向量表中的偏移量,然后跳转执行。向量表的地址存在于向量表偏移量寄存器(VTOR)。
当发生复位异常后,CM3首先从地址0x0000 0000处取出MSP(主栈指针)的初始值; 从地址0x0000 0004处取出PC的初始值。而后程序从PC处开始执行,一通操作以后,进入main{}。
STM32特权级或非特权级模式
嵌入式linux(以i.MAX6ULL为例)启动流程
https://blog.youkuaiyun.com/weiganyi/article/details/11561859
哈佛结构和冯·诺依曼结构
哈佛结构是指令与数据分开,可以分别以不同宽度取指令与数据,具有较高的执行效率,比如PIC单片机。但是总线占用资源太多。
冯诺依曼结构,将指令与数据合并存放。节省一套数据地址总线。
外部走线成本高于内部走线,所以哈佛结构的思路被用于芯片内部,而冯诺依曼结构存在与芯片外部。
cach分为icache和dcache,分别用于缓存数据与指令。
串口通信
U(S)ART,全称Universal (Synchronous)Asynchronous Receiver/Transmitter,通用(同)异步收发传输器。本质是将二进制一位一位发出。
硬件上,TX和RX互联,一定要共地,波特率等各种参数一致。
数据格式如下:
- 空闲位:没有信号时时高电平
- 起始位,1位:低
- 数据位5~9位:一般都是8位的数据。由低到高发送。
- 奇偶校验位:(1)无校验(2)奇校验(odd parity)如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。(3)偶校验(even parity)原理同上,数据相反。(4)mark parity:校验位始终为1(s)pace parity:校验位始终为0
- 停止位:1位,1.5位,2位的高电平,表示数据结束。
IIC
https://blog.youkuaiyun.com/renzemingcsdn/article/details/119270538
SPI
https://blog.youkuaiyun.com/renzemingcsdn/article/details/119294516
CAN总线
传输速度最高到1Mbps,距离最远到10km,差分信号,无损位仲裁机制,多主结构。
- 硬件:每个单元上都要有一个CAN总线收发芯片,负责逻辑电平和信号电平之间的转换。
CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。 - 信号传输
- 数据帧
CAN总线以帧形式传输,通信帧分成五种,分别为数据帧(数据帧根据仲裁段长度不同分为标准帧和扩展帧)、远程帧、错误帧、过载帧和帧间隔。
帧起始:由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始;
帧结束:由7个隐形位(高电平)组成。
仲裁段:只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点同时开始传送报文,那么就需要仲裁。CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。ID只表示优先级,不代表地址。
120欧姆电阻具有“或运算”功能,只要有一个显性,整体就是显性。帧ID越小,优先级越高。 - 数据段:一个数据帧传输的数据量为0~8个字节,MSB在前。
- 错误:错误检测功能、错误通知功能、错误恢复功能(1)所有的单元都可以检测错误;(2)检测出错误的单元会立即同时通知其他所有单元;(3)正在发送消息的单元一旦检测出错误,会强制结束当前的发送。被强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止。
- 远程数据请求:可通过发送“遥控帧”,请求其他单元发送数据。
- STM32 CAN过滤,分为列表模式和掩码模式,列表模式一一列出需要匹配的ID;掩码模式具有掩码和校验码,当ID&掩码==校验码时,认为匹配。CAN_FM1R寄存器中的FBMx位,”0”表示掩码模式,”1”表示列表模式。(STM32F407为例)bxCAN共有28个过滤器。
每一个过滤器对应两个寄存器,
232&485
https://blog.youkuaiyun.com/renzemingcsdn/article/details/119820772