找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1806|回复: 1
打印 上一主题 下一主题
收起左侧

STM32 CAN总线发送温度数据,数据格式问题

[复制链接]
跳转到指定楼层
楼主
ID:695754 发表于 2020-2-20 18:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在下新人,现在试着做一个基于STM32,用CAN总线将ds18b20温度传感器测得的温度数据通过CAN总线传给上位机的设计。先试着把传感器数据显示在OLED屏上,这没什么难度。然后我试着用回环模式模拟CAN总线的通信,遇到了问题。
DS18b20传感器的卖家(正点原子)提供了ds18b20的驱动程序,输出的数据是有符号short类型的;

short DS18B20_Get_Temp(void)
{
    u8 temp;                              //定义无符号char变量temp TL TH
    u8 TL,TH;               
        short tem;                        //定义short变量tem

.......
        if(temp)return tem;                 //转换,读取温度值
        else return -tem;   

}

但是CAN总线的收发程序使用指针读取/写入一个u8类型(无符号char)的数据(该数据为缓存区?)

u8 CAN_Tx_Msg(u32 id,u8 ide,u8 rtr,u8 len,u8 *dat)
void CAN_Rx_Msg(u8 fifox,u32 *id,u8 *ide,u8 *rtr,u8 *len,u8 *dat)
u8 CAN_Send_Msg(u8* msg,u8 len)
u8 CAN_Receive_Msg(u8 *buf)

我翻了stm32f10x_can.h也没找到使用其他数据类型的收发函数,也就是说我能力范围内CAN总线只能用u8类型数据通信了。
ds18b20输出的short数据类型没办法直接通过CAN总线传输,我试着把它转换成u8,

u8 sendmid;                             //定义无符号char变量sendmid ,rcvmid
u8 rcvmid;
short temperature;                    //定义short变量temperature
temperature=DS18B20_Get_Temp();              //将传感器测得的温度值赋给temperature
OLED_ShowNum(0+16,16,temperature/10,2,16);        //显示正数部分
OLED_ShowNum(0+16+32,16,temperature%10,2,16);        //显示小数部分

......
sendmid=temperature;                                  //将temperature的值赋给sendmid
OLED_ShowNum(50,32,sendmid,8,16);           //显示发送出的数据
CAN_Send_Msg(&sendmid,8);//发送8个字节    //CAN总线发送数据
......
CAN_Receive_Msg(&rcvmid);                         //CAN总线接收数据
OLED_ShowNum(40,48,rcvmid,8,16);             //显示收到的数据

这样倒也ping通了,send和rcv的数据是一致的,这两个数也是跟着测得的温度值变化的——温度升高,这两个数变大;温度下降,这两个数减小。
但是温度的测量值是271的时候(ds18b20以整数方式输出数据,最低位为0.1度),这两个数据却只有14的数值,而且和温度数据在数值上找不到什么稳定的数量关系,仅仅变化趋势一致。。。。。。

我想可能是数据从short数据类型转换成无符号char数据的过程中出现了精度损失?那我该怎么设计程序才能把温度的测量值(-550——+1250的整数)通过CAN总线传输到上位机,或者至少能通过回环模式传输?

麻烦各位大神解答了,谢谢。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:695754 发表于 2020-2-23 14:49 | 只看该作者
通过移位操作解决了问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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