- 博客(15)
- 收藏
- 关注
原创 CAN总线入门教程,第二章-CAN总线帧格式(终)(位填充、波形实例)--江科大
CRC的最后一位是显性0时,如果后面直接跟ACK槽,这时发送方还拽着总线,那接收方怎么发送应答位呢?r0保留位必须为0,这是因为在仲裁时,0的优先级更高,在以后使用时,可以保证当前定义的优先级比以后拓展定义的优先级更高。拓展格式的ID号是29位的,并不是4的整数倍,所以扩展ID号的范围是0x00000000~0x1FFFFFFF;简单来说,位填充是发送方最后一步处理,是接收方的第一步处理。位填充插入的数据位,要和后续的数据位合并,进行新的位填充判定。长时间不变的波形,对接收方的准确接收是有影响的。
2024-09-10 17:13:07 538
原创 CAN总线入门教程,第二章-CAN总线帧格式(中)(拓展格式、错误帧、过载帧、帧间隔)--江科大
处于主动错误状态的设备检测出错误时会连续发6个显性位,发显性位就是拉开总线,总线只要有一个设备拉开了就必然处于显性状态,即0和1相遇总线总是处于0状态,这是线与特性,所以主动错误标志的6个显性位必然会破坏正常传输的数据,其他设备检测到错误标志就会抛弃这个数据。请求方发出遥控帧,遥控帧的ID表示要请求的数据,响应请求的一方,通过相同ID的数据帧反馈数据,当请求和反馈同时发生时,数据帧拥有更高的优先级。,拓展格式出现的原因是标准格式的11位ID不够用了,需要加一些,并且拓展格式必须要考虑对标准格式的兼容。
2024-09-10 11:46:48 1299
原创 CAN总线入门教程,第二章-CAN总线帧格式(上)--江科大
如果收到隐性1,那发送方就会想,我释放了总线,谁收到了,谁就得在ACK槽这一位拉开总线,有设备拉开,总线必然是显性0,但是我读取到总线,却是收到隐性1,竟然没有回应我,我不安心,这样就说明发送失败,发送方可以配置自动重发,也可以不管,总之发送方知道发送状态即可。首先看一下标准格式。继续,一位帧起始之后,首先发送的是报文ID,标准格式是11位,如果想发送10101010101,那这一段时序就是 隐显隐显隐显隐显隐显隐,这一段是紫色,表示根据数据的不同,可以是显性0,也可以是隐性1.,1位,必须是隐性电平。
2024-09-06 10:38:07 1500
原创 CAN总线入门教程,第一章-CAN总线的硬件电路--江科大
声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以一起学习。我在其中添加了自己的一些理解,都已经标注。由于我只有一些python基础,所以可能有错误。平常学起来也比较吃力,就把自己的一些理解加上去了,方便大家有和我一样没有基础的人进行学习,如果有不对的地方欢迎指正。之前的话,大家可以先看一下导读,大概了解一下这个系列。
2024-09-05 14:11:05 1340
原创 CAN总线入门教程--江科大(导读)
看名称可以看出来CAN总线构建的是一种局域网网络,每一个挂载在CAN总线的设备,都可以利用这个局域网来发送自己的消息,也可以接收局域网的消息,每个设备都是平等的,都在共享这个局域网的资源。第一部分是CAN总线的通信协议,这一部分仅介绍CAN总线协议的各项规定,与具体的某款主控芯片无关,这部分是最基础的理论知识,了解了基础知识,后续写代码的时候才能得心应手,更容易理解代码。第二章,学习CAN总线的帧格式,也就是如何将发送数据编码为CAN总线上的时序波形,这里主要学习CAN总线的5中帧类型。
2024-09-04 21:31:58 1101
原创 [C语言]指针的详解与应用(应用)--江科大
这个a就相当于是学霸的作业,我想把学霸的作业传递给学渣,但是我害怕学渣在我的作业上乱涂乱画,所以我就新找来了一个本子(一块新的内存),把学霸的作业在这个新本子上抄一遍,再给学渣,这样和主函数学霸的作业完全没有关系,无论子函数学渣怎么弄这个作业,都无所谓,当子函数运行结束后,这个复制作业(局部变量)就作废了,充分保护了主函数变量的安全。,array是多少呢,是a这个值。是为了隔离主函数和子函数的数据,防止子函数乱动数据将主函数里的数据改了,就是让学渣不要乱动学霸的作业,不要乱涂乱画,不然学霸如何交作业。
2024-09-02 19:46:10 1056
原创 [C语言]指针的详解与应用(理论)--江科大
首先是3个变量,int类型的每个变量占4个字节,所以是3*4.其返回值是一个void *,他表示一个指针指向void型,因为它返回的时候不知道我们要用什么,当我们不知道这个指针需要对接到什么指针的时候,就可以用void *代替,等到实际用的时候,自己定义即可。因为单独的数据就占了一个数据宽度,当++时,指针指向了下一个地址,而下一个地址的内容我们事先没有定义,所以里面到底是啥我们不知道,指针此时就越界了,指针访问到了非法位置,可能会导致程序出现错误。存储器有两个重要的点,一个是数据,另一个就是地址。
2024-09-01 19:58:00 1497
原创 STM32--硬件读写W25Q64
2、软件写入数据至SPI_DR,写入ByteSend之后,自动转入移位寄存器,一旦移位寄存器有数据了,时序波形就会自动产生,这个波形生成,不需要我们再调用额外的函数。我只有一些pyhon基础,所以可能有错误,学起来也比较吃力,就把自己的一些理解加上去了,方便大家有和我一样没有基础的人进行学习,如果有不对的地方欢迎指正。3、在发送的同时,还会进行接收,等接收数据完成后,意味着发送移位也完成了。硬件SPI的接线图和上一节软件SPI的接线图一致,硬件引脚不能随便接,要参考芯片的引脚定义图。
2024-08-31 19:21:04 1126
原创 STM32--SPI通信外设(下)
这里数据波形产生的时机可能有点早了,应该是在b1的时刻波形才开始产生,在这之前,数据还没有转入移位寄存器(添加一下我的理解,我也觉得有点早:TXE置0,说明TDR不为空,这时数据还在TDR中,还没有移入到移位寄存器中,然后TXE置1,说明TDR为空,数据就转移到移位寄存器中了,然后再开始产生波形移出数据,所以感觉b0出现的过早了)。接收到的数据1是0xA1,这时移位寄存器的数据整体转入RDR,RDR随后存储的就是0xA1,转入的同时,RXNE置1,表示收到数据了。所以,读取RDR要及时。
2024-08-31 18:00:00 1767
原创 STM32--SPI通信外设(上)
声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以一起学习。我把其中一些白话进行了修改,并且添加了自己的一些理解。我只有一些pyhon基础,所以可能有错误,学起来也比较吃力,就把自己的一些理解加上去了,方便大家有和我一样没有基础的人进行学习,如果有不对的地方欢迎指正
2024-08-31 14:00:00 900
原创 STM32--软件SPI读写W25Q64(下)
先计算数据要跨多少页,然后该擦除的擦除,最后再分批次一页一写,这些可以封装成一个函数。声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。可以看到写入的跟读取不一样,由于读取可以跨页,所以55后面的FF是读到的下一页的。0x0000FF是一页的最后一个地址,从最后一个地址开始写。可以看到页的最后一个地址写完数据后,就从页起始位置覆盖掉原来的数据。在验证一下擦除之后数据变为FF的情况,只擦除不写入。如果不擦除,读出的数据=原始数据 & 写入的数据。
2024-08-31 08:00:00 436
原创 STM32--软件SPI读写W25Q64(中)
事前等待,效率会高一点,因为写完之后不等,程序可以执行其他代码,在执行其他代码期间,来消耗等待的时间,说不定下一次事前等待的时候,时间已经被耗过去了。由于指令比较多,每个指令都对应一个指令码,如果直接在程序里写一个数字,那意义就不太明显,可读性不高。页编程一次性写入数据的范围是0~256,所以是16位的,如果这个Count是uint8_t的话,只能存0~255,这样当我们写256个数据时,就会出现问题。最后一个指令,读取数据,流程是先发送一个指令,在发送3个字节的地址,再转入接收,就可以依次接收数据了。
2024-08-30 16:42:35 1084
原创 STM32--软件SPI读写W25Q64(上)
声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以一起学习
2024-08-30 10:55:29 1108
原创 STM32学习笔记,W25Q64简介(理论部分)
声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以一起学习
2024-08-29 16:45:09 1222
原创 STM32学习笔记,SPI通信协议(理论部分)
声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以一起学习
2024-08-28 22:11:17 2079 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人