OpenEdv-开源电子网

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

怎样将采集到的有符号位的数经串口调试助手发送到PC端

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-10-12
在线时间
1 小时
发表于 2019-1-12 10:32:20 | 显示全部楼层 |阅读模式
5金钱
现有采集的数据是有符号带小数的16进制数,我用显示屏显示出来了有符号带小数的十进制数,怎么用串口把有符号的数发送到电脑啊
        u8 acc_x[2];
        s16 acc_x_;
       float LIS3DSH_acceleration_x;
        acc_x[0]=Lis3dsh_ReadOnebite(0x28);//低八位数据
        acc_x[1]=Lis3dsh_ReadOnebite(0x29);//高八位数据
        acc_x_=(acc_x[1]<<8)+acc_x[0];//采集到的数据
        LIS3DSH_acceleration_x=1.0*acc_x_/32767*2;//量程转化,数据在-2到+2之间

下一步如何用串口将数据发送出去?
while(1)
        {       
        char buf[10];
        acc_x[0]=Lis3dsh_ReadOnebite(0x28);
        acc_x[1]=Lis3dsh_ReadOnebite(0x29);
        acc_x_=(acc_x[1]<<8)+acc_x[0];
        LIS3DSH_acceleration_x=1.0*acc_x_/32767*2;
        buf[0]=acc_x_;
        buf[1]=(acc_x_>>8);       

USART_SendData(USART3,buf[1]);
     while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==0){};
USART_SendData(USART3,buf[0]);
     while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==0){};

                }
        }          

   这样发送到串口调试助手的是十六进制数,我还是不能判断十进制数到底是多少  ,求解答,谢谢

最佳答案

查看完整内容[请看2#楼]

使用printf函数进行格式化打印啦,printf("%d",a);如果不懂,请百度printf的使用方法,这个一定要学会,还有sprintf。 你使用的是USART3,那要把printf映射到USART3。 原子例子就有。 [mw_shl_code=c,true]////////////////////////////////////////////////////////////////// //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_no_semihosting) //标准库需要的支持 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2017-5-20
在线时间
96 小时
发表于 2019-1-12 10:32:21 | 显示全部楼层
使用printf函数进行格式化打印啦,printf("%d",a);如果不懂,请百度printf的使用方法,这个一定要学会,还有sprintf。
你使用的是USART3,那要把printf映射到USART3。
原子例子就有。
[mw_shl_code=c,true]//////////////////////////////////////////////////////////////////
//加入以下代码,支持printf函数,而不需要选择use MicroLIB      
#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                 
struct __FILE
{
    int handle;

};

FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
    x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{      
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
    return ch;
}
#endif
[/mw_shl_code]
上面USART1改为USART3。
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-10-12
在线时间
1 小时
 楼主| 发表于 2019-1-12 10:35:32 | 显示全部楼层
我在网上搜的说可以用原子哥的printf函数,但掌握的不好,还是不会用
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2019-1-12 21:08:30 | 显示全部楼层
串口一般都默认发ascii码,自己上位机处理下就行了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 03:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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