- 博客(11)
- 收藏
- 关注
原创 stm32—时钟与定时器
毛刺”时期是不正常的,我们应该要略过它,略过的意思是指当B的信号发生改变时我们不应该立马去读输出值,而是应该等待一段时间,等电路(如:&门)将数据处理完毕后,再去读取输出值此时才是准确的。为什么会有这样的现象呢?输入信号经过"输入捕获阶段"(数字滤波,多路复用,预分频,去噪等等),到信号检测,当检测到需要的信号状态(上升沿变化/下降沿变化)变化时,就会把定时器时基单元中的TIMx_CNT计数器值,锁定到"输入捕获寄存器"中。配置好之后,就会从N开始减(也可以从0加到N),当减到0时,就会CPU复位。
2024-09-03 11:34:53
481
原创 stm32—中断
为了尽量节省中断响应的时间,它事先为每一个中断事件设置一个编号,并且不同的中断的中断处理程序的地址,也要事先指定好(就如同现实中找东西,我们每次把东西放在一个固定的位置能很快找到)那么每一个中断处理程序所在的地址,都是根据中断编号的顺序存储在一个数组(函数指针数组)中的,这个数组就是我们的中断向量表。所以当产生了一个特定的中断事件时,CPU就可以以最快的速度到指定的地址去执行中断处理程序。现代CPU架构为了能够及时响应外部或内部的一些紧急事件,都支持中断,并且会提供相应的中断响应机制。
2024-09-02 10:31:53
865
原创 stm32—IIC
接收方给 SDA 一个低电平 但是这里存在一个问题,就是如果数据的最后一个 bit 本身就是一个低电平,那么 SDA 线此时的电平状态就是 0,这个时候,不管接收方应答还是不应答,发送方可能都会认为对方应答啦。I2C总线上可能在某一时刻有两个主控设备要同时向总线发送START信号,这种情况叫做总线竞争,I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,决定谁的信号有效,其他的设备就立刻处于一个“监听模式”
2024-08-29 22:23:58
1054
原创 stm32—GPIO
在C语言中,volatile是一个关键字,告诉编译器该变量值容易发生改变,在编译、读取、存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取存储数据,不做优化,因为它可能会被程序之外的因素改变。在STM32中,外围设备的寄存器在上电的情况下默认是没有时钟的,不给时钟的情况下操作外设是无效的,外设也不会工作,这样的目的是降低功耗。抖动的原因:单片机上的按键大部分都是机械弹性按键,这种按键在按下或者弹起的时候发生抖动,对实验造成影响。
2024-08-29 13:57:46
1038
原创 stm32—CAN
总结:在总线空闲时,最先开始发送消息的节点获得发送权。我们约定,CAN总线上每一个节点,都需要去总线上采样(包括发送者,这种行为称之为回读:每个节点往总线上发送1bit 数据的同时会读取1bit总线上的数据,并与自己发送的数据作对比)。以消息内容中的 ID 进行仲裁,每个发送节点,也必须去采集总线上的数据,如果发现采集到的数据与自己发送的不同,你就是Loser,你就变为接收者。注: 1. 只有总线上所有节点发出的数据都为1时,总线状态才为1, 只要有一个节点发送0,则总线上的状态为0,称之为线与。
2024-08-26 09:17:35
290
原创 stm32—IIC
总线系统通过仲裁只允许一个主节点可以继续占据总线 (建立在线与逻辑上实现的,当总线上只要有一个设备输出低电平,整条总线便处于低电平状态)I2C总线上可能在某一时刻有多个主控设备要同时向总线发送START信号,这种情况叫做总线竞争,I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,决定谁的信号有效,其他的设备就立刻处于一个“监听模式”为了让数据精准到达(而不是广播的形式发送),我们给 IIC 总线上的每一个设备都给一个唯一的地址,这个地址就是设备地址,用来区分不同的 IIC 设备。
2024-08-25 15:22:44
893
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人