野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10086|回复: 5

求助 串口接收字符串问题

[复制链接]
发表于 2016-4-22 17:20:13 | 显示全部楼层 |阅读模式
求助大神,我想通过串口接收一串数据,缓存至数组后统一处理,但是接收数据长度不确定,那我要怎么确定刚好接收完最后一个字节就处理数组呢?
回复

使用道具 举报

发表于 2016-4-22 22:17:24 | 显示全部楼层
首先要用数据头与数据尾,用数据头来做开始,判断数据尾结束。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-22 23:40:26 | 显示全部楼层
wqy_1000 发表于 2016-4-22 22:17
首先要用数据头与数据尾,用数据头来做开始,判断数据尾结束。

数据尾也不是特定的字符,那怎么确定接受到的那个数据就是最后一个 数据呢?
回复 支持 反对

使用道具 举报

发表于 2016-4-23 10:18:52 | 显示全部楼层
本帖最后由 suj 于 2016-4-23 10:22 编辑

//中断缓存串口数据
#define UART_BUFF_SIZE      50
volatile    uint8_t laser_pBuffer = 0;
uint8_t    GSM_usart_buf[UART_BUFF_SIZE];
void GSM_USART_IRQHandler(void)  //这是USART一收到字符就中断的函数
{
  if(GSM_pBuffer<UART_BUFF_SIZE)
  {
    if(USART_GetITStatus(laser_USART, USART_IT_RXNE) != RESET)
    {
        GSM_usart_buf[laser_pBuffer] = USART_ReceiveData(laser_USART);
        GSM_pBuffer++;
    }
  } //这里就是字符串接收完成的时候,可以写上你要的语句。
}
这是M4的GSM模块例程中的一段,功能是串口发信息给电脑时产生中断,进行处理。注意看判断语句  if(USART_GetITStatus(laser_USART, USART_IT_RXNE) != RESET) 这里就是判断电脑从串口接收的字符是否到底的。
我是直接用的这个中断例程,不太清楚更细的实现原理,不过应该已经能够解决你的问题了。
回复 支持 反对

使用道具 举报

发表于 2016-4-23 23:50:31 | 显示全部楼层
本帖最后由 wqy_1000 于 2016-4-24 00:06 编辑
hesuping 发表于 2016-4-22 23:40
数据尾也不是特定的字符,那怎么确定接受到的那个数据就是最后一个 数据呢?

可以利用STM32串口间隔中断来做数结尾。
回复 支持 反对

使用道具 举报

发表于 2016-4-24 00:06:18 | 显示全部楼层
suj 发表于 2016-4-23 10:18
//中断缓存串口数据
#define UART_BUFF_SIZE      50
volatile    uint8_t laser_pBuffer = 0;

可以利用STM32串口间隔中断来做数结尾。


  1. //若总线空闲,产生中断

  2.    USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);


  3. u8 DATA[255];
  4. u8 num = 0;

  5. void USART1_IRQHandler(void)
  6. {
  7.         if(USART_GetITStatus( USART1, USART_IT_RXNE) != RESET)
  8.         {
  9.                 DATA[num++] = USART_ReceiveData( USART1);
  10.         }
  11.         if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)//如果为空闲总线中断
  12.         {
  13.                 DMA_Cmd(DMA1_Channel5, DISABLE);//关闭DMA,防止处理其间有数据

  14.                 num = 0;
  15.                 //处理串口数据
  16.                
  17.         }
  18.        
  19. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 21:33 , Processed in 0.030580 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表