使用串口通信通过上位机给STM32发送数据并在TFT LCD上显示,为什么发送的数据与接收到的不一致呢?

我想通过STM32的串口通信把上位机的数据发送给STM32,为了检验收到的数据是否与发送的一致,使用了LCD来显示接收到的数据,结果果真不一致。尝试过的数据发送与接收情况... 我想通过STM32的串口通信把上位机的数据发送给STM32,为了检验收到的数据是否与发送的一致,使用了LCD来显示接收到的数据,结果果真不一致。尝试过的数据发送与接收情况如下:
发送0,1,2,···8,9都显示13;如果发送10,01,02,03,···,08,09就分别显示48,49,50,···,57;发现接收到的都是所发送数据第二位对应的ASC2码。而且只识别第二位,比如发送25,253,254,255就都只显示5随对应的ASC2码:53。LCD屏的显示应该没问题,比如我在原来变量的位置直接显示一个固定的常量“2019”就可以正常显示。应该是串口通信的错吧,希望大家可以指点迷津,感激不尽!
上位机关键部分程序如下:
int main()
{
serial_open(_T("COM3"),9600); //打开COM3,波特率为9600
serial_write("24");//发送字符24
Serial_close();//关闭串口
system("pause");
return 0;
}

下位机主程序:
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "usart.h"
#include "sys.h"

u8 Res;
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(9600);
LED_Init();
LCD_Init();

POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,130,100,16,16,"depth1:");

while(1)
{

LCD_ShowxNum(120,130,Res,4,16,0);

LED1=!LED1; //LED1循环闪烁提示程序正在运行
delay_ms(300);
}
}

下位机串口接收"usart.h":
#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"

#define USART_REC_LEN 200 //定义最大接收字节数 200
#define EN_USART1_RX 1 //使能(1)/禁止(0)串口1接收

extern u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
extern u16 USART_RX_STA; //接收状态标记
extern u8 Res;
//如果想串口中断接收,请不要注释以下宏定义
void uart_init(u32 bound);
#endif
展开
 我来答
一剑出血
高粉答主

2019-12-26 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
先用串口助手,抓一下上位机发出的内容,确认发送端是否正常。
再检查你下位机接收端的串口接收程序,是不是有长度限制,是不是有特殊转码之类的。
追问

检查过上位机发送的数据了,发送端正常。应该是接收端的问题吧,可是用的是正点原子自带的串口通信例程呀,为什莫例程就可以实现呢?

   





追答
看接收端的接收中断,要求发送端的字符串必须以回车换行(0x0D、0x0A)结尾。
你抓一下自己发送端所发送的字符串是否符合这个要求。
可能需要改成
serial_write("24\n");//发送字符24
冷风口知识库
2019-12-27 · TA获得超过706个赞
知道小有建树答主
回答量:887
采纳率:88%
帮助的人:201万
展开全部
把你串口他接受函数贴出来看一下,很有可能是串口接受没处理好,导致漏数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式