注册 登录
查看: 881|回复: 15

[平衡组] 使用蓝牙串口(Uart4)通讯时可不可以使用Printf语句来发送数据到上位机?

[复制链接]
发表于 2014-3-18 21:07:09 | 显示全部楼层 |阅读模式
我们编码器采集速度时想通过蓝牙(Uart4)发送数据到上位机,用的是山外的FTM_正交解码的例程(其中使用Printf发送函数),所以在FIRE_MK60_conf.h中将【#define FIRE_PORT     UART3】修改为【#define FIRE_PORT    UART4】,但还是发现数据无法发送到上位机。
这是不是还要加什么协议之类的啊?

回复

使用道具 举报

发表于 2014-3-18 23:47:49 | 显示全部楼层
如果仅仅是串口通信,那是不需要加的,如果是你的上位机需要加协议,那就你自己根据自己的上位机来加
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-19 07:30:13 | 显示全部楼层
阙云亭 发表于 2014-3-18 23:47
如果仅仅是串口通信,那是不需要加的,如果是你的上位机需要加协议,那就你自己根据自己的上位机来加

这个上位机好像不需要协议吧,因为在无线调试器上(有USB转串口的线)是成功的,代码只是将Uart4改为Uart3,仅此而已。莫非这是蓝牙的问题?我弄了很久,没弄明白
回复 支持 反对

使用道具 举报

发表于 2014-3-19 08:59:31 | 显示全部楼层
你先用普通串口助手看看能不能收到数据   如果普通串口助手可以收到数据就是因为你发的时候没有按照你上位机的协议发数据,所以上位机没有接收到。如果普通的都不可以,你先检查一下你的硬件,你用的引脚是不是有UART4的功能,看看TX/RX有没有接反之类的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-19 09:06:43 | 显示全部楼层
♂荻夜 发表于 2014-3-19 08:59
你先用普通串口助手看看能不能收到数据   如果普通串口助手可以收到数据就是因为你发的时候没有按照你上位机 ...

蓝牙那块肯定是没问题的,因为根据直立调试指南通过上位机(虚拟示波器)显示波形是没有问题的,不过那程序是山外的例程(协议已写好)。到测试正交解码时用的上位机是【单片机多功能调试助手】中的【串口调试】,就是很普通的串口助手啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-19 09:12:15 | 显示全部楼层
♂荻夜 发表于 2014-3-19 08:59
你先用普通串口助手看看能不能收到数据   如果普通串口助手可以收到数据就是因为你发的时候没有按照你上位机 ...

蓝牙连接的引脚确实是Uart4的,根据直立指南学习时已做过实验,显示正常。我想不通的是,为什么在调试器上通过USB转串口一点问题都没有,只需把Uart4改为Uart3就可以了
回复 支持 反对

使用道具 举报

发表于 2014-3-19 09:18:31 | 显示全部楼层

/**********************************  UART   ***************************************/

//      模块通道    端口          可选范围                          建议
#define UART0_RX    PTD6        //PTA1、PTA15、PTB16、PTD6          PTA1不要用(与Jtag冲突)
#define UART0_TX    PTD7        //PTA2、PTA14、PTB17、PTD7          PTA2不要用(与Jtag冲突)

#define UART1_RX    PTC3        //PTC3、PTE1
#define UART1_TX    PTC4        //PTC4、PTE0

#define UART2_RX    PTD2        //PTD2
#define UART2_TX    PTD3        //PTD3

#define UART3_RX    PTC16       //PTB10、PTC16、PTE5
#define UART3_TX    PTC17       //PTB11、PTC17、PTE4

#define UART4_RX    PTE25       //PTC14、PTE25
#define UART4_TX    PTE24       //PTC15、PTE24

#define UART5_RX    PTE9        //PTD8、PTE9
#define UART5_TX    PTE8        //PTD9、PTE8
//-------------------------------------------------------------------
你看看你的蓝牙是不是接在K60的
#define UART4_RX    PTE25       //PTC14、PTE25
#define UART4_TX    PTE24       //PTC15、PTE24
这个引脚上

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-19 09:26:52 | 显示全部楼层
♂荻夜 发表于 2014-3-19 09:18
/**********************************  UART   ***************************************/

