野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9090|回复: 0

关于串口数据接收处理问题

[复制链接]
发表于 2018-3-3 07:13:14 | 显示全部楼层 |阅读模式
昨天刚拿到秉火 F103 指南者这块板子,初学者想要做一个程序,是一个外部雷达模块通过异步串行接口输入位置信息, 然后经过判断触发不同的相应功能(蜂鸣器、LED)。位置信息格式如下:
0xff,0xff,0xff,0x**,0x**,0x00,0x00,0x00
前三组 0xff 是数据头,接下来的 0x** 是 16 位距离信息的高 8 位,第二个 0x** 是距离信息的低 8 位。共 16 位的二进制数据表示目标的距离,单位是 cm。接下来的三组 0x00 是数据尾。串口采用通讯格式为 1 位启始位,8 位数据位,1 为停止位,无奇偶校验。
然后我根据教程手册和教程的 Usart1 触发 LED 灯的程序更改了一下,主程序如下:

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_usart.h"
#include "./beep/bsp_beep.h"


void Delay(__IO u32 nCount);
uint16_t ucTemp1;
int main(void)
{        
USART_Config();        LED_GPIO_Config();
        BEEP_GPIO_Config();       
  int i=0;
  uint16_t a,b;
  while(1)
  {
        
   ucTemp1=USART_ReceiveData(DEBUG_USARTx);
        
   if(ucTemp1==0xff)
   {
     i++;
   }
   if(i==3)
   {
     a=(ucTemp1<< 8)&0xFF00;
   }
   if(i==4)
   {
      b=(ucTemp1&0xFF)|a;
      if(0x64<b&&b<0x2BC)
     {
      BEEP(ON);
      Delay(0x0FFFFF);        
      LED_RGBOFF;
     }
     else
     {
      BEEP(OFF);
      Delay(0x0FFFFF);        
      LED_RED;
      }
     i=0;
     }
   }
}
void Delay(__IO uint32_t nCount)         // 延时函数
{
   for(; nCount != 0; nCount--);
}

其中接收数据的函数是这样的:
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));

  /* Receive Data */
  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}
是不是有什么问题??
没有报错,但为什么最后运行起来没反应。。希望有大神能帮我看下。一点头绪也没有


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 16:04 , Processed in 0.027060 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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