
STM32F105RBT6 2025年 ROSH REACH 报告
STM32CubeMX 使用"FW_F1 V1.8.6"生成FreeRTOS代码缺少"freertos_mpool.h"?
你好,我的setting里面设置都没有问题。但是显示failed download cortexm3
STM32F103C8出現找不到'STM32100B_EVAL/stm32100b_eval.h' file not found
STM32的DCode bus是连接到bus matrix的吗?参考手册描述和图片是不符吗?
stm32f407无法配置定时器2为全部dma
请问大佬们,L433进入stop2模式还有874uA的电流,有什么排查的办法吗?
STM32F103TBU6 封装是VFQFPN36 将PD0和PD1配置成CAN不成功是什么原因
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
如果数据是局部变量,部分将堆栈适当调大点;
再就是注意数据访问时别越界了,注意数组边界和指针的有效性;
你可以把代码贴出来,这种发送时阻塞式发送的,应该不会进MemManage_Handler中断的
strcpy((char )g_ucCatStrBuff,"{'i':'"); for(i=0;i<24;i++) { uiD = 1<<i; if((g_uiLedDrv&uiD)==0) { strcat((char )g_ucCatStrBuff,"2");
} else { strcat((char )g_ucCatStrBuff,"1");
} } ProFun_Reback_Fun("1"); strcpy((char )g_ucCatSendTBuff,cSendHead); strcat((char )g_ucCatSendTBuff,cSendTopic1);
strcat((char )g_ucCatSendTBuff,(char)g_ucCatStrBuff);
strcat((char )g_ucCatSendTBuff,cSendEnd);
// strcpy((char )g_ucCatSendTBuff,cSendHead);//-----------test Cat_Send_Str((char )g_ucCatSendTBuff);
把Cat_Send_Str((char *)g_ucCatSendTBuff);这句去掉就不会出现异常中断,把g_ucCatSendTBuff 长度变小 也不会
void Cat_Send_Str(char *pStr) { unsigned short int usLen; unsigned short int i;
usLen = strlen(pStr);
for(i=0;i<usLen;i++) { g_ucCatSendBuff[i] = ((unsigned char )pStr+i); } g_ucCatSendBuff[usLen] = 0x0D; g_ucCatSendBuff[usLen+1] = 0x0a;
Cat_Send_Data(g_ucCatSendBuff,usLen+2); }
void Cat_Send_Data(unsigned char *p, unsigned short int len) { unsigned int usLen;
usLen = len<<4; HAL_UART_Transmit(&huart1, p,len,usLen);
}
strcpy((char )g_ucCatSendTBuff,cSendHead); strcat((char )g_ucCatSendTBuff,cSendTopic1);
strcat((char )g_ucCatSendTBuff,(char)g_ucCatStrBuff);
strcat((char *)g_ucCatSendTBuff,cSendEnd);
// strcpy((char )g_ucCatSendTBuff,cSendHead);//-----------test Cat_Send_Str((char )g_ucCatSendTBuff);
把Cat_Send_Str这条语句去掉就不会进入异常中断, 而且把g_ucCatSendTBuff的长度变短也不会进入异常中断
/****
**/ void Cat_Send_Str(char *pStr) { unsigned short int usLen; unsigned short int i;
usLen = strlen(pStr);
for(i=0;i<usLen;i++) { g_ucCatSendBuff[i] = ((unsigned char )pStr+i); } g_ucCatSendBuff[usLen] = 0x0D; g_ucCatSendBuff[usLen+1] = 0x0a;
Cat_Send_Data(g_ucCatSendBuff,usLen+2); }
//**** // shanghai gankun // www.sensorground.com //designed by hank //All rights reserved //ÐÞ¸ÄÈÕÆÚ:2014/5/2 //°æ±¾£ºV1.0 //**** void Cat_Send_Data(unsigned char *p, unsigned short int len) { unsigned int usLen;
usLen = len<<4; HAL_UART_Transmit(&huart1, p,len,usLen);
}
多谢!最开始我也怀疑是数据越界,但是我用 R13 看是从那里跳到 异常中断的,尽然是定时器中断,
我把栈堆放大试一下
我数据都是全局变量,而且进入HAL_UART_Transmit 函数单步走就没事,直接运行就不行,我单独做了一个测试程序,直接发送大批量数据也没问题,真不知道问题出在那里
strcpy((char )g_ucCatSendTBuff,"hello"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait");
strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char )g_ucCatSendTBuff,"waitwaitwait"); strcat((char )g_ucCatSendTBuff,"123456789");
strcat((char *)g_ucCatSendTBuff,"waitwaitwait");
// strcpy((char )g_ucCatSendTBuff,cSendHead);//-----------test
Cat_Send_Str((char )g_ucCatSendTBuff);
[md]修改栈堆大小也不行
是其他地方内存越界了,谢谢!