- 博客(23)
- 收藏
- 关注
原创 stm32g070 hal Flash IAP 擦除错误,问题记录
总结:Flash 擦除需要清除SR register FLASH->SR = FLASH_SR_CLEAR;做一个项目时候,用G070 片子,以前测试时候,是好的,可能是跟新了cubMax,导致现在Flash擦除是坏的。定位到报错函数 FLASH_WaitForLastOperation() returning HAL_ERROR。发现是在HAL_FLASH_Unlock()后,需要清除SR寄存器。使用是标准Hal库文件,竟然会出现错误。加入上述代码后,问题故障解除。
2025-04-16 10:56:21
127
原创 STM32+FreeRTOS+CJSON 出现无输出,问题记录和解决
查资料,这种现象,是内存出现问题了,但是我是走FreeRTOs系统的,stm32 配置的 栈是不用的,内存申请使用的是FreeRTOs的内存管理,所以 Heap_Size EQU 0x200 还是默认值。后面发现,我的数据调用比较大,任务的栈空间,使用比较大,原来是256,发现就会出现卡死。最后发现问题出现在程序上面,我构建的csjon数组,出现问题,程序写错了。在项目种出现无输出现象,在程序里面调试发现,可以创建cjson,但是在输出时候,却没有数据,数据长度才是1。
2025-03-05 15:58:18
295
原创 HardFault_Handler硬件死机:在移植coreMark时候,调用portable_init(&(results[0].port), &argc, argv);前,死机
卡死原因在于 栈空间不够,在进入portable_init函数时候,前面ee_u8 stack_memblock[TOTAL_DATA_SIZE*MULTITHREAD];HardFault_Handler硬件死机:在移植coreMark时候,调用portable_init(&(results[0].port), &argc, argv);在教程文件中,也提到需要配置栈大小,只是没有标注中断,导致后面移植失败!解决方法:把栈大小改成0x2000以上大小,就可以运行了。平台:STM32G070CBt6。
2024-10-11 11:00:37
161
原创 问题记录:c 调用外接函数,获取结构体指针,失败,指针传参,会出现问题
调用代码,这里一开始怀疑是static 定义问题,用了静态变量和局部动态变量,分别调用函数,获取ID指针,结果都是失败。这个下面代码运行时候,获取 *data 返回BMS—ID指针,出错,但是返回数据大小正确!思考:代码中取结构体ID地址应该没有问题,现在出现这个问题,怀疑是编译器优化。1、外部接口函数,返回指针地址时候,尽量用返回方式,指针传参,会出现问题。但是 我这边是是修改调用函数,把指针返回,而不是用传参返回指针。运行结果,获取地址成功。
2024-09-12 11:43:59
242
原创 __set_FAULTMASK(1)的错误?
在进行STM32 软件复位函数中,keil编译器,一直报警告,查询发现__set_FAULTMASK 宏定义在 #include "cmsis_armcc.h"下面,但是编译器一直警告。这样问题解决,不在报警告!
2024-08-20 14:50:13
950
1
原创 【无标题】
1、硬件错误,主要原因在于数组越界!正常越界1-2位,是不会引发故障的!2、寄存器查找方法,需要注意主程序和栈程序。判断pc地址,在LR前还是后。在前是运行程序出错,错误代码在LR地址之前位置找;在后,是预处理时候就出错了,错误代码需要在LR地址往下找。3、串口数据接收时候,不但需要判断接收是否越界,也需要判断接收完成后,数据长度是否在合理范围了,就是判断长度界限,不能小于,不断大于。
2024-04-12 11:59:25
478
原创 STM32G070 IAP HAL 库 在线升级
在这之前写了STM32G070 hal Flash读写操作。在这个基础上,做个IAP在线升级。IAP升级方法有多种:1、双APP内存法:创建两个APP内存,一个升级,一个运行;2、BootLoader引导法:当程序升级时候,跳转到BootLoader去,进行升级。下面介绍双APP内存法,BootLoader引导法后面在写。提示:下面代码需要引用#include “./BSP/STMFLASH/stmflash.h”,在我上一个文章里面,连接。
2024-03-12 17:42:24
2221
4
原创 stm32g070 Flash HAL读写操作
1、G0系列的Flash是需要64位(8字节)写入的,不支持单字(32位)和半字(16位)写入。2、全系统每页Flash都是2kb大小。3、擦除flash只有2种方法:1是页擦除;2是全部擦除。4、flash的擦除和写入 都需要先解除flash锁,操作完就需要上锁。不上锁可能导致flash数据不安全!5、flash读取不分数据形式的,可以是1字节,也可以是2字节、4字节或者8字节形式。后续:后续在写如何进行STM32G070 在线升级IAP的教程!!!
2024-03-12 11:03:18
3347
5
原创 stm32 + freertos + c++混合编程方法
其他一些资料上面,c++配置成--cpp11或者-cpp 都是把工程配置成c++。三、添加cpp文件,我们调用cpp文件里面的接口函数,不需要修改main.c后缀名。2、配置工程编译时候是--c99,是因为工程里面FreeRTOS是c语言,c++模式会报错。我们这里是默认c,编写的c++文件,单独选择--cpp编译,这在后面配置!c++是面向对象编程,对于一些项目来说,c++编程更加合适!stm32cubemax配置,这里就不写了,配置资料比较多。这里就是让cpp文件在c++下编译。最后,编程成功,点亮!
2024-03-06 17:04:53
1855
1
原创 FreeRTOS 软件定时的使用
问题3:创建定时器中参数pxCallbackFunction,是定时器超时需要调用的函数,和定时器的回调函数(原型如下:void ATimerCallback( TimerHandle_t xTimer );如果中断退出后,当前任务就会被守护任务抢占,这里返回"*pxHigherPriorityTaskWoken = pdTRUE",就是告诉用户,你在中断任务中,可以做一些处理!答1:定时器的ID是用在:多个定时器超时调用一个函数,需要在调用函数里面读取当前超时定时器的ID,来确认是哪个定时器超时了。
2024-02-05 13:49:26
536
1
原创 stm32 hardfault_handler 故障 -结构体传地址
main函数代码如下,程序故障在tsp_BinaryTableSearch(AD_ntc,&(board_data.ad_ntc));//获取NTC电阻温度 里面。开发一个项目用到NTC电阻,在获取温度值时候,传入结构体地址,发现出错,出现硬件故障!函数单独使用没有问题,但是传递结构体board_data.ad_ntc,就出现问题!最终发现问题是我的结构体用了1字节对齐,在编译器自己对齐方式下,正常调用没有问题。tsp_BinaryTableSearch函数原型。
2024-01-15 14:41:22
478
原创 LVGL 内存使用
1、如果内存管理方面,出现问题,考虑可能是原子的内存管理问题(malloc.c )。去掉这个问题,重新编译就会正常!2、ccm内存,在配置时候超过 64k,也不会报错!可以问题就是编译器问题!后面这个使用时候,需要注意。这里记录一下。
2023-12-22 16:53:43
5957
原创 3.2TFT LCD 模块学习
写数据的地址就是使 FSMC_A10为 0 的其它任意地址。向这两个地址写的 16 进制数据会被直接送到数据线上,根据地址自动解析为命令或者数据,通过这样一个过程,我们就完成了用 FSMC 模拟 8080 并口的操作,最终完成对液晶控制器的控制。从上到下的扫描方式,那么设置好起始坐标(通过 SC, SP 设置)后,每写入一个颜色值, GRAM 地址将会自动自增 1(SC++),如果碰到 EC,则回到 SC,同时 SP++,一直到坐标: EC, EP 结束, 期间无需再次设置的坐标,从而大大提高写入速度!
2023-12-19 13:56:04
1305
1
原创 函数返回值问题
返回结果是len , +2的值,并不返回,这个语句是先返回后+2;在编程时候,出现返回函数字节数不对,后来发现返回值出现问题了,再次记录一下!是先 (len+2),再把结果返回。和 return (len+2);下面是函数代码,发送数组中增加帧头、CRC和帧尾。在使用函数返回值,语句return时候需要注意。
2023-09-24 11:38:59
82
1
原创 HAL库移植SPI程序出现报错..\..\Output\atk_f103.axf: Error: L6218E: Undefined symbol HAL_SPI_Ini
在stm32f1xx_hal_conf.h文件中已经定义了SPI文件。这里发现是库函数文件没有添加,下图库函数没有SPI库文件,添加库文件就可以了。出现这个原因是没有提到HAL_SPI_Init函数,是因为没有相应文件!移植正点原子的SPI出现报错!添加文件后,问题解决!
2023-09-15 13:39:22
3073
3
原创 stm32f103串口学习
串口学习,UASTR,SPI,IIC区别,串口是不带时钟同步的。spi是带片选接口。iic是不带片选接口,可以做到组网的通讯模式。串口通信是一种设备间常用的串行通信方式,串口按位( bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。
2023-06-09 11:46:44
1795
原创 USART_GetITStatus()和USART_GetFlagStatus()的区别
都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启,也会返回false。 ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint32_t USART_IT) 该函数不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。------串口中断函数中使用。 FlagStatus USART_GetFlagStatus(US
2023-06-09 10:33:19
1334
原创 C语言的格式输出 C语言中字符的作用:
这是C语言的格式输出,%c,%y这些代表你要输出的数据的数据类型;5、\xhh表示一个ASCII码用16进表示,其中hh是1到2个16进制数。长度格式符为h、l两种,h表示按短整型量输出,l表示按长整型量输出。7、%x, %X 表示输出无符号以十六进制表示的整数。8、%0 表示输出无符号以八进制表示的整数。9、%g表示输出自动选择合适的表示法。6、%e表示输出指数形式的浮点数。2、\f表示清屏并换页。2、%f 表示输出浮点数。3、%s表示输出 字符串。4、%c表示输出单个字符。5、%p表示输出指针的值。
2022-11-04 16:59:42
3510
转载 Linux常用(实用)命令大全
10、tar命令:该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压。1、cd命令:这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。5、mv命令:该命令用于移动文件、目录或更名,move之意,它的常用参数如下:-f 如果目标文件已经存在,不会询问而直接覆盖。tail -f /var/log/messages 实时查看被添加到一个文件中的内容。
2022-11-01 22:28:45
221
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人