我想通过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
检查过上位机发送的数据了,发送端正常。应该是接收端的问题吧,可是用的是正点原子自带的串口通信例程呀,为什莫例程就可以实现呢?
看接收端的接收中断,要求发送端的字符串必须以回车换行(0x0D、0x0A)结尾。
你抓一下自己发送端所发送的字符串是否符合这个要求。
可能需要改成
serial_write("24\n");//发送字符24
使用串口通信通过上位机给STM32发送数据并在TFT LCD上显示,为什么发送...
先用串口助手,抓一下上位机发出的内容,确认发送端是否正常。再检查你下位机接收端的串口接收程序,是不是有长度限制,是不是有特殊转码之类的。
stm32战舰开发板 485通信 上位机显示
一般遇到这种问题的原因有多种 1、数据发生移位(一般是PC的COM口配置有问题,比如说奇偶效验位,流控制,多少字节传输等等)2、传输线太长,或接口不稳定 3、波特率不对 4、或者是你STM32的时钟配置有问题,分频器配置小了等等 5、或者485的使能管教控制的不好,或者在接收中断中有延时(更甚着有逻...
STM32单片机如何处理QT上位机串口中发过来的数据?
单片机接收处理串口的数据的过程就是配置好波特率、位宽、校验位等,收到数据 后可以引起中断,也可以查询标志位,然后进行相应的处理。1) 串口时钟使能,GPIO 时钟使能。2) 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。3) GPIO 初始化设置:要设置模式为复用功能。4) 串口参数初始化:设置波特率,...
我想请教一个问题,就是我用stm32监测多个传感器信号,并且通过串口时时发 ...
由于你有多个传感器,所以要给各个传感器标号,才能区分开。串口发送数据可以一个字节一个字节的发,连续几个字节构成一个数据帧,为保证发送和接收数据明晰正确,建议你每个传感器发送一帧,数据结构可以是这样:帧头标志(用于区分各帧,1至2个字节)、传感器标号(1个字节)、传感器标号(1个字节)反码...
qt stm32上位机串口通信
1、首先,新建一个Qt项目:文件--新建文件。2、然后,点击-- choose。3、再然后,全部下一步到完成。4、成功建立一个Qt:Widgets Application。5、然后,新建一个管理SerialPort的类:右击项目名字--添加新文件--弹出。6、选择C++ Class。点击:choose--弹出如下框: 并填写--点击下一步---点击...
MCGS!和STM32单片机怎么通讯啊,各位大佬,求求你们,就是将单片机程序上的...
485电路直接接线链接这只是硬件部分啊,你接到单片机哪一组串口上就要对哪一组串口进行单片机的软件编程做串口配置以及收发处理。你为什么选择STM32单片机呢?从你问的问题来看很菜鸟啊,菜鸟最好用51单片机啊,不管是编程环境还是编程操作内容都很简单。用单片机和触摸屏或PLC通信我都做过,是要用modbus协议...
关于QT串口编程与单片机通信的问题,单片机为STM32
因为你获取到的是字符,转换成ascii后1是31,他再次帮你转换成了ascii 33,31 所以这里不能用toHex,可以尝试toNumber十进制 实际上QT使用串口的时候,直接open串口设备,write发送,事件触发接收更简单。单片机就没什么好说的了
stm32串口通讯是检测边沿还是电平
串口通信过程 STM32中UART参数 串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通讯双方的数据包格式要规约一致才能正常收发数据。STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置。UART串口...
stm32怎么通过printf发送数据到上位机
①如果你的上位机是电脑,那么需要一个USB转TTL,TTL端接STM32串口。②编写STM32串口驱动(这个很容易的,配置引脚和串口)③通过标准库的printf或自己编写printf与串口驱动对接。我以前做智能小车写了一份串口驱动,你可以自己看然后改一下:(或者可以用库函数,百度很容易找到,我不太喜欢库函数)\/**...
STM32串口发不出数据?
1.使用到的模块(1)康威电子STM32主控板(2)康威电子ADS1256 24Bit ADC(3)PC机:运行基于串口调试助手的上位机软件 host computer software2.想实现的目的单片机采集“指定数量(801条)”数据,通过串口反馈给PC机3.出现的问题一开始指定数量为41时,可以正常上传并且可以正常停止采集,但是一旦指定的数据量...