- 博客(24)
- 收藏
- 关注
原创 CAN 通信异常
首先将共模电感去掉,用0欧姆电阻短接,仍无法通信;之后尝试更换收发器,问题仍未得到解决;后面请教同事,把CAN电路中的ESD管以及电容去掉,发现通信正常了。最近项目中遇到CAN通信异常的问题,MCU端能正常发送数据,CANH和CANL之间波形并不是标准的方波,导致无法正常通信。
2025-09-30 16:25:00
158
原创 单片机PRIMASK寄存器
PRIMASK 寄存器位定义(取自 ARMv7-M 手册),其仅有最低位 PM 是有效的,当 PRIMASK[PM] 为 1 时,系统全局中断是关闭的;当 PRIMASK[PM] 为 0 时,系统全局中断是打开的(对执行优先级无影响)。__disable_irq()、__enable_irq() 功能其实就是操作 PRIMASK 寄存器实现的。一.Cortex-M 处理器内核的特殊屏蔽寄存器 PRIMASK。
2025-08-21 16:59:53
342
原创 MCU复位问题
MCU被中断唤醒后会重新初始化相关外设和时钟,并开启看门狗,看门狗的周期设置的是100ms,经测试MCU从唤醒到执行完唤醒逻辑(MCU醒来后需要将LIN总线唤醒)跳转到main函数的时间在120ms左右,导致看门狗超时复位MCU。最近项目中遇到个问题,当MCU休眠后被中断唤醒后,会在RESET脚上检测到一个低电平信号导致MCU复位。方法1:在将MCU唤醒后,执行完唤醒逻辑,在跳转到main函数前开启看门狗。方法2:在将MCU唤醒后,执行唤醒逻辑的过程中添加喂狗函数,防止MCU复位。
2025-08-20 13:17:31
274
原创 使用系统变量在Panel中显示数据
最近有个标定实验,为了直观的看到数据的变化,希望将相关参数在Panel中显示出来,但其中一个参数并不是LDF文件中定义的信号,而是由两个信号量相减得到的,所以需要用到CANoe中的系统变量实现。3.直接将定义好的系统变量拖拽到Panel中,此时在Panel中可以看到系统变量的属性,默认是输入输出属性。2.点击System Explorer,在弹出的窗口中点击系统变量图标,可以看到刚才定义的系统变量。1.首先在CANoe中创建系统变量,添加用户自定义的系统变量,并给变量命名。
2025-08-20 11:43:38
157
原创 使用CAPL 脚本发送LIN报文
如图所示定义按键事件,当键盘上的按键9被按下,会发送一帧22服务的请求报文。是允许将LIN报文发送出去;可更新要发送LIN报文数据场中的数据。点击刚添加的网络节点左下角的铅笔图标即可进入capl编程页面。如下图所示定义诊断请求报文0x3c和诊断响应报文0x3d。在CANoe工程中添加网络节点。一.添加NETWORK NODE。二.编写CAPL脚本代码。
2025-08-04 15:07:18
470
原创 单片机使用JLINK调试时发现ADC采样值异常
使用的MCU是3.3V供电,在调试ADC功能时,发现能够正常读取到采样数据,但是数值与实际的电压值对应不上。后面发现是JLINK跳线帽短接5V供电导致的电压异常,短接到3.3V供电就正常了。JLINK调试时供电电压要与单片机的电压匹配,也可拔掉跳线帽,使用外部电源供电进行调试。
2025-06-05 11:24:34
259
原创 使用CODEWARRIOR根据LDF文件生成配置文件
2.将com.freescale.ncftool_1.5.3.jar插件压缩包放置到CW安装目录下的eclipse文件夹即可。1.首先安装codewarrior IDE,此时打开IDE后是无法生成配置文件的,因为没有安装对应的插件。3.之后重新打开IDE就可以使用LDF文件生成配置文件了。
2025-05-15 10:14:31
229
原创 中断冲突问题
1.在项目中使用UART打印log,串口发送功能异常;后面排查发现是中断发生了冲突,项目中CAN和UART中断优先级设置成相同,导致冲突。后面将UART优先级改小就正常了。2.在使用MCU的过程中,需要格外注意中断冲突,或DMA冲突问题。如果发现单独调试某个外设没有问题,一直到项目里就出现异常,可以往这方面考虑。
2025-03-25 14:05:17
193
原创 复旦微芯片DMA问题
1.在项目中使用复旦微LE系列MCU,ADC使用DMA搬运数据,为了调试方便使用UART1发送数据,但发现ADC和串口不能同时使用,开启UART1发送数据功能,就会使DMA搬运ADC值失败。5.从手册中看出UART1的TX脚也是DMA的通道4,所以怀疑是通道冲突导致的,将DMA搬运ADC数据的通道改为0,发现ADC和UART1功能都正常了。3.使用DMA通道4进行搬运ADC数据。
2025-03-22 15:37:23
385
1
原创 SAE J1850查表法的另一种实现方法,业内通用
汽车电子行业使用的CRC8校验通常是SAE J1850算法,通常使用查表法时,SAE J1850和 SAE J1850 ZERO使用的值表是同一个。
2025-03-03 15:09:19
280
原创 SAE J1850标准和SAE J1850 Zero标准
网上查找的例程大多是采用SAE J1850 Zero标准,而SAE J1850的CRC数值表几乎搜不到,博主项目中使用的CRC数值表是用自己写的demo程序printf获得的。SAE J1850标准多项式为0X1D,初始值0xFF,异或值为0xFF;而SAE J1850 Zero标准的多项式为0X1D,初始值0x00,异或值为0x00。SAE J1850标准常用于汽车电子通信的校验,一直没搞懂这两种CRC8校验标准的区别,现将自己的理解记录如下。下面例程中同时提供了实时计算CRC的函数,均已测试验证过。
2025-02-28 16:34:38
568
原创 JFlash提示Could not find CFI complaint flash device错误
(2)在弹出的Project setting窗口中选择MCU选项的Device后面的三个点,选择对应的MCU型号;三. 由此可见应该是JFALSH工程的芯片型号的选择与目标板的实际型号不一致导致的,所以要重新选择MCU型号。(1)点击options选项下的Project setting。(3)此时JFLASH窗口左侧可以正常显示出目标MCU的型号,(4)此时下载程序有可能仍然无法重新烧录,建议重新新建工程,新建工程最方便有效。
2025-01-03 09:59:24
1506
原创 IAR编译器报Error[Li005]:no definition for ‘‘ ‘‘
在使用项目中放开之前注释掉的代码,发现编译后一直报Error[Li005]: no definition for "App_Demm_Task" [referenced from D:\WORK\THCQ\UAZ\Code\Switch\UAZ_Switch_Encoder\IARProject\Debug\Obj\main.o] 故障,但发现能正常找到函数定义和声明并且在mian.c中也包含了头文件;如下图所示源文件是灰色的。博主亲测直接右击选择添加文件是没有用的,重新加载后图标仍然是灰色的。
2024-12-11 11:40:03
915
原创 RingBuffer循环缓冲区的应用
在项目中用到了编码器功能,编码器的报文发送周期是40ms,如果滚动编码器的速度过快就会出现丢帧的问题,为了解决该问题在代码中引入了Ring buffer。如上图所示,示波器抓取到编码器滚动了9次(该编码器一次边沿跳变认为是一次有效信号),CANoe检测到该编码器信号也发送了9次,没有出现丢帧的现象。
2024-11-29 14:20:50
520
原创 CDD文件制作
2.打开该软件,点击open选项,选择Vector Examples,选择Vector_UDS_2.5.0.cddt文件,并选择Expert View,之后点击open就自动打开了模板文件。12.进行诊断,在CANoe中点击Diagnostic Console,弹出如下窗口,在ECU Identification中进行软件版本号和供应商编码的读取。需要注意的是在制作CDD文件时,要选择CDDT后缀的模板,如选择CDD后缀的文件可能会导致有部分内容无法编辑。10.将编辑好的CDDT文件另存为CDD文件。
2024-11-20 13:19:37
1553
原创 CRC 应用实例
CRC J1850算法,网上有很多教程,大多都是讲解原理的,对于不关心原理的小伙伴,可以直接使用现成的代码段就好。使用CRC算法时,主要关心CRC的多项式,CRC的初始值,CRC的异或值,还有需要校验的数据,CRC的数据位宽。CRC多字节校验数据举例,带校验的数据是0x10和0xA0,代码段校验后的数据是0x15。如下图所示:需要CRC校验的数据时0xA0,代码段运算后的CRC数据是0xA1。验证方法,网上有很多CRC计算器,这里推荐一个比较好用的在线CRC计算器。
2024-11-14 10:19:23
397
原创 IAR将数据从0x00地址开始存放
单片机的0x00地址一般是主栈指针初始化地址,用户如需将数据存放到这部分地址中,需要将中断地址重新配置,有BOOT功能的项目一般都需要重新映射。首先将链接文件.icf 的Vector Table和Memory Regions根据需求重新配置,我这里改为了0x1000。第二步就是将SystemInit函数中重新映射中断向量地址;需要注意的时该地址要与上一步中修改的.icf数值保持一致。第三步之后就可以根据需要将数据保存在0x00~0x1000地址段的任意位置了。
2024-10-16 13:30:35
360
原创 IAR 关键字之root
用法举例:__root const uint8_t SW_Version[]@0x8000 = {'S','W','1','.','0','.','0','0'};定义了一个常量数组用于表示当前项目的软件版本,@0x8000用于指定该数组存放的位置,即从0x8000地址开始存放数组中的数据。即使该变量未被使用,也会被包含在代码内。可以看出在地址0x8000处存放的数据与代码中的SW_Version[]中的内容一致。可以看出在地址0x8000处存放的数据与代码中的SW_Version[]中的内容一致。
2024-09-04 15:16:26
633
原创 单片机软件复位
在软件复位期间,系统的各个部分需要进行一系列的重置和初始化操作,包括状态寄存器、外设寄存器等的清零。如果在复位操作期间,程序继续向下执行其他代码,则可能会导致不可预测的错误和异常情况。因此,通过在软件复位函数中使用一个无限循环,可以确保系统在复位期间停留在复位函数内部,直到复位操作完成。一旦复位操作完成,系统将重新启动,开始执行主程序中的代码。这样做的目的是为了避免在软件复位期间可能发生的意外情况,确保系统能够稳定地进行复位操作。函数,该函数用于设置软件复位的标志位,通知系统进行软件复位操作。
2024-09-03 14:50:03
760
原创 IAR 内置jlink版本与实际安装的jlink驱动版本不一致问题
根据该博客,将相关文件覆盖后,再次打开IAR发现仍无法识别芯片;后面发现是忘记执行下面这个JlinkDLLUpdater.exe程序。因为前面已经使用心得DLL文件覆盖Jlink安装路径下的DLL文件了。所以要手动执行这个文件,进行更新,用于匹配新的DLL文件。IAR更新内置JLink_iar jlink-优快云博客。双击弹出如下对话框,点击OK。请参考这位博主的博客更新。
2024-09-02 11:35:33
1707
原创 IAR编译器文件路径问题记录
2.通过手动选择文件的路径,或根据上下文规律将$PROJ_DIR$\Source\drv\Adc手动输入后再重新编译烧录到控制器中,功能正常。总结:IAR工程路径不对导致失常。上版程序的压缩包解压后路径与绝对路径不相符,导致也无法正常使用。导致程序可以正常编译,但功能失常,使用上版功能正常程序的压缩包解压后烧录进去功能也是异常的。背景描述:文件的路径问题导致程序烧录后,控制器功能异常。
2024-08-30 09:45:46
1030
原创 使用VScode编译下载keil工程
最近打算学习下STM32单片机,keil5的页面有点丑,所以想着使用VScode关联keil5以实现使用VScode开发STM32项目,在网上搜索相关教程,很容易实现,以下是搭建开发环境的步骤。步骤4:弹出如下对话框,将Keil的安装路径复制到下面的对话框中,第一个是C51,第二个是ARM根据自己的需要添加即可,我只用ARM所以只填写了一个。步骤3:安装完Keil Assistant插件后,点击扩展设置。步骤5:导入keil5工程,点击2图标,步骤7:点击编译后,提示无错误无警告。
2024-06-02 15:29:23
1881
4
原创 STM32外设初始化问题
2.如下图所示先开启RCC时钟,再对相应的GPIO进行初始化,能够正常点亮LED。1.如下图所示完GPIO后再开启RCC外设时钟,无法正常点亮LED。在初始化外设前必须先进行RCC的时钟初始化。在学习STM32时发现。,否则将无法正常配置外设功能。
2024-06-01 18:16:47
430
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