Forum: Mikrocontroller und Digitale Elektronik Mit RS232 und msp430F5529 senden und empfangen


von Daniel (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade über eine RS232-Schnittstelle und meinen MSP430F5529 
eine Verbindung zum PC herzustellen. Leider will es mir noch nicht so 
richtig gelingen. Könnte mir da eventuell jemand behilflich sein?

Freundliche Grüße

von Daniel (Gast)


Lesenswert?

Anbei noch der von mir erstellte Code:
1
#include <msp430f5529.h>
2
3
unsigned char answer1[] = "Buchstabe ";
4
unsigned char answer2[] = " gedrueckt\r\n";
5
6
char i, j;
7
8
void main(void)
9
{
10
  WDTCTL = WDTPW + WDTHOLD;             
11
  P3SEL = 0x18;                            // P3.3 und P3.4 als USART0 TXD/RXD   
12
  P3DIR = 0x08;
13
  
14
  UCA0CTL0 = UCSWRST;             // SWRST setzen um Schnittstelle zu konfigurieren
15
  UCA0CTL0 |= CHAR;                        // 8 Data Bits, 1 Stop Bit, no parity (8N1)
16
  UCA0TCTL0 = UCSSEL_1 | UCA0TXEPT;        // ACLK als UCLK festlegen
17
  
18
  UCA0BR0 = 0x03;                          // 9600 baud aus 32.768 kHz erzeugen
19
  UCA0BR1 = 0x00;                          // siehe application note tabelle 2, seite 10
20
  UCA0MCTL = 0x4A;                         // Korrektur der Division
21
  UCA0ME |= UCA0TXDE0 + UCA0RXDE0;         // TX- und RX-Modul erstmal anschalten
22
  UCA0CTL0 &= ~UCSWRST;                    // USART freigeben
23
  UCA0IE |= UCRXIE + UCTXIE;               // TX- und RX-interrupts anschalten
24
  UCA0IFG &= ~UCTXIFG+UCRXIFG;             // initales interrupt-flag löschen
25
     
26
  _bis_SR_register(LPM0_bits + GIE);       // ab in den LPM0 mit interrupts ...
27
}
28
29
#pragma vector=USART0_A0_VECTOR
30
__interrupt void USART0_A0_TX (void)
31
{
32
  if (i < sizeof answer1-1)                // string schon zu ende?
33
    UCA0TXBUF = answer1[i++];              // string ausgeben
34
  else if (i == sizeof answer1-1)          // wenn erster string zu ende ...
35
    {
36
      UCA0TXBUF = UCA0RXBUF;               // ... dann den getippten buchstaben ausgeben
37
      i++;
38
    }
39
  else if (j < sizeof answer2-1)           // wenn auch der ausgegeben ist ...
40
    UCA0TXBUF = answer2[j++];              // ... dann den zweiten string ausgeben
41
}
42
43
#pragma vector=USART0_A0_VECTOR
44
__interrupt void USART0_A0_RX (void)
45
{
46
  i = 0;
47
  j = 0;
48
  UCA0TXBUF = answer1[i++];                // ersten buchstaben von answer1 ausgeben
49
}

Freundliche Grüße

von Jörg S. (joerg-s)


Lesenswert?

>Leider will es mir noch nicht so richtig gelingen.
Das bedeutet was genau? Empfängt er Daten? Sendet er Daten aber mit der 
Falschen Baudrate?

von Daniel (Gast)


Lesenswert?

Folgende Deklarationen lassen sich nicht definieren:
1
UCA0CTL0 |= CHAR;                        
2
3
UCA0TCTL0 = UCSSEL_1 | UCA0TXEPT; 
4
5
UCA0ME |= UCA0TXDE0 + UCA0RXDE0;  
6
7
#pragma vector=USART0_A0_VECTOR

Leider weiß ich nicht warum?
Aus diesem Grund konnte ich bis jetzt noch keinen Datenaustausch 
starten!

Gruß

von Daniel (Gast)


Lesenswert?

In erster Linie würde mich interessieren wie das mit der 8-Bit 
Übertragung zu verstehen ist?
Diese Zeile kann ich am aller wenigstens interpretieren!

1
UCA0CTL0 |= CHAR;

Nochmals vielen Dank für jede Hilfe...

Gruß Daniel

von Jörg S. (joerg-s)


Lesenswert?

Wo kommt dein Code denn her? Sind das die original TI Beispiele?
Welchen Compiler nutzt du?

von Daniel (Gast)


Lesenswert?

Hallo,

der Code stammt zum Teil aus einem Beispiel für einen msp430f1612 und 
zum Teil von mir selbst.
Ich verwende das Code Composer Studio V4 Core Edition.
Ich versuche jetzt schon seit mehreren Tagen dieses Problem zu lösen.

Freundliche Grüße

von Jörg S. (joerg-s)


Lesenswert?

Wo kommt denn die Zeile "UCA0CTL0 |= CHAR;" her? In der Quelle muss dann 
auch definiert sein was CHAR ist.

von Daniel (Gast)


Lesenswert?

Hallo,

das weiß ich leider nicht wie CHAR definiert ist, hab den Code wie 
gesagt zusammengeschustert!
Es geht aber eigentlich genau darum wie ich CHAR definieren muss damit 
UCA0CTL0 8 Bit pro Datenbyte ergibt?

Gruß

von Daniel (Gast)


Lesenswert?

Der Ausdruck CHAR stammt aus dem Code für den msp430f1612.
Jetzt ist die Frage welchen Ausdruck ich für den msp430f5529 benötigen 
würde, damit die Übertragung funktionieren könnte?

Gruß

von Max G. (l0wside) Benutzerseite


Lesenswert?

Für die Baudratenberechnung habe ich 
http://mspgcc.sourceforge.net/baudrate.html verwendet, damit kannst Du 
Deine Werte mal plausibilisieren.

Was ich nicht verstehe: warum hast Du zwei ISR für den gleichen Vektor 
definiert? Habe ich in der Compiler-Dokumentation irgendwas übersehen, 
oder führt Dein Code hier zu Chaos?

Für die Definition von CHAR: RTFM, anders lässt sich das echt nicht mehr 
sagen. Bit 4 muss auf 0 stehen.
"das weiß ich leider nicht wie CHAR definiert ist, hab den Code wie 
gesagt zusammengeschustert!" ist einfach nur daneben. Gleiche Deinen 
Code mal mit dem User´s Guide ab, was Du da tust. Wenn´s dann immer noch 
nicht geht, melde dich wieder.

Kopfschüttelnd,

Max

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.