打印

高手进!USB的蓝牙适配器与8051F单片机连接应用问题

[复制链接]
4875|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
单片机实验板和蓝牙适配器(清华紫光25元一个)连接,用的是两头都是母口接口。如图:
基于HCI层协议,通过UART0向蓝牙发送reset指令:即 01 03 0C 00 按道理来说应该返回:040E0401030C00(指令完成)。但蓝牙模块没有任何反应。部分程序如下(串口初始化已经完成):我设置的串口通讯速率为9600bps,8位数据位,1位停止。

  void main (void) {
  PCA0MD &= ~0x40;                    // Disable Watchdog timer
   SYSTEMCLOCK_Init ();                // initialize oscillator
   PORT_Init ();                       // initialize crossbar and GPIO
  TH1 = -(SYSCLK/BAUDRATE0/2/12);
  CKCON &= ~0x0B;   
  SCON= 0x30;
   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;                       
   TR1 = 1;                            // START Timer1
   IP |= 0x10;                         // Make UART high priority
   TI0 = 0;
   ES0 = 1;                            // Enable UART0 interrupts
   SBUF0 = 0x01;
   while(!TI0);
   TI0 = 0;
   SBUF0 = 0x03;
   while(!TI0);
   TI0 = 0;
   SBUF0 = 0x0c;
   while(!TI0);
   TI0 = 0;
   SBUF0 = 0x00;
   while(!TI0);
   TI0 = 0;
   EA = 1;
   ES0 = 1;
   while (1);//等待返回命令
}
void SYSTEMCLOCK_Init (void)
{
   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency and enable
                                       // missing clock detector
   CLKMUL  = 0x00;                     // Select internal oscillator as
                                       // input to clock multiplier
   CLKMUL |= 0x80;                     // Enable clock multiplier
   Delay();                            // Delay for clock multiplier to begin
   CLKMUL |= 0xC0;                     // Initialize the clock multiplier
   Delay();                            // Delay for clock multiplier to begin
   while(!(CLKMUL & 0x20));            // Wait for multiplier to lock
   CLKSEL  = 0x03;                     // Select system clock
}

void PORT_Init (void)
{  
   XBR0 = 0x01;                        // route UART 0 to crossbar
   XBR2 = 0x01;                        // route UART 1 to crossbar
   XBR1 = 0x40;                        // enable crossbar
   P0MDOUT |= 0x11;                    // set P0.4 to push-pull output
   P0MDOUT |= 0x0f;
   P2MDOUT |= 0x04;                    // set LED to push-pull
   P2MDIN |= 0x0F;                     // Lower four pins on P2 are digital
   P2MDOUT = 0x0C;                     // enable LEDs as push-pull outputs
                                       // enable Switches as open-drain
   P2     |= 0x03;                     // Set port latches for P2.0
                                       // and P2.1 to '1'
}

请问是哪里出了问题?

相关帖子

沙发
宇容创行| | 2010-3-10 17:28 | 只看该作者
usb蓝牙是如何连到串口上的?

使用特权

评论回复
板凳
RUnewhand|  楼主 | 2010-3-11 10:09 | 只看该作者
单片机——用一个USB转串口线——接一个双头母口的USB接口——接蓝牙。行得通吗?我想是不是要用AT指令而不能直接发HCI指令?

使用特权

评论回复
地板
lxyppc| | 2010-3-11 10:22 | 只看该作者
行不通
说得简单点:
USB串口要5V电源,这个没有
蓝牙也要5V电源,这个也没有

复杂点:
USB和串口传输不一样,它是非对称,分为主机与从机,主机可以看作是电脑,从机就是各式各样的USB设备
从机只能与主机进行通讯,从机之间不能通讯(OTG看做主机)
你的系统中有一个蓝牙,这个是从机
USB转串口也是从机
它们之间不能直接通讯,需要一个主机

使用特权

评论回复
5
RUnewhand|  楼主 | 2010-3-11 12:47 | 只看该作者
谢谢,那么说我应该买一个直接用串口的蓝牙适配器喽?还有,不知道这种蓝牙适配器能用AT指令调试。呵呵

使用特权

评论回复
6
RUnewhand|  楼主 | 2010-3-11 12:48 | 只看该作者
本帖最后由 RUnewhand 于 2010-3-11 13:00 编辑

4# lxyppc

谢谢,那么说我现在只换一个直接用串口的蓝牙适配器也不行吗,如果单片机要做主机的话,需要怎样的端口配置?

使用特权

评论回复
7
lxyppc| | 2010-3-11 13:51 | 只看该作者
单片机用最好是买一个串口输出的适配器,如果换成串口的应该可以直接用单片机控制了
如果单片机要做USB主机要看这款单片机是否支持USB OTG
而USB OTG支持的设备也有限制,是否支持蓝牙设备要看具体情况

使用特权

评论回复
8
RUnewhand|  楼主 | 2010-3-11 15:45 | 只看该作者
:)明白了,谢谢啊!!这个问题困扰我三天,终于有解决了!

使用特权

评论回复
9
wswh2o| | 2010-3-11 16:53 | 只看该作者
笑死我了:L

使用特权

评论回复
10
wswh2o| | 2010-3-11 16:55 | 只看该作者
看到lz这么接还以为lz用的usb host的单片机,觉得好妞呀,进来一看还有usb转串口。
lz给你推荐一个南京国春做这个的

使用特权

评论回复
11
RUnewhand|  楼主 | 2010-3-16 22:33 | 只看该作者
现在问题又来了,如果我要用pc跟它连接,并产生一个虚拟的串口,应该如何调试?能不能直接发HCI层的指令,比如:复位“01 03 0C 00” 然后得到一个事件回复,这样。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

54

帖子

1

粉丝