- 博客(18)
- 收藏
- 关注
原创 低速通信之王:LIN总线工作原理入门
随着汽车电子系统复杂度提升,ECU节点数的增加,CAN总线通信的重要性与日俱增,同时在车载网络中也有一些低成本通信需求,这些通信需求的数据量不大,实时性要求也不高,这时候如果依然使用CAN总线通讯的话成本会增加很多,也会造成资源浪费,这时候产生了LIN总线通信,LIN总线是CAN总线的补充,所以与CAN相比,LIN的可靠性与成本都更低。
2025-03-30 23:07:37
950
原创 Jlink烧录S32K144故障
后面将下载速度降下来以后确实可行了,但是在debug的时候依然出现一些理解不了的问题,比如在windows下用keil烧录的时候下载速度可以稳定的达到10Mhz,但是用Ozone调试就不行,总是动不动就断开链接。但是烧录stm32的时候就非常流畅,说明jlink应该是没问题的,于是猜测是S32K144的硬件问题,抱着试一试的想法把板子上的MCU供电从5V切换到3.3V,然后问题就解决了,具体就是下面这里,红框里有个跳线帽,拔下来换到另一边即可解决问题。
2025-03-27 22:13:09
172
原创 Keil MDK5.37以上版本无法使用AC5编译器问题
2. 点击setup安装,安装至keil的安装路径的ARM文件夹里面,比如我的是D:\keil\ARM\,在里面新建一个ARMCC文件夹,安装到这个文件夹里,这个文件夹名是为了方便和AC6区分,也可以叫别的,(AC6的编译器在ARMCLANG文件夹里);如果AC5编译器不能用的话,ARM::CMSIS的版本肯定也是不合适的,需要回退,卸载6.1.0及之后的版本,安装5.9.0版本。添加编译器,选择刚才安装的文件夹。也可以去网上搜索别的下载。接下来就可以正常编译了。1.下载AC5编译器。
2025-03-27 09:19:22
199
原创 双系统下Linux挂载Windows硬盘失败
每次开机都手动执行也不是个办法,于是就想到编写shell脚本以后每次开机自动运行,后面经过实践以后发现也不行,脚本倒是可以自动执行,但是硬盘还是没有挂载成功。按网上的说明,执行完了这两步之后就应该没问题了,我这里执行完了以后还是不行,只能通过类似下面的命令手动挂载。后面挂载的时候就挂载到这个文件夹下,实际上在没出现这个问题之前自动的挂载地址也是这里。,若无报错,说明配置正确,若有报错,则需要使用上面的备份文件修复,防止系统无法启动。后面发现可以设置开机自动挂载硬盘。
2025-03-21 23:00:45
242
原创 git命令学习记录
一般使用git修改文件并提交需要三步,第一步在文本编辑器中编辑文件,也就是在工作区修改文件;第二步使用git add添加文件,将修改的文件存到暂存区;第三步使用git commit提交文件,将暂存区的文件提交到当前分支。
2025-03-02 18:15:01
469
原创 rust学习之项目代码组织
rust提供了将包分成多个 crate,将 crate 分成模块,以及通过指定绝对或相对路径从一个模块引用另一个模块中定义的项的方式。你可以通过使用 use 语句将路径引入作用域,这样在多次使用时可以使用更短的路径。模块定义的代码默认是私有的,不过可以选择增加 pub 关键字使其定义变为公有。
2025-01-12 16:52:55
2076
原创 STM32学习之基本定时器
U事件指的是计数器溢出的时候发生的事件,U是update event的简称,意思就是说只有计数器溢出的时候才会将PSC和ARR的值写入对应的影子寄存器中,同时注意到图片的右下角除了事件以外还有中断和DMA输出,这俩是UI事件,UI是update interrupt的简称,U事件和UI事件的相同点是都是在计数器溢出的时候产生,不同点是U事件默认产生,可配置不产生,UI事件是默认不产生,可配置产生。定时器的核心就是计数器,计数周期由单片机的晶振频率进行一系列的分频以后决定,之前学的看门狗本质就是计数器。
2025-01-05 02:37:46
938
原创 STM32学习之窗口看门狗
窗口看门狗和独立看门狗差不多,不过也有区别,这俩都是倒计时的计时器,都是满足一定条件以后发生复位,但是喂狗的时候有一些区别,独立看门狗只要开始计时,在发生复位之前任何时候都可以喂狗,而窗口看门狗只能在某一阶段喂狗,不能太早也不能太晚。太早和太晚都会产生系统复位,所以称之为窗口。STM32F107芯片的窗口看门狗的下界一定是0x40,这个值不能修改,也就是说从0x40变到0x3F就会产生复位,不会出现小于0x3F的情况,窗口看门狗的上界是由用户进行配置的,在允许的范围内可以进行配置。
2025-01-01 10:36:28
783
原创 rust学习之自定义数据类型
结构体的定义格式和C语言差不多,只有一些语法格式的差异,看下面的例子// 定义一个表示复数的结构体real: f32,// 建立一个复数的实例real:15.0,println!这段代码定义一个结构体来表示一个复数的实部与虚部,然后建立一个复数的实例z结构体内部各字段之间是用逗号分隔的,包括实例化的时候给成员赋值都是用的逗号,而C语言的结构体成员之间用的是分号(暂时来看rust结构体的字段和C语言的结构体成员是一个概念,后面简单提一下细微差异);
2024-12-29 21:17:13
718
原创 STM32学习之独立看门狗
独立看门狗的本质就是一个12位的定时器,一直在递减计数,等数值减到零就会进行系统复位,所以为了防止系统复位需要及时喂狗,喂狗的意思就是重置这个12位的寄存器的计数值,不要让它减到0。因为单片机产品的运行场景各种各样的,有时候会受到外界电磁场干扰,导致程序跑飞,陷入死循环,程序的正常运行被打断,单片机就无法继续工作,进而会造成整个系统瘫痪,发生不可预料的后果。所以就诞生了看门狗这个东西。
2024-12-28 00:58:32
1003
原创 STM32学习之串口通信
转换芯片输出TXD和RXD还不能直接进入MCU,进入MCU之前需要像下图一样反接,反接的原因是转换芯片输出的TXD和RXD是针对非单片机设备来说的,TXD是该设备发给单片机的信息,RXD是单片机发给该设备的信息,而下图左边的部分是针对MCU说的,看MCU的数据手册可以看到PA10和PA9的复用关系分别是USART1_RX和USART1_TX,所以就能对的上了,发送接接收,接收接发送。这个可以显示出当前设备有哪些可用的串口设备,下面的是我的机器上的执行结果,单片机就是最后一个了。
2024-12-25 23:38:09
890
原创 STM32学习之外部中断
众所周知,单片机的MCU是由内核和片上外设组成的,内核就是一般说的某某内核的芯片,比如战舰开发板采用 ARM Cortex-M3 内核,内核就包括CPU核心以及一些内部外设,内部外设的内是相对内核说的,内部外设的外是相对CPU处理器说的,而片上外设就是内核外面的那些外设,下图我框起来的部分,Cortex-M3’s internal peripherals这部分映射的地址就是控制内部外设的寄存器地址,而右边的那些(我的截图不完整,只截了一部分)非常多的就是片上外设的寄存器地址了。
2024-12-21 01:23:13
1950
原创 C语言学习之union在嵌入式领域的常见应用
在 C 语言中,union(联合体)是一种特殊的数据类型,特点是所有成员共享同一块内存空间。定义倒是挺简单的,以前一开始学C语言的时候也知道这个概念,但是基本上也没怎么用过,最近看到了公司代码中的寄存器定义用到了这个类型,就来总结一下。union的成员访问方式和结构体一样,都使用来访问,由于所有的成员共用同一块内存,所以union最后输出,和uint32_t的大小一样,都是4个字节。
2024-11-30 00:32:59
250
原创 rust学习之所有权,引用和借用
所有权是Rust独有的概念,是一种资源管理机制,主要是针对堆内存管理的,栈也没啥好管理的,在编译时以及程序运行时自动完成,不需要人为干预,而堆就不一样了,拿C语言来说,其最基本的申请堆内存的函数malloc,申请的内存用完以后都要使用free及时释放,要不然就会造成大名鼎鼎的内存泄漏,但是我觉得应该有很多很多人在初学的时候总是忘记释放,而且由于堆内存的特殊性,像汽车这种对安全性要求比较高的行业,基本上都是禁止使用诸如mallocRequiredC90, C99。
2024-11-29 22:14:34
1017
3
原创 在C语言中怎么用printf函数输出%号
printf(“The discount amount is %.f %% \n”,discount);在学习C语言的printf输出的时候,原本以为转义符“\”可以使用,后来发现不行,如果想要输出%,需要使用两个百分号,即%%。
2022-01-12 11:26:04
2908
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人