如题,想通过串口发送字符串存在数组里面,然后在串口助手上打印出来,一开始计数值没有清零导致数据总是会被覆盖,调试了好久终于搞定,但是我在仿真窗口
观察数组数据发现了问题,数据并没有存放在数组里面,而是每个字符轮流存在了数组首地址,而且打印数组大小的确只有首地址有,这样子本来是要对数据进一步
处理的现在没法进行,向诸位请教下,问题出在哪里?代码如下,貌似count++,没有什么作用
[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
u8 RxSize=0,RxCount=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
RxBuf[RxCount++] = USART_ReceiveData(USART1);
}
RxSize=RxCount;
USART_ClearFlag(USART1,USART_FLAG_TC);
for(RxCount=0;RxCount<RxSize;RxCount++)
printf("%c",RxBuf[RxCount]);
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
我觉得这不是有关串口的问题,而是有关C语言基础的问题...
---------------------------------
恩,C语言是学的不怎么好,后来想了想。的确程序逻辑上是有问题,但是好像硬件上也不对,向串口发送字符串的时候,串口是接收到一个字符就进入一次中断,那么字符串末尾的 还发不发过去呢,后来我修改了程序,对 检测,作为字符串接收完成标志,发现进不去,好像并不会发送 ,所以需要自己定义一个帧尾的识别符。修改程序如下
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
RxBuf[RxCount]=USART_ReceiveData(USART1);
}
if(RxBuf[RxCount]==' ')
{
RxSize=RxCount;
printf("RxCount=%d ",RxCount);
RxCount=0;
// printf("RxCount=%d ",RxCount);
printf("RxSize=%d ",RxSize);
}
else
{
// printf("RxCount=%d ",RxCount);
RxCount+=1;
}
所以现在想请教下,向串口发送字符串的时候, 会不会发过去?
---------------------------------
用串口调试助手,一般后边都会添加 ,你用这个作帧尾标识符,如果你自己写的发送程序,你想发什么就发什么;
另外你程序里判断接收到空格是什么情况?
一周热门 更多>