问题如下,特别奇怪,百思不得其解,求高手指点一二,谢谢。
主要功能就是串口接收字符串,并发送字符串中以‘@’开头和以‘#’结尾之间的字符串。
1、当调整USART_Rx_Buffer[4096]数组个数时会出现问题,当大于4096(具体没测试,换成32768肯定出问题)时,运行程序会卡在HardFault_Handler中断。
网上查了下,只知道局部变量会进堆栈,且受到Stack_Size EQU 0x00000400的限制,但是我声明的是全局变量,应该不会存在类似问题啊,但是问题还是发生了,也就是说全局变量数组的个数还是有上限的,请问怎么计算,或者查找?
亦或者是其他问题造成的硬件HardFault_Handler中断?
请问怎么解决?
2、目前程序功能是实现了,问题是,当发送字符串大于估计有25+左右字符的时候,发送几次就停止了……我串口助手那端设置的自动循环发送……
当发送字符数较小的字符串时,一点问题没有……很奇怪,不知道是什么问题造成的?
请问如何解决?
3、看了一些资料说
STM32的USART有一个中断bug,请问是否值得是ore溢出的标志位bug,如果是请问怎么在代码上做修改,谢谢。
请问2的问题是否是因为这个问题产生的呢?目前只能瞎猜了……
诚心请教!
#include "stm32f10x.h"
#include "usart1.h"
#include
u8 USART_State = 0;
uint16_t Uart1_Len;
unsigned char USART_Rx_Buffer[4096]; //串口接收数据缓冲区
unsigned char USART_Tx_Buffer[4096]; //串口发送数据缓冲区
uint16_t temp_Counter = 0;
uint16_t Rx_Counter = 0;
/*
* 函数名:main
* 描述 :主函数
* 输入 :无
* 输出 :无
*/
int main(void)
{
/* USART1 config 115200 8-N-1 */
USART1_Config();
NVIC_Configura
tion();
printf("
请开始输入字符串开始,#结束
");
while(1)
{
if( USART_State )
{
printf("%s
",USART_Tx_Buffer);
USART_State = 0;
Rx_Counter = 0;
temp_Counter = 0;
}
}
}
void USART1_IRQHandler(void)
{
u8 i;
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //中断产生
{
USART_Rx_Buffer[Rx_Counter] = USART_ReceiveData(USART1);
if(USART_Rx_Buffer[Rx_Counter] == '@') //头
temp_Counter = Rx_Counter;
if((USART_Rx_Buffer[temp_Counter] == '@')&&(USART_Rx_Buffer[Rx_Counter] == '#')) //检测到头的情况下检测到尾
{
Uart1_Len = Rx_Counter - temp_Counter - 1; //长度
memset(USART_Tx_Buffer,0,sizeof(USART_Tx_Buffer)); //清空串口发送寄存器
<span style="font-size: larger;"> for(i=0,temp_Counter+=1; i
2、能不能把你发送的数据贴出来一下。串口中i是一个8位的变量,这个会不会有影响?
一周热门 更多>