//      模 ...



我的是这样的:
#define UART4_RX    PTC14       //PTC14、PTE25
#define UART4_TX    PTC15       //PTC15、PTE24
因为我们用的是 UART4_RX    PTC14    UART4_TX    PTC15     

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-3-19 11:06:51 | 显示全部楼层
草原上的星星 发表于 2014-3-19 09:12
蓝牙连接的引脚确实是Uart4的,根据直立指南学习时已做过实验,显示正常。我想不通的是,为什么在调试器上 ...

你改动的内容都没错啊,没看到哪里有错误。
蓝牙通信,你试下把波特率改为9600 。(蓝牙通信,波特率高的话容易出现丢包)
回复 支持 反对

使用道具 举报

发表于 2014-3-19 11:07:44 | 显示全部楼层
没法发送到上位机,你可以测测单片机的TX管脚有没有波形,用示波器测
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-19 13:58:09 | 显示全部楼层
栾端静 发表于 2014-3-19 11:06
你改动的内容都没错啊,没看到哪里有错误。
蓝牙通信,你试下把波特率改为9600 。(蓝牙通信,波特率高的 ...

嗯,确实啊,你说的对!我照你说的把波特率改成9600后上位机就可以接收到数据了。
只不过出了点问题,就是数据是随机的,就算我不转动编码器,它也会有输出,这是为什么呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-3-19 14:00:47 | 显示全部楼层
草原上的星星 发表于 2014-3-19 13:58
嗯,确实啊,你说的对!我照你说的把波特率改成9600后上位机就可以接收到数据了。
只不过出了点问题,就 ...

示波器测测编码器的输出啊。

另外,山外哥提供的FTM2正交解码有bug,你修改了没?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-19 14:02:18 | 显示全部楼层
栾端静 发表于 2014-3-19 14:00
示波器测测编码器的输出啊。

另外,山外哥提供的FTM2正交解码有bug,你修改了没?

已经解决了,刚刚是误操作,哈,现在总算完美解决了(多亏了你的帮助,非常感谢)!你说的都非常对,好崇拜你的说。
回复 支持 反对

使用道具 举报

发表于 2014-3-19 14:11:07 | 显示全部楼层
草原上的星星 发表于 2014-3-19 14:02
已经解决了,刚刚是误操作,哈,现在总算完美解决了(多亏了你的帮助,非常感谢)!你说的都非常对,好崇 ...

呵呵,帮人的同时,直接也学到东西的。
山外哥论坛的淘贴里,很多资料值得去看的
回复 支持 反对

使用道具 举报

发表于 2014-12-13 02:19:44 | 显示全部楼层
栾端静 发表于 2014-3-19 14:11
呵呵,帮人的同时,直接也学到东西的。
山外哥论坛的淘贴里,很多资料值得去看的

#include "common.h"
#include "include.h"

void main()
{
    char ch;
    uart_init(UART4,115200);     //初始化串口(由于 printf 函数 所用的端口就是 UART3,已经初始化了,因此此处不需要再初始化)
    printf("\n山外初学123论坛:www.vcan123.com");
    uart_putstr(UART4 ,"\n\n\n接受数据,并进行发送:");         //发送字符串
    while(1)
    {
      if(uart_query(UART4)!= 0)  //查询是否接收到数据                              
        {
            uart_getchar(UART4,&ch);                               //等待接收一个数据,保存到 ch里
            uart_putchar(UART4, ch);                                //发送1个字节
        }
        if(uart_querychar(UART4, &ch) != 0)                        //查询接收1个字符
        {
            uart_putchar(UART4, ch);                                //发送1个字节
        }

        //注:上面两个 if 的实现功能都是一样的。

        //uart_getchar 和 uart_querychar 的区别在于 ,前者 需要等待接收到数据,后者查询是否接收到,接收到就接收,接收不到就退出
    }
}


我用蓝牙进行发送,也用UART4,但是发送数据,串口接收不到。。。这是什么问题?求助。。。

回复 支持 反对

使用道具 举报

发表于 2014-12-13 02:20:23 | 显示全部楼层
3119459734 发表于 2014-12-13 02:19
#include "common.h"
#include "include.h"

波特率改了之后也没用。。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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