OpenEdv-开源电子网

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

蓝牙模块怎么才能发送0

[复制链接]

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
发表于 2016-1-7 15:45:55 | 显示全部楼层 |阅读模式
10金钱
手里的蓝牙4.0模块,cc2541,发送时使用printf函数,若用%d则会自动将-12345,转化成‘-’,‘1’,‘2’,‘3’,‘4’,‘5’,也就是发了5个字节。若用%x则会自动将-12345转化成‘f’,‘f’,‘f’,‘f’,‘c,‘f’,‘c’,‘7’,也就是8个字节。
而这款蓝牙模块最大发送速度是4KB/s,我采的数据是100Hz的九轴姿态数据,按照上面的发法,根本满足不了我的要求。所以取了%s,就是把-12345转化成一个高八位的字符和一个低八位的字符,这样表示一个数据只需要2个字节,速度就差不多够了。
现在的问题是蓝牙里自带51单片机,它不支持发送0X00,导致我所有高八位为0的数据全都不能用了。请问我有什么办法吗?

最佳答案

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

那是你printf函数的问题,你试试直接使用串口发送,不用printf
自在随心
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-1-7 15:45:56 | 显示全部楼层
yuzeyuan1 发表于 2016-1-7 15:54
我只是使用cc2541的蓝牙4.0串口模块,用的是stm32单片机。

那是你printf函数的问题,你试试直接使用串口发送,不用printf
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-1-7 15:50:33 | 显示全部楼层
你是直接在协议栈的基础上开发,还是使用cc2541的蓝牙4.0串口模块?
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
 楼主| 发表于 2016-1-7 15:53:41 | 显示全部楼层
我只是使用cc2541的蓝牙4.0串口模块,用的是stm32单片机。
自在随心
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
 楼主| 发表于 2016-1-7 15:54:02 | 显示全部楼层
小温 发表于 2016-1-7 15:50
你是直接在协议栈的基础上开发,还是使用cc2541的蓝牙4.0串口模块?


我只是使用cc2541的蓝牙4.0串口模块,用的是stm32单片机。
自在随心
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
 楼主| 发表于 2016-1-7 15:57:25 | 显示全部楼层
小温 发表于 2016-1-7 15:56
那是你printf函数的问题,你试试直接使用串口发送,不用printf

求教,怎么写,比如我要写一个u16的数据是-12345
自在随心
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-1-7 15:59:19 | 显示全部楼层
u16定义的变量是 unsigned short 型的,是无符号整型,而你的“-12345”,应该要定义一个short型的变量
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
 楼主| 发表于 2016-1-7 16:01:23 | 显示全部楼层
小温 发表于 2016-1-7 15:59
u16定义的变量是 unsigned short 型的,是无符号整型,而你的“-12345”,应该要定义一个short型的变量

这个对我来说无所谓,那发12345也行,只是我不知道还能怎么写,一直用的都是原子的例程,所以一直也都是printf。。。我需要怎么才能直接用串口呢,想不明白。
自在随心
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
 楼主| 发表于 2016-1-7 16:04:22 | 显示全部楼层
小温 发表于 2016-1-7 15:59
u16定义的变量是 unsigned short 型的,是无符号整型,而你的“-12345”,应该要定义一个short型的变量

说实话,这东西让我去百度,我都不知道应该怎么查。。
自在随心
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-1-7 16:06:03 | 显示全部楼层
printf打印貌似遇到字符0 的时候,会结束发送,所以,一般串口发送,我会自己写一个函数来发送:
uchar usart1_send_data(uchar *p_data,uint16 len)
{
    uint16 i = 0;
      
    if(p_data != NULL)
    {
        for(i = 0;i < len;i++)
        {
            USART_SendData(USART1, *(p_data+i));   
            while((USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)); //等待串口发送完成
        }
        
        return TRUE;
    }
   
    return FALSE;
}
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
 楼主| 发表于 2016-1-7 16:35:40 | 显示全部楼层
小温 发表于 2016-1-7 16:06
printf打印貌似遇到字符0 的时候,会结束发送,所以,一般串口发送,我会自己写一个函数来发送:
uchar us ...

多谢!成功了!
自在随心
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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