Forum: Mikrocontroller und Digitale Elektronik MSP430 Bluetooth Probleme mit Datenübertragung


von Martin (Gast)


Lesenswert?

Hallo liebes Forum,

ich mächte gerne meinen MSP430 mit einem HC-06 Bluetooth-Modul benutzen. 
Der Code ist unten angehängt.
Wenn ich mit meinem Smartphone über die App Bluetooth Terminal ein "A" 
sende, geht die LED an, aber es wird nicht zurück gesendet.
Reicht es nicht UCA0TXBUF = 0x41; zu schreiben? Muss man aktiv die 
Übertragung starten? Im Datenblatt finde ich noch, dass man ein Transmit 
Enable setzen soll (UTXEx) aber weder UTXE0 noch UCA0TXE kennt mein 
compiler.

Beste Grüße,
Martin
1
#include <msp430g2553.h>
2
#define TXD BIT2
3
#define RXD BIT1
4
unsigned char Rx_Data = 0;          // Byte received via UART
5
6
int main(void)
7
{
8
  /*** Set-up system clocks ***/
9
  WDTCTL = WDTPW + WDTHOLD;        // Stop WDT
10
  if (CALBC1_1MHZ == 0xFF)        // If calibration constant erased
11
  {
12
    while (1);                // do not load, trap CPU!
13
  }
14
  DCOCTL  = 0;              // Select lowest DCOx and MODx settings
15
  BCSCTL1 = CALBC1_1MHZ;          // Set DCO
16
  DCOCTL  = CALDCO_1MHZ;
17
  /*** Set-up GPIO ***/
18
  P2DIR = 0xFF;                           // All P2.x outputs
19
    P2OUT &= 0x00;                          // All P2.x reset
20
  P1SEL   = RXD + TXD;          // P1.1 = RXD, P1.2=TXD
21
  P1SEL2  = RXD + TXD;          // P1.1 = RXD, P1.2=TXD
22
  P1DIR  |= BIT0;              // P1.6 set as output
23
  P1OUT  &= ~BIT0;            // P1.0 set low
24
  
25
  /*** Set-up USCI A ***/
26
  UCA0CTL1 |= UCSSEL_2;          // SMCLK
27
  UCA0BR0   = 104;            // 1MHz 9600
28
  UCA0BR1   = 0;              // 1MHz 9600
29
  UCA0MCTL  = UCBRS0;            // Modulation UCBRSx = 1
30
  UCA0CTL1 &= ~UCSWRST;          // Initialize USCI state machine
31
  IE2      |= UCA0RXIE;          // Enable USCI_A0 RX interrupt
32
  __bis_SR_register(LPM0_bits + GIE);    // Enter LPM0, interrupts enabled
33
34
    while(1)
35
    {
36
        switch (Rx_Data)
37
        {
38
          case 0x41:              // ON Command
39
          while (!(IFG2&UCA0TXIFG));      // USCI_A0 TX buffer ready?
40
        UCA0TXBUF = 0x41;        // Send 8-bit character
41
        TA0CCTL0 &= ~CCIE;        // Disable Timer0_A interrupts
42
        P1SEL &= ~BIT6;          // P1.6 selected as GPIO
43
        P1OUT |= BIT6 + BIT0;      // P1.0 and P1.6 set high
44
      break;
45
46
        default: 
47
        break;
48
      }
49
    __bis_SR_register(LPM0_bits);  // Enter LPM0, interrupts enabled
50
    }
51
}
52
53
//  USCI A interrupt handler
54
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
55
    #pragma vector=USCIAB0RX_VECTOR
56
    __interrupt void USCI0RX_ISR(void)
57
#elif defined(__GNUC__)
58
    void __attribute__ ((interrupt(USCIAB0RX_VECTOR))) USCI0RX_ISR (void)
59
#else
60
    #error Compiler not supported!
61
#endif
62
63
{
64
  Rx_Data = UCA0RXBUF;          // Assign received byte to Rx_Data
65
  __bic_SR_register_on_exit(LPM0_bits);  // Wake-up CPU
66
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Martin schrieb:
> Im Datenblatt finde ich noch, dass man ein Transmit Enable setzen soll
> (UTXEx) aber weder UTXE0 noch UCA0TXE kennt mein compiler.

Du solltest Dir den passenden "Family User's Guide" und die passenden 
Sourcecodebeispiele ansehen, das Datenblatt selbst ist sehr knapp 
gehalten.


"MSP430x2xx Family User's Guide"
http://www.ti.com/lit/pdf/slau144

"MSP430G2x53, MSP430G2x33, MSP430G2x13, MSP430G2x03 Code Examples"
http://www.ti.com/lit/zip/slac485


In den Codebeispielen findest Du die Ansteuerung und Initialisierung der 
seriellen Schnittstelle (USCI_A) des 'G2553.

von Martin (Gast)


Lesenswert?

Cool danke! Jetzt bekomme ich es zumindest hin, dass irgendwas gesendet 
wird :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.