This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 串行端口 QUOT (&quot);Hello world&quot (&quot);带蓝牙设备

Guru**** 2342040 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1291179/serial-port-hello-world-with-bluetooth-device

您好!

我们一直在努力通过使用 AT 命令(串行命令)运行的蓝牙设备来实现"hello world"。    更令人尴尬的是、我们的代码已经在工作了、因为这已经是一款商业设备了。  由于淘汰、我们需要更新器件、但甚至无法单步执行代码来获取对我们使用原始(过时的蓝牙模块)发送的命令的响应。

我们知道已淘汰的 BT 模块(Microchip RN42)已正确配置、因为我们可以直接从计算机以115k 的波特率向其发送串行命令。  因此我们可以更改名称并将其置于命令模式(使用$$$)。  仅当它连接到 MSP430时、我们无法得到 响应

对于我们需要发送的第一个命令$$$(将其置于命令模式)、 下面的代码中以粗体显示了预期的响应。  基本上、当我们从微控制器发送命令$$$时、BT 模块应该 响应"end"。  但是、我们永远不会得到期望的字符。   

为调试该问题所做的工作。

    我们在 Code Composer Studio 中打开了一个 COM 端口,但我们可以得到一个 blip (没有任何更改)。  我们尝试 在终端中键入$$$字符、但仍然没有得到 响应。  

    ---当我们单步执行代码时,关键的"表达式"没有 改变到任何预期,尽管它们似乎发生了变化。  传输第一个$后的示例如下所示。

 

问题

  如何在 COM 端口终端中键入字符、以便将它们发送到远程蓝牙模块。  我是否只需键入下面显示的空格、但看不到键入的任何字符?

 另一个问题是、是否有更好的方法来捕获错误或导致此错误的原因?

void ATxBT (void){

//---------------------------------------------------------------
//此命令会使器件进入命令模式,返回"CMD"
重复= 1;
while (重复){
SendString ("$$$"、1);


void SendString (const char * s、int ATstate)
{
接收的易失性字符= 0;
Volatile uint32_t WaitCounter = 0;

无符号字符 g;

while (* s){
G=(*s++);
Transmit232(g);

WaitCounter = 0x00000000;
while (!((UCA1IFG&UCRXIFG)|((WaitCounter == 0xFFFFF))){
等待计数器++;

接收= UCA1RXBUF;//预期的"C、A 或 E"字符
如果(已接收='C'|已接收='A'|已接收='E'){
while (!(UCA1IFG&UCRXIFG));
接收= UCA1RXBUF;//预期的"M、O 或 N"字符
如果(已接收='M'|已接收='O'|已接收='N'){
while (!(UCA1IFG&UCRXIFG));
接收= UCA1RXBUF;//预期的"D"、K 或 D"字符
如果(已接收='D'|已接收='K'|已接收='D'){
重复= 0;


//读取最后一个字符响应
while (!((UCA1IFG&UCRXIFG)|((WaitCounter == 0xFFFFF)));
接收= UCA1RXBUF;
while (!((UCA1IFG&UCRXIFG)|((WaitCounter == 0xFFFFF)));
接收= UCA1RXBUF;

//将微控制器 UART 波特率更改为115K (默认为蓝牙)
if (WaitCounter == 0xFFFFF){

UCA1CTL1 |= UCSWRST;//**将状态机置于复位状态**
UCA1CTL1 |= UCSSEL_2;//波特率源 BRCLK = SMCLK

//配置115200波特率,带25MHz 系统时钟(SMLK)
// processors.wiki.ti.com/.../USCI_UART_Baud_Rate_Gen_Mode_Selection
UCA1BR0 = 217;// 115200
UCA1BR1 = 0;// 115200根据用户指南。
UCA1MCTL = UCBRS_0 + UCBRF_0;//调制 UCBRSx=0、UCBRFx=0

UCA1CTL1 &&~UCSWRST;//**初始化 USCI 状态机**
UCA1IE |= UCRXIE;//启用 USCI_A1 RX 中断

flagchangebaudrate = 1;
__delay_cycles (6000000);//延迟 UART 稳定

void Transmit232 (unsigned char CharToSend)
{
UCA1TXBUF = CharToSend;//加载具有 CharToSend 的缓冲区
while (!(UCA1IFG&UCTXIFG);//等待传输完成

非常感谢我们能够获得的任何帮助、  

谢谢!

吉姆

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不确定它是否与 MSP430或蓝牙器件相关、如果它与 PC 配合使用、我认为您可以捕获 UART 的波形、看看那里是否有任何不同。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    确实是时候把范围扩大了。