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.

[参考译文] MSP430F5342:蓝牙模块所需的调试提示

Guru**** 2380860 points
Other Parts Discussed in Thread: MSP430F5342, MSP-FET
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1290153/msp430f5342-debugging-hints-needed-for-bluetooth-module

器件型号:MSP430F5342
主题中讨论的其他器件: MSP-FET

部件:  MSP430F5342

调试器: MSP-FET

IDE:   版本:7.4.0.00015

我们正在努力更新一种过时的蓝牙 IC、它通过来自 MSP430F5342的 AT 命令(串行命令)进行配置。    我们在运行调试模式时遇到问题、并且在进一步调试时获得有意义的结果。   我们的项目的主要功能如下:   

  •   ATxBT -要发送到蓝牙模块的数据配置
  •   SendString -调用传输、但也查找接收的 字符
  •   Transmit232 -发送数据

因此、在微控制器以 ATBT 方式发送$$后、  蓝牙微控制器应该会  从蓝牙模块接收三个响应中的一个 、每个响应分别是:  E-N-D、  A-O-K 或 C-M-D。   当我们将光标放在 IDE 中的变量"received"上时、它似乎一直为0、但是 UCA1RXBUF 似乎有一个值、并且它们不匹配。   Im 推测在我们达到该点后缓冲器将被填满。  但更重要的是,我们如何得到 一个简单的连续 asciii 字符。   我意识到有表、但必须有 更简单的东西。   感谢您的任何想法。 在调试模式下、我们获得的可能是"CMD"而不仅仅是"C"吗?

 所使用的功能如下


#include "Main.h"
#include "BluetoothAT.h"

字符重复= 0;
char flagchangebaudrate = 0;

//---------------------------------------------------------------
//此函数在命令时包含模块蓝牙的配置。
// AT 命令通过 UART 发送。
//---------------------------------------------------------------

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);//等待传输完成