wkuang 发表于 2014-3-25 22:35:50

RE:stm32 串口接收字符串的问题

if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)         
{
                uart1_buf = USART_ReceiveData(USART1);
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                if(count1 > 5)
               {
                   Flag = 1;
                  count1 = 0;
            }
                       
   }
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf,这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常;2)数据丢失。
代码功底有待加强

wuhong377 发表于 2014-3-26 15:34:35

回复:stm32 串口接收字符串的问题

回复第 11 楼 于2014-03-25 22:35:50发表:
if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)         
{
uart1_buf = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(count1 > 5)
{
Flag = 1;
count1 = 0;
}

}
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf,这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常;2)数据丢失。
代码功底有待加强
 
谢谢您的指导,我已经改了if(count1 > 4) 就是说接五个字节的数据了。这样子的时候,我串口助手发五个数据给单片机在返回,出现第一次返回的数据和发送的一致。但是第二次开始就不同了,如我发送的是 03 C8 C8 D7 96,手动发送的时候第二次开始就都是C8 C8 D7 96 96。 如果自动循环的发送 的话 后面稳定的返回数据是 C8 C8 D7 96 03也就是说移动了一位? 请问这是什么原因。每次复位的时候 返回的数据都是正确的。
 

有缘于你 发表于 2014-3-27 15:16:25

RE:stm32 串口接收字符串的问题

那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题

wuhong377 发表于 2014-3-27 17:41:16

回复:stm32 串口接收字符串的问题

回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
 
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
 

深秋独影 发表于 2014-3-30 19:28:18

回复:stm32 串口接收字符串的问题

回复第 14 楼 于2014-03-27 17:41:16发表:
回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
 
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
 用调试就可以看到收到的数据了,设置断点

 

dzc2001 发表于 2014-4-2 16:41:18

RE:stm32 串口接收字符串的问题

固件库的参考代码里面有现成的啊,这部分程序可以参考那些的。

feiante-155820 发表于 2014-4-12 21:41:40

RE:stm32 串口接收字符串的问题

NVIC_Configuration(); 没有声明,自然是进不了中断了
页: 1 [2]
查看完整版本: stm32 串口接收字符串的问题