TI中文支持网
TI专业的中文技术问题搜集分享网站

利用MSP430G2553的UART串口的例程改的蓝丫程序没有响应

我现在想用msp430g2553做一个蓝牙遥控小车,但是在UART串口这里遇到了问题,我用手机蓝牙控制小车的软件输出的指令为ax,但是单片机上始终无法读取到指令下面是我UART EVENT程序的,这个程序只是个实验程序,我在手机上发送指令ax,使led1亮,我发wx,使led1灭。

/*
* UART_Event.c
* 功能:全面处理与上位机通信的相关事宜
* Created on: 2013-3-18
* Author: Administrator
*/
#include "MSP430G2553.h"
#include "UARt_Global.h"
#include "UART_FIFO.h"
#include "UART_Event.h"
//—–对于硬件有关的代码宏定义处理—–
#define LED1_ON P1DIR|=BIT0; P1OUT|=BIT0
#define LED1_OFF P1DIR|=BIT0; P1OUT&=~BIT0
#define LED2_ON P1DIR|=BIT6; P1OUT|=BIT6
#define LED2_OFF P1DIR|=BIT6; P1OUT&=~BIT6

void Command_match(); // 字符匹配命令函数
/******************************************************************************************************
* 名 称:UART_OnTx()
* 功 能:UART的Tx事件处理函数
* 入口参数:无
* 出口参数:无
* 说 明:Tx_FIFO里有数据就将数据移到Tx Buffer寄存器中去
* 范 例:无
******************************************************************************************************/
void UART_OnTx(void)
{
unsigned char Temp;
if(Tx_FIFO_DataNum>0)
{
Tx_FIFO_ReadChar(&Temp); //调用FIFO库函数
UCA0TXBUF= Temp;
}
}
/******************************************************************************************************
* 名 称:UART_OnRx()
* 功 能:UART的Rx事件处理函数
* 入口参数:无
* 出口参数:无
* 说 明:对接收到的数据,区别对待进行处理
* 范 例:无
******************************************************************************************************/
void UART_OnRx(void)
{
unsigned char Temp = 0;
Temp=UCA0RXBUF; // 预存下Tx Buffer数据
//—–首先必须回显屏幕—–
if(Temp == 0x78) //如果是回车
{
Tx_FIFO_WriteChar('\r');
Tx_FIFO_WriteChar('\n');
}

//—–回车后开始数据帧识别—–
if(Temp == 0x78) // 如果是回车,表明可以做个”了断“了
{
if(Rx_FIFO_DataNum > 0) //FIFO里有数据,则进行数据判断
{
Command_match(); //判断命令是什么
Rx_FIFO_Clear(); //清空FIFO
}

}
//—–退格键则要删除FIFO里一个数据—–
else if(Temp==0x08 || Temp==0x7f) //如果是退格键,则需要删除一个
{
if( Rx_FIFO_DataNum>0) //有数据才需要删,没有数据当然不用删
{
_disable_interrupts(); //操作FIFO时必须关中断
Rx_FIFO_DataNum–; //待读数据减1
if(Rx_FIFO_IndexW >0) //防止溢出
Rx_FIFO_IndexW–; //写指针退格
_enable_interrupts();
}
}
//—–既不是回车也不是退格,那就正常存命令数据—–
else
{
Rx_FIFO_WriteChar(Temp); //正常写FIFO
}
}
/******************************************************************************************************
* 名 称:UART_SendString()
* 功 能:用UART发送一个字符串
* 入口参数:*Ptr:字符串首地址
* 出口参数:无
* 说 明:字符串如果很长,超过Tx_FIFO长度,则会发生阻塞CPU
* 范 例:无
******************************************************************************************************/
void UART_SendString(const unsigned char *Ptr) //给上位机发送字符串
{
while(*Ptr)
{
Tx_FIFO_WriteChar(*Ptr++);
}

}
/******************************************************************************************************
* 名 称:Command_match()
* 功 能:对接收到的命令数据进行匹配,根据匹配结果控制LED并回显处理结果
* 入口参数:无
* 出口参数:无
* 说 明:共4种预先约定的命令字:LED1_ON,LED1_OFF,LED2_ON,LED2_OFF
* 范 例:无
******************************************************************************************************/
void Command_match() // 字符匹配命令
{
unsigned char Command_Num=0;

if((Rx_FIFO[0]==0x61)&&(Rx_FIFO[1]==0x78))
{
Command_Num=1;
}
if((Rx_FIFO[0]==0x77)&&(Rx_FIFO[1]==0x78))
{
Command_Num=2;
}
switch(Command_Num)
{
case 0:;break;

case 1: LED1_ON;;break;
case 2: LED1_OFF;;break;

default:break;
}
}

下面一步一步调试出现的状况FIFO的情况

shaoyi wu:

* 名 称:UART_OnRx()* 功 能:UART的Rx事件处理函数* 入口参数:无* 出口参数:无* 说 明:对接收到的数据,区别对待进行处理* 范 例:无******************************************************************************************************/void UART_OnRx(void){unsigned char Temp = 0;Temp=UCA0RXBUF; // 预存下Tx Buffer数据//—–首先必须回显屏幕—–if(Temp == 0x78) //如果是回车{Tx_FIFO_WriteChar('\r');Tx_FIFO_WriteChar('\n');}

//—–回车后开始数据帧识别—–if(Temp == 0x78) // 如果是回车,表明可以做个”了断“了{if(Rx_FIFO_DataNum > 0) //FIFO里有数据,则进行数据判断{Command_match(); //判断命令是什么Rx_FIFO_Clear(); //清空FIFO}

}//—–退格键则要删除FIFO里一个数据—–else if(Temp==0x08 || Temp==0x7f) //如果是退格键,则需要删除一个{if( Rx_FIFO_DataNum>0) //有数据才需要删,没有数据当然不用删{_disable_interrupts(); //操作FIFO时必须关中断Rx_FIFO_DataNum–; //待读数据减1if(Rx_FIFO_IndexW >0) //防止溢出Rx_FIFO_IndexW–; //写指针退格_enable_interrupts();}}//—–既不是回车也不是退格,那就正常存命令数据—–else{Rx_FIFO_WriteChar(Temp); //正常写FIFO}}

因为他是ax'翻译成ASCII码为 61 78        wx 翻译成77 78  我就把temp改为了78这样对吗?

Sheldon He:

回复 shaoyi wu:

我给你点小的检查建议吧:

首先你用手机控制用的是串口蓝牙模块吧?如果是请先给蓝牙模块到单片机处的TX和RX对接,看数据能否echo back。

之后,你再检查单片机串口的RXBUF能否收到数据。

PS我用CC2640和MSP430做过相似的东西,有什么不懂再问我吧

赞(0)
未经允许不得转载:TI中文支持网 » 利用MSP430G2553的UART串口的例程改的蓝丫程序没有响应
分享到: 更多 (0)