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)数据丢失。
代码功底有待加强
回复: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也就是说移动了一位? 请问这是什么原因。每次复位的时候 返回的数据都是正确的。
RE:stm32 串口接收字符串的问题
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题回复:stm32 串口接收字符串的问题
回复第 13 楼 于2014-03-27 15:16:25发表:那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
回复:stm32 串口接收字符串的问题
回复第 14 楼 于2014-03-27 17:41:16发表:回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
用调试就可以看到收到的数据了,设置断点
RE:stm32 串口接收字符串的问题
固件库的参考代码里面有现成的啊,这部分程序可以参考那些的。RE:stm32 串口接收字符串的问题
NVIC_Configuration(); 没有声明,自然是进不了中断了
页:
1
[2]