
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
STM32F103RCT6 定位孔 镂空,会影响使用吗?
HAL库1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死
L9663驱动开发
用rt_thread 环境编写,DAP-LINK 下载烧录,每一次空芯片下载之后就无法二次下载。求解
stm32cubemx F103芯片tim3 encoder模式pc6和pc7引脚,自动生成代码缺少gpio映射。
stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗
如果数据是局部变量,部分将堆栈适当调大点;
再就是注意数据访问时别越界了,注意数组边界和指针的有效性;
你可以把代码贴出来,这种发送时阻塞式发送的,应该不会进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]修改栈堆大小也不行
是其他地方内存越界了,谢谢!