C
文章平均质量分 53
有意思科技
Just Do it!
心存梦想,脚踏实地
展开
-
STM 32 HAL库 内部FLash读写调试的问题
分析:首先确认,先写入其他参数,再写入版本号,读取Flash,版本号完整无误,写入版本号后,再写入其他参数,版本呢号最后几位丢失;所以,怀疑是写其他参数的时候有问题。我的参数写入流程是:先读取Flash中所有参数值到内存,再修改对应位置参数值,再全部写入随后,我将写操作屏蔽,仅在确认了版本号无误后,读取,发现,版本号最后几位丢失,检查读取代码,发现读取时的长度不对,没有将版本号最后几位读取到内存中,导致写入的时候,不是Flash中原来的值。解决:修改读取所有参数时的长度。原创 2024-03-08 14:46:27 · 449 阅读 · 0 评论 -
STM 32 HAL库 UART 调试的问题
分析: Debug发现,最终没有进入串口中断函数。于是,检查Stm32CubeMX 的工程配置两个串口的全局中断没有使能。解决:勾选上图中红框部分,查看生成的stm32g0xx_it.h ,已经有对应中断函数的定义了还要在stm32g0xx_it.c 中屏蔽生成的 中断函数实现,并在自己的代码里实现中断函数。原创 2024-03-05 13:06:46 · 362 阅读 · 0 评论 -
STM 32 SPI 调试的问题
最终发现,我使用正点原子的 sysytick 延时函数delay_us, 与这里用于计算超时的sysytick有冲突如,具体冲突原因,未知。最后去掉delay_us函数,延时改为使用timer 去做,发现HAL_SPI_Receive能够正常返回。刚开始HAL_SPI_Receive,执行到这句时,一直卡在这里不在往下执行。但是函数能返回,却一直报超时,于是使用逻辑分析仪采集SPI的数据,发现CLK仅有一个脉冲。检查SPI代码,发现SPI使用的是2分频,怀疑是否是波特率过快,导致CLK有问题。原创 2024-01-25 10:10:30 · 406 阅读 · 0 评论 -
EasyFlash移植使用- 关于单片机 BootLoader和APP均使用的情况
但是完成移植后,却出现了不可预料的错误,在获取ENV的Flash结尾地址是,一直出错,调试答应出来的结尾地址为0xfffffff00,明显是个不正常的值。目前,我的STM32单片机,需要在BootLoader和APP均移植使用EasyFlash,用于参数管理和IAP升级使用。BootLoader中移植EasyFlash使用旧版本,因为4.0以前版本,Flash占用少,RAM占用多。所以将BootLoader和APP保持相同的版本,BootLoader跳转到APP就正常了,一切都很美好的执行了下去。原创 2023-10-30 19:58:50 · 527 阅读 · 0 评论 -
EasyFlash移植关于RAM和Flash占用
因为需要升级和存取参数到片内Flash中,将EasyFlashy 4.0版本 移植到STM32F103的裸机程序中,但我的RAM只有20K,Flash也只有64K,最后编译出来的代码有30K左右,没法做APP 备份了。于是着手检查,哪里占用了如此多的Flash,最终发现EasyFlash的ef_env.c 居然占用了8k左右的Flash,我顿时惊了,我一共才那么点Flash。但同时它也提供旧版本的适配,即ef_env_legacy.c ,和 ef_env_legacy_wl.c(启用磨损平衡)原创 2023-10-27 13:32:17 · 193 阅读 · 0 评论 -
IAR - STM32工程,生成的可执行文件的疑惑
工程的配置中,link生成的是.out文件,但是其大小太大了,总共我的flash才64k,但文件大小有300多k,但在IAR能烧录成功,并成功跑起来,一切正常,有点搞不懂了,然后仔细研究了下。后来发现,是由于.out文件其中包含了debug的信息,所以非常大,最初IAR生成的文件应该是.sim格式的文件。还有在生成目录,有一个hex文件,其大小也比较大,最后在输出文件转换目录中,将其最后转换为bin文件,大小与.sim保持一致。修改之后,生成的文件如下。原创 2023-10-24 17:13:13 · 382 阅读 · 0 评论 -
C语言-----函数声明,调用 剖析
函数声明,调用,以及回调函数 如何实现原创 2022-08-31 15:18:31 · 150 阅读 · 0 评论