使用串口通信通过上位机给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 展开
发送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 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询