发新帖我要提问
123
返回列表
打印
[STM32F1]

大家帮帮忙,关于串口数据处理问题的新人求助。

[复制链接]
楼主: mwj123
手机看帖
扫描二维码
随时随地手机跟帖
41
共地后,用示波器看,如果有波形证明有数据

使用特权

评论回复
42
mwj123|  楼主 | 2018-3-1 18:54 | 只看该作者
Lbsonggz 发表于 2018-3-1 13:35
1)参考雷达数据的波特率,数据位,停止位和奇偶校验位等,设置串口
2)建立一个数组,作为接收缓冲区
3)使能 ...

数组是10个还是8个呢,起始位和终止位算不算,最后字节设置变量计算接收完毕还是什么。我再研究一下。

使用特权

评论回复
43
kkzz| | 2018-3-1 22:49 | 只看该作者
mwj123 发表于 2018-3-1 07:13
标志位是本身数据就存在的吗,如果需要判断正负的话,我已经&上0x00FF取正了。 ...

以前做GPS识别的时候也这样。

使用特权

评论回复
44
hudi008| | 2018-3-1 22:49 | 只看该作者
mwj123 发表于 2018-3-1 07:13
您好可以具体说一下是哪方面吗?是要将数据编入数组判断吗

这个确实最简单的方式了。

使用特权

评论回复
45
lzmm| | 2018-3-1 22:50 | 只看该作者
biechedan 发表于 2018-2-28 21:43
你采用数组移位判断。

使用特权

评论回复
46
kkzz| | 2018-3-1 22:54 | 只看该作者
mwj123 发表于 2018-3-1 07:13
标志位是本身数据就存在的吗,如果需要判断正负的话,我已经&上0x00FF取正了。 ...

最后还是通过数组移位判断的。

使用特权

评论回复
47
hudi008| | 2018-3-1 22:54 | 只看该作者
mwj123 发表于 2018-3-1 07:13
您好可以具体说一下是哪方面吗?是要将数据编入数组判断吗

只使用三个数组移位,都是0xff进行判断。

使用特权

评论回复
48
lzmm| | 2018-3-1 22:54 | 只看该作者
biechedan 发表于 2018-2-28 21:43
你采用数组移位判断。

直接计算0xff个数也可以

使用特权

评论回复
49
xcvista| | 2018-3-2 11:03 | 只看该作者
建议你去看一下编译原理相关的书。这种输入协议处理本质上和编译是一致的。

使用特权

评论回复
50
mwj123|  楼主 | 2018-3-2 12:35 | 只看该作者
xcvista 发表于 2018-3-2 11:03
建议你去看一下编译原理相关的书。这种输入协议处理本质上和编译是一致的。 ...

好的我去看一下。。主要我只是临时要做个东西需要这个,之前没有系统学习过。

使用特权

评论回复
51
Lbsonggz| | 2018-3-2 15:41 | 只看该作者
本帖最后由 Lbsonggz 于 2018-3-2 15:50 编辑
mwj123 发表于 2018-3-1 18:54
数组是10个还是8个呢,起始位和终止位算不算,最后字节设置变量计算接收完毕还是什么。我再研究一下。 ...

10,可以使用的下标是0-9,0-8存放接到的雷达数据,最后一个存放结束标记'\0'。每次读取和处理完成之后,记得使用memset语句,清零这些数据给你一段我在项目中使用无数次的一段程序,基于Atmga16a

volatile unsigned char datarcv[10];  //千万不要少了volatile
volatile unsigned char k;

ISR(SIG_USART_RECV)
{
//while(!(UCSR1A&(1<<RXC1)));
  UCSRA |= _BV(RXC);
  loop_until_bit_is_set(UCSRA,RXC);
  tk = UDR;
  if(tk == 0xff) k=0;
    datarcv[k++]=tk;
  //string_out(datarcv);
  if(k==6)        或 if(tk==0xxx)// 接收完成一桢,0xxx表示最后一个字符
    rcvhandle=1;
}


主程序中
if(rcvhandle)
{
   你的语句;
   rcvhandle=0;
   memset(datarcv,'\0',10);
}

这样子可以把前面两个oxff忽略掉,直接从第三个oxff接收,足够了。剩余几个字符数组元素可以不用,不影响程序运行。

使用特权

评论回复
52
杨爱林林| | 2018-3-2 17:57 | 只看该作者
串口相关的帖子总是这么火

使用特权

评论回复
53
mwj123|  楼主 | 2018-3-3 07:10 | 只看该作者
Lbsonggz 发表于 2018-3-2 15:41
10,可以使用的下标是0-9,0-8存放接到的雷达数据,最后一个存放结束标记'\0'。每次读取和处理完成之后, ...

看不太懂tk  rxc都是怎么定义的,但还是谢谢您

使用特权

评论回复
54
Lbsonggz| | 2018-3-3 10:17 | 只看该作者
WinAVR 下有个avr 目录,里面include目录下有全部的AVR芯片的头文件。iom 16a.h就是atmega 16a 的头文件,内有寄存器和位定义

使用特权

评论回复
55
LianBinbing| | 2018-3-3 14:11 | 只看该作者
仿真看看呗!

使用特权

评论回复
56
mwj123|  楼主 | 2018-3-3 22:11 | 只看该作者
Lbsonggz 发表于 2018-3-1 13:35
1)参考雷达数据的波特率,数据位,停止位和奇偶校验位等,设置串口
2)建立一个数组,作为接收缓冲区
3)使能 ...

您好我的中断函数这么写可以吗,然后定义全局变量在主函数里判断
// 串口中断服务函数
void DEBUG_USART_IRQHandler(void)
{
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
        {               
                //--------------------以下为判断函数--------------
    uartTemp=USART_ReceiveData(DEBUG_USARTx);
        if(uartTemp==0xff)
          {
                i++;
          }
        if(uartTemp==0x00)
          {
                n++;
          }
               
   if(i==3)
          {
                 a=(uartTemp<< 8)&0xFF00;
          }
         if(i==4)
          {
                 b=(uartTemp&0xFF)|a;
          }
}                 
}
以下是主函数
extern uint8_t uartTemp[10];
extern uint16_t a,b;
extern int n,i;
int main(void)
{                USART_Config();
        LED_GPIO_Config();
        BEEP_GPIO_Config();       
while(1)
{ if((0x64<b&&b<0x2BC)||n==3)
                        {
                                BEEP( ON );
                                Delay(0x00000F);       
                                LED_RGBOFF;
                                n=0;
                                i=0;
                        }
                        else
                        {
                                BEEP( OFF );
                                Delay(0x00000F);       
                                LED_RED;               
                        }
}
}               

使用特权

评论回复
57
Lbsonggz| | 2018-3-3 22:56 | 只看该作者
在中断函数中设置一个接收完成标志位,主函数中判断这个标志位是否置位即可。处理完成之后,再清零这个标志位,准备下次接收。为稳定性考虑,在处理接收到的字符串时,要禁止串口的接收功能。否则,处理时再接收到数据,可能会出现死机问题。看中断函数,数据没有保存,接收到的数据帧不完整

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则