- 博客(17)
- 收藏
- 关注
原创 中断冲突问题
1.在项目中使用UART打印log,串口发送功能异常;后面排查发现是中断发生了冲突,项目中CAN和UART中断优先级设置成相同,导致冲突。后面将UART优先级改小就正常了。2.在使用MCU的过程中,需要格外注意中断冲突,或DMA冲突问题。如果发现单独调试某个外设没有问题,一直到项目里就出现异常,可以往这方面考虑。
2025-03-25 14:05:17
104
原创 复旦微芯片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
220
原创 SAE J1850查表法的另一种实现方法,业内通用
汽车电子行业使用的CRC8校验通常是SAE J1850算法,通常使用查表法时,SAE J1850和 SAE J1850 ZERO使用的值表是同一个。
2025-03-03 15:09:19
174
原创 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
227
原创 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
625
原创 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
536
原创 RingBuffer循环缓冲区的应用
在项目中用到了编码器功能,编码器的报文发送周期是40ms,如果滚动编码器的速度过快就会出现丢帧的问题,为了解决该问题在代码中引入了Ring buffer。如上图所示,示波器抓取到编码器滚动了9次(该编码器一次边沿跳变认为是一次有效信号),CANoe检测到该编码器信号也发送了9次,没有出现丢帧的现象。
2024-11-29 14:20:50
436
原创 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
688
原创 CRC 应用实例
CRC J1850算法,网上有很多教程,大多都是讲解原理的,对于不关心原理的小伙伴,可以直接使用现成的代码段就好。使用CRC算法时,主要关心CRC的多项式,CRC的初始值,CRC的异或值,还有需要校验的数据,CRC的数据位宽。CRC多字节校验数据举例,带校验的数据是0x10和0xA0,代码段校验后的数据是0x15。如下图所示:需要CRC校验的数据时0xA0,代码段运算后的CRC数据是0xA1。验证方法,网上有很多CRC计算器,这里推荐一个比较好用的在线CRC计算器。
2024-11-14 10:19:23
259
原创 IAR将数据从0x00地址开始存放
单片机的0x00地址一般是主栈指针初始化地址,用户如需将数据存放到这部分地址中,需要将中断地址重新配置,有BOOT功能的项目一般都需要重新映射。首先将链接文件.icf 的Vector Table和Memory Regions根据需求重新配置,我这里改为了0x1000。第二步就是将SystemInit函数中重新映射中断向量地址;需要注意的时该地址要与上一步中修改的.icf数值保持一致。第三步之后就可以根据需要将数据保存在0x00~0x1000地址段的任意位置了。
2024-10-16 13:30:35
199
原创 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
458
原创 单片机软件复位
在软件复位期间,系统的各个部分需要进行一系列的重置和初始化操作,包括状态寄存器、外设寄存器等的清零。如果在复位操作期间,程序继续向下执行其他代码,则可能会导致不可预测的错误和异常情况。因此,通过在软件复位函数中使用一个无限循环,可以确保系统在复位期间停留在复位函数内部,直到复位操作完成。一旦复位操作完成,系统将重新启动,开始执行主程序中的代码。这样做的目的是为了避免在软件复位期间可能发生的意外情况,确保系统能够稳定地进行复位操作。函数,该函数用于设置软件复位的标志位,通知系统进行软件复位操作。
2024-09-03 14:50:03
633
原创 IAR 内置jlink版本与实际安装的jlink驱动版本不一致问题
根据该博客,将相关文件覆盖后,再次打开IAR发现仍无法识别芯片;后面发现是忘记执行下面这个JlinkDLLUpdater.exe程序。因为前面已经使用心得DLL文件覆盖Jlink安装路径下的DLL文件了。所以要手动执行这个文件,进行更新,用于匹配新的DLL文件。IAR更新内置JLink_iar jlink-优快云博客。双击弹出如下对话框,点击OK。请参考这位博主的博客更新。
2024-09-02 11:35:33
1038
原创 IAR编译器文件路径问题记录
2.通过手动选择文件的路径,或根据上下文规律将$PROJ_DIR$\Source\drv\Adc手动输入后再重新编译烧录到控制器中,功能正常。总结:IAR工程路径不对导致失常。上版程序的压缩包解压后路径与绝对路径不相符,导致也无法正常使用。导致程序可以正常编译,但功能失常,使用上版功能正常程序的压缩包解压后烧录进去功能也是异常的。背景描述:文件的路径问题导致程序烧录后,控制器功能异常。
2024-08-30 09:45:46
618
原创 使用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
1297
2
原创 STM32外设初始化问题
2.如下图所示先开启RCC时钟,再对相应的GPIO进行初始化,能够正常点亮LED。1.如下图所示完GPIO后再开启RCC外设时钟,无法正常点亮LED。在初始化外设前必须先进行RCC的时钟初始化。在学习STM32时发现。,否则将无法正常配置外设功能。
2024-06-01 18:16:47
309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人