关于stm32UART串口发送数据的问题 5C

我想用stm32单片机的uart串口发送一个十进制的数据(例如adc转换的电压值)到上位机上面。请问怎么把一个十进制的数字发送出去,这个程序要怎么写。我查了一下资料,好像要发送的数据都要求是二进制的。求大佬

0

9个回答

把十进制的数转为字符就可以发出去了,或者吧十进制的数转为十六进制发出就可以,例如十进制的数超过U8 或者short

int num =65530;
unsigned char data[4]={0}
memcpy(data,&num,4);
上位机再处理一下就可以
int recevieNum=0;
unsgiend char receviceData[4];
memcpy(&recevieNum,receviceData,4);

1

把要发送的数用C库函数转换成十进制的数后,再把相应的函数用串口发送出去

1

根据其固件库参考代码,自己修改,再用串口助手模拟调试下。

0

传送数据时,是按位传送数据的。在接收端会自动按位接收数据。只要匹配好发送端和接收端的模式就可以了

0

串口发送的时候都是以ASCII形式发送的,如果想要传十进制数,就要写一个解析函数,比如要发123,就要先把123转化成字符(每次除以10求余),解析完成分别发送‘1’‘2’‘3’,到上位机在进行解析重新变成10进制数

0

串口发送一般以字符串的形式发送,所以可以把十进制的数先转换为字符。
char sbuf[512];
int data; //123
sprintf(sbuf,"%d",data); //123转换为“123”
Uart_send(sbuf);

0

stm用的是C语言,没有只有atoi, 没有 itoa(C++的stdlib.h).
有2个办法:
1: 如果你的usart支持printf(),可以用格式化输出
int i = 33.
printf("%d",i); // 输出是字符"33"
printfln("第一个数:%4d, 第二个数:%d", i, 55); //输出结果: 第一个数:33, 第二个数:55
printfln("十进制:%4d,十六进制:%x", i, i); //输出结果: 十进制: 33,十六进制:21 (十进制和33中间有2个空格,%4d,是4个位置)

"%" [index ":"] ["-"] [width] ["." prec] type

type: d 整数, u有符号整数(用这个有很大问题-2不会显示-2的). f 浮点 x十六进制
另外,整数和浮点前边可以加l 或 h ld 长整型 hd短整型

width: 显示的宽度, 是个数字
具体网上搜: c语言 format 或printf格式化

第2: 自己写个itoa int to ASCII编码

//反转字符串
char *reverse(char *s)
{
char temp;
char *p = s; //p指向s的头部
char *q = s; //q指向s的尾部
while(*q)
++q;
q--;
//交换移动指针,直到p和q交叉
while(q > p)
{
temp = *p;
*p++ = *q;
*q-- = temp;
}
return s;
}

/*

  • 功能:整数转换为字符串
  • char s[] 的作用是存储整数的每一位 */ char *m_itoa(int n) { int i = 0,isNegative = 0; static char s[100]; //必须为static变量,或者是全局变量 if((isNegative = n) < 0) //如果是负数,先转为正数 { n = -n; } do //从各位开始变为字符,直到最高位,最后应该反转 { s[i++] = n%10 + '0'; n = n/10; }while(n > 0); if(isNegative < 0) //如果是负数,补上负号 { s[i++] = '-'; } s[i] = '\0'; //最后加上字符串结束符 return reverse(s); // 顺序是反的,需要反序排列

}

main()
{
int i = 33;
char *str;
str = m_itoa(i); // str ="33"
printf(m_itoa(55));
}

0

本质上,单片机的数据都是二进制的呀,把十进制的10或十六进制的0x0a赋值给发送buff,在硬件上串口的TXD引脚都是发送00001010B的高低电平信号。
上位机接收到的也是这个数据,一般串口助手上都可以选择显示数据格式,可以是HEX或ASCII码,所以如果选择HEX显示,就要把要发送的数据转换成
BCD码,如把十进制的10转换成0x10再发送,网上这种转换程序很多;或者上位机显示ASCII码,那么要发送十进制10就转换成10+‘0’,即转换
成10的ASCII码发送就行了

0

你是想用单片机串口给上位机的串口终端发一个数据,并让它显示成10进制数吧?
那可以用标准库stdlib.h中转换函数itoa,大致代码如下:

#include "stdlib.h"
...

char *pbuff;
char databuff[4];

pbuff = itoa(AdcValue,databuff,10); /*AdcValue是你实际要发送的数据变量*/
UartSendString(pbuff);/*UART发送函数改成你自己的,参数为转换后的发送数据首地址*/

...

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
STM32 UART(接收 ,发送数据)
UART接收发送数据: 平台:STM32F401 discovery版 此代码用的UART6,TX,RX对应的PIN脚是PC6,PC7 如图: 代码如下: 步骤一:初始化串口的GPIO,USART,并且配置上UART的RX中断 void USART6_Config(void) { USART_InitTypeDef USART_InitStructure; NV
向STM32串口发送数据的标准函数
                                                                   向STM32串口发送数据的标准函数 例子:1 void UART_Send_Message(u8 *Data,u8 lenth) { while(lenth--) { USART_SendData(USART2, *Data); ...
STM32串口发送数据和接收数据方式总结
之前写了篇关于ESP8266使用AT指令进行互相通讯的实验,在写STM32串口接发数据的程序中,觉得有必要将之前学的有关于串口方面的使用经历加以总结。 串口发送数据: 1. 串口发送数据最直接的方式就是标准调用库函数。void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); 第一个参数是发送...
STM32开发笔记36: 串口不能正确发数的解决方法
单片机型号:STM32L053R8T6 今天这个问题一定要记录下来,使用485总线时,串口不能正确发送数据。串口的驱动程序已应用在多个实际项目中,自己并未认识到串口的驱动程序会有什么问题,而且在STM32F0芯片中,已经使用过了485,那时很是正常,所以这次问题的出现,倍感以外。 先说一下现象,使用485向计算机发数,计算机接到的全部都是0x00,开始怀疑很多问题,例如连线焊接等,一一排除,不...
stm32的UART串口通信
问题:  手上有一款AT91SAM9260的开发板。开发板上跑的是2.6版本内核的Linux系统,现在想通过UART来完成stm M0与开发板的通信。 一、关于AT91开发板上的UART相关知识都在我的上篇博客中说明:http://blog.csdn.net/qq_37474534/article/details/78405446 AT91部分的UART通信已经完成就绪: 二、stm M0的
stm32串口首次发送数据丢失
串口硬件复位后,首次发送数据丢失。
10、STM32的串口(UART)及串口通信原理(内附代码)
一、通信接口介绍 1、处理器与外部设备通信的两种方式: 并行通信 -传输原理:数据各个位同时传输。 -优点:速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输(一位一位传输)。 ...
STM32 串口的TXE和TX位说明
TXE是该寄存器为空,可以往里存放数据  TC是该寄存器中的数据已全部发送完成; http://www.openedv.com/posts/list/0/58919.htm https://wenku.baidu.com/view/fdae481db52acfc789ebc982.html
STM32串口发送数据第一个字节丢失问题
STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。
STM32串口寄存器操作
//USART.C /*********************************************************************************************************/ /* USART 收发 */ /* 陈鹏 20110611*/ #include "SYSTEM.H" #include "GPIO_INIT
基于51 单片机的串口收发数据
在进行串口的收发数据过程中一定要注意波特率的问题。 大多数51单片机用的都是11m晶振而只有少部分用的是奇葩的12m(楼主的就是),在12m晶振进行串口通信时切忌要将波特率设置为4800以下,应为12m晶振的波特率在9600以上误差很大容易丢失数据,动手能力强的可以折腾一下用定时器输出9600波特率。 至于,串口中断以及波特率的设置可以参考网上例子忒多。 在用串口助手进行串口收发数据时都会触...
STM32F767串口配置问题(UART、USART)
配置都一样。
STM32 --UART串口通信
UART串口时序UART串口协议
stm32 程序设计 第一章 USART发送 -阻塞和非阻塞
stm32单片机的串口在项目中占据重要的地位,这里指usart/uart。比如向上位机传输当前温湿度传感器的值等,一般采用串口比较简单,程序的调试开发中,串口也使用的多。现在以stm32f405平台为例,介绍串口1的发送代码构成。 1-GPIO的配置: GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph...
关于串口发送数据的问题
最近在开发串口相关程序,有一个SDK文档上写:rn向串口发送: 02 DC 03 06rn达到一定功能,文档还有例子是也可以发送 0x02,0x44,0x43,0x03,0x06 的写法也可以,那请问如果我想发送:rnEB 01 40 00 AArn的话,第二种写法是什么呢?rn
stm32串口发送16进制字符和16进制数的区别和具体实现方法
在调试一个stm32串口通信时,下位机设置好的发送方式采用串口助手接收后已经可以正常离线解包。但是由于需要实时解包并存储,因此写了一个实时解包存储的上位机,通信正常后接收的数据一直有误。经过单步调试,发现单片机发送的数据帧是字符串,并不是16进制数,而在线解包程序直接是对16进制数进行处理的,这就导致的比如16进制的数0xAA(170),下位机发送的是“AA"(字符串),上位机处理的16进制数是41 41(10进制为65*100+65)...
STM32学习之路(一---串口)
STM32的串口是MCU的重要外部接口,同时也是软件开发重要的调试手段。我学习的是库函数版本的程序的写法,所有的寄存器都是库函数配置的。 串口设置的一般步骤可以分为以下几个步骤: 1、串口时钟使能,GPIO时钟使能 2、串口的复位 3、GPIO端口模式的设置 4、串口参数的初始化 5、开启中断并且初始化NVIC(如果需要开启中断就要这个步骤) 6、使能串口 7、编写中断处理函数 上面几个步骤需要的...
c# 串口发送数据 c# 串口发送数据
c# 串口发送数据c# 串口发送数据c# 串口发送数据c# 串口发送数据
串口使用DMA发送数据时的数据覆盖问题
        在STM32等单片机中,为了提高程序的执行效率,在使用串口时,经常会使用DMA的方式来进行收发数据,这样,CPU只需要把数据放在发送缓存区即可离开。        但是,由于在串口发送中使用的是引用调用,即数据传递时是将要发送的指针进行传递,而非将数据复制了一份。这样的好处是方便快捷,但同时带来的一个后果时,当该数据还未发送完时,下一串数据就不能放入该发送缓冲区,否则,就会发生数据...
STM 32 UART串口通信基本原理
**处理器与外部设备通信的两种方式:** 并行通信 -传输原理:数据各个位同时传输 -优点: 速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输 -优点:占用引脚资源少 -缺点:速度相对较慢 **串行通信:** 按照数据传送方向,分为: 单工 :数据只支持在一个方向上传输; 半双工:允许数据在两个方向上传播,但是,在某一个时刻,只允许数据在一个方向上传输,它实际上是
串口通信的定时器实现方法
串口通信的定时器实现方法 之前使用了IO控制+软件延时的方法,模拟了串口的工作,更为重要的是了解了串口的工作原理.现在将使用定时器+中断来实现延时从而实现对延时更加精确的把控. 在这里首先提一下我们选择的定时器工作模式为 8位自动重装载 .因为避免了每次对定时器初始值的装载,所以时间也会相对准确些. 然后将提一下定时器初始值的计算方法.(这里以波特率BaudRate = 48
STM32自打包的UART串口通讯编程方法
    在对通讯时间要求比较高的时候,就需要自己对UART的通讯底层直接进行操作。我以STM32单片机为例,讲一下比较快速的UART编程方法。——其实不止是STM32这么处理,我以前使用过51的单片机,TI的MSP单片机,三菱的16位单片机,都可以采用这种方法。    基本的处理思路如下:    1. UART接收的处理方法        打开UART的接收中断,每收到一个字节就放到接收缓冲区,同...
串口调试心得:竟然是for循环惹的祸
在用COM口连接机器时,发送简单的命令和小文件都很OK的,可是在发送一个较大的文件时,出现了问题。 后面开COM口调试工具PORTMON进行跟踪,发现是机器回馈到COM口的数据包不正确,致使分析这个数据包时,得出了错误的结论,认为文件发送失败了。 于是开始思考是什么造成的?经过分析,问题锁定在文件的切包发送上(为了方便,直接用了for循环来发送文件的切包),难道是发送的太快,造成下端机
stm32串口发送数据出现问题
在用stm32向上位机发送串口数据的时候,发现发送的个数和上位机接收到的数据个数不匹配,后来发现是延时的问题,在发送的时候加个延时就可以了!
一个串口接收数据的代码
昨天自己写串口程序,弄了几个小时,接收数据老是出现问题。实在没有办法,在csdn上下了个程序,代码如下,居然通过了。baidu出来的代码都不行。还是专业的牛X呀。 void CSCommTestDlg::OnComm() { // TODO: Add your control notification handler code here VARIANT variant_inp; COleS
STM32F105串口USART3无法发送数据或数据错误问题
关于STM32系列例程网上有很多,但是大部分都是zhiji
STM32串口初始化
串口初始化的一般步骤: 1.GPIO时钟使能RCC_AHB 2.USART时钟使能RCC_APB 3.USART端口配置(调用GPIO_Init) 4.USART对应引脚复用映射GPIO_PinAFConfig 以PA9、PA10复用USART1为例,具体过程见代码: //关于时钟使能RCC函数名称的含义: //AHBx、APBx是总线名称 //寻找相关GPIO口对应的时钟使能函数的...
stm32串口DMA方式发送数据
该文档介绍stm32 串口1通过DMA方式发送数据,从RAM(Memory)中发送数据到uart1_tx端。 此处用到ucos-ii操作系统,定时1s通过DMA方式将数组内容发送到uart1_tx端,实现memory到peripheral的DMA数据传输。 DMA传输流程: 应用程序,1S初始化memory(数组)数据,配置DMA发送字节数,使能DMA发送数据,等待数据传输完成信号量 当DM
ARM开发(5)基于STM32的UART串口通信实验
基于STM32的UART串口通信实验 一 串口通信原理: 1.1 本实验实现串口助手发送数据然后回送在串口助手呈现出来。1.2 实验思路:看懂电路图,理解uart串口通信原理。1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 uart.h代码: #ifndef __USART_H #define __USART_H #include "stdio.h"
Linux下串口发送数据一段数据后发送不出去(可以正常接收)
Linux下串口发送数据一段数据后发送不出去(可以正常接收),在PC调试时一切正常,但是连接到别的板子上做数据透传时出现了这样的问题 解决办法:在串口初始化和波特率设置时将options结构体memset为0,但是不清楚真正的原因 static int set_speed(int fd, int speed) { int i; int status; struct ter
stm32串口程序
stm32串口程序(全)2012-04-13 00:00    困扰了我N就的串口问题终于在昨天下午解决了,那叫一个开心啊,哈哈。开心之余又有点沮丧,应为东拼西凑下来的程序,虽然跑通了,但是还有一些地方看不明白,算了,还是先记录下来,慢慢研究。    闲话少说,直接上代码吧,希望能帮到看到它的朋友,也希望您看了以后,能指点一二。    一、时钟定义:       void RCC_Configur...
c#串口发送数据
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Wi
STC12C5A60S2单片机串口1无法连续发送字符的问题
开发环境(蓝色粗体字为特别注意内容)1,开发板:STC12C5A60S2,串口1。在使用STC12C5A60S2串口1发送数据的时候,接收端无法收到完整的字符串,我的发送方式如下: UART_Send_Str(&quot;00&quot;); UART_Send_Byte(':'); UART_Put_Num(dat[0]); UART_Send_Byt...
串口通信 实时解析或发送串口的数据包
通过C#实现串口通信,里面的代码展示了如何监听计算机中的串口,解析数据或者发送数据,做串口开发的可以参考
STM32 UART串口驱动程序
文章原始地址: http://www.sheeptech.cc/?id=14 示例1.通过UART1进行数据发送 UART 1 的初始化 /** * @brief UART1 Initialise. * @param None. * @retval None. */ void UART1_Init(void) { GPIO_InitTypeDef GPIO_InitStru...
QT5串口编程 发送返回数据
Qt5 串口通信 发送接收 源码例程例程下载源码:源码下载  下面介绍源码:1. 添加到IntSertest.proQT       += serialport;如图所示:      2. MainWindow函数中添加:initSeialPort();如图: 3.在析构函数中添加:serial.close();如图:    3. 在mainwindow.h中 按照图示添加: (1)#includ...
STM32F4学习笔记5——stm32串口发送数据最高位错误问题
最近,在做基于stm32f401串口的ModBus协议通信,遇到了stm32串口发送数据的问题。花了一整天去查找问题,从ModBus协议格式、调度算法到串口配置,最终终于把问题解决,记录下来。         问题描述:         ModBus协议中配置stm32f401串口为奇校验,8位数据位,1位停止位,程序如下: void uart_init( u32 bound ) {
STM32串口+DMA发送数据程序卡死
硬件平台:STM32F411RET6 软件环境:IAR IDE for arm 8.30.1 问题现象:在使用串口+DMA发送数据时,调用发数函数之后,程序卡死,程序跑飞到0x8004e30。 问题解决: 1、定位到只要启动DMA程序就出现异常 2、因为icf文件设置的程序起始flash地址为0x8008000,但跑飞地址为0x8004e30 3、正常情况跑飞地址范围也是从0x8008...
(STM32)UART串口程序
int main(void) { u16 t; u16 len; u16 times=0; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化 KEY_Init(); //初始化与按键连接的硬件接口 while(1) { if(USART_RX_STA&0x8000;) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 printf("\r\n您发送的消息为:\r\n\r\n"); for(t=0;t<len;t++) { USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } printf("\r\n\r\n");//插入换行 USART_RX_STA=0; }else { times++; if(times 0==0)printf("请输入数据,以回车键结束\n"); if(times0==0)LED0=!LED0;//闪烁LED,提示系统正在运行. delay_ms(10); } } }
STM32F105的串口乱码问题
STM32F105的串口乱码问题我在调试STM32F105时,串口发送数据一致乱码,找来找去,原来问题还是出现在软件配置上。 然后我发现在文件stm32f10x.h中有这么一段代码。if !defined HSE_VALUE#ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /!< Value of the Exter
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算