新手入门
- 积分
- 10
- 金钱
- 10
- 注册时间
- 2021-1-2
- 在线时间
- 6 小时
|
1金钱
代码的目的是:串口1发数据给单片机,然后存储在开辟的数组中 TEXT_Buffer[4096],存储满了之后从串口2输出数组中TEXT_Buffer[4096]的数据
在全速执行阶段 执行串口2输出 , 串口2输出字符只有45个,输出内容也是错误的。而且与单步执行输出不同 uu,ip62fmX,er W_iegdv8udB 5fBXuTiWrPt)edv*1 ,
进入调试模式,单布执行正确,没执行一步输出1个字符,而且输出字符与串口1发送字符一致
u8 TEXT_Buffer[4096]={0xff};
u32 i=0;
u32 res;
u16 t=0;
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
if(i<4095)
{
res=USART_ReceiveData (USART1);
TEXT_Buffer[i]=res;
i++;
}
else
{
res=USART_ReceiveData (USART1);
TEXT_Buffer[i]=res;
for(t=0;t<4096;t++)
{
USART_SendData(USART2,TEXT_Buffer[t]);
}
// W25QXX_Write((u8*)TEXT_Buffer,0,4096);
i=0;
}
}
}
|
最佳答案
查看完整内容[请看2#楼]
不能这么干 串口中断只能干很少的事情 例如收到的数存 内存 然后地址++
存满后 存flash是大循环要干的事情
原因很简单 你的中断程序都没跑完 下一个数据又来了 你的程序执行时间要小于 串口收到一个数的时间
|