OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2326|回复: 1

串口问题,现在通过串口3向传感器发送指令,可以接收到返回的数据,但是内容偶尔正确。

[复制链接]

20

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2019-4-28
在线时间
80 小时
发表于 2019-8-20 09:23:53 | 显示全部楼层 |阅读模式
2金钱
f103战舰串口问题,现在通过串口3向传感器发送指令,可以接收到返回的数据,但是内容偶尔正确。是因为在发送后板子也接收到了自己的数据么,如果是怎么改呢,我现在只想要传感器返回的数据,不想要自己发送的数据。程序如下:
   #include "delay.h"
#include "sys.h"
#include "usart.h"          
#include "stdio.h"                  
#include "string.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"

#include "usart.h"

#include "usart3.h"                                  
#include "string.h"          



/************************************************
ALIENTEK战舰STM32开发板实验4
串口实验
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/

u8 duf[4]={0x55,0x09,0x1B,0xDB};


int main(void)
{               
        u8 t;  
        u16 len;       
        u8 key=1;
        delay_init();                     //延时函数初始化       
  LED_Init();         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        usart3_init(115200);         //串口初始化为115200
        while(1)
        {
                if(key==1)
                {
                        for(t=0;t<4;t++)                //循环发送数据
                        {       
                                while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);          
                                USART_SendData(USART3,duf[t]);
                        }         
                        for(t=0;t<4;t++)                //循环发送数据
                        {       
                                printf("%x ",duf[t]);
                        }       
                        printf("\r\n");
                        while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);       
      key=0;                       
                }
                if(USART3_RX_STA&0x8000)
                {       
                       
                                len=USART3_RX_STA&0x7fff;//得到此次接收到的数据长度
                                for(t=0;t<len;t++)                //循环发送数据
                                {       
                                        printf("%x ",USART3_RX_BUF[t]);
                                }
                                printf("\r\n");//插入换行
                                USART3_RX_STA=0;
                }

        }         
}
下图是串口助手显示的数据:55 9 1b db是发送的数据,正常接收的是40 40 7f,但是会有错误的03 fb 0f出现。望解答,谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-8-20 22:17:02 | 显示全部楼层
看下传感器的协议是什么样的,可以搜下传感器手册 “03 fb 0f”看有关于输出这种数据的解答不
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 10:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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