Fehlermeldungen UART

OP #3994461
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Programm erstellt mit dem ich eine UART Verbindung aufbauen 
möchte.
Jedoch bekomme ich eine ganze Menge an Fehlern wenn ich den auf "Build" 
gehe.
(AVR Studio 4.18)

Was habe ich falsch gemacht. Der Quelltext stammt aus einem Tutorial. 
Sollte also theoretisch funktionieren?



-----------------------------------------------
-----------------------------------------------
Hier die Fehler:


rm -rf UART.o  UART.elf dep/* UART.hex UART.eep UART.lss UART.map
Build succeeded with 0 Warnings...
avr-gcc  -mmcu=atmega1284p -Wall -gdwarf-2 -Os -std=gnu99 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP 
-MT UART.o -MF dep/UART.o.d  -c  ../UART.c
../UART.c: In function 'uart_init':
../UART.c:14: error: 'UCSRB' undeclared (first use in this function)
../UART.c:14: error: (Each undeclared identifier is reported only once
../UART.c:14: error: for each function it appears in.)
../UART.c:14: error: 'RXEN' undeclared (first use in this function)
../UART.c:14: error: 'TXEN' undeclared (first use in this function)
../UART.c:15: error: 'UCSRC' undeclared (first use in this function)
../UART.c:15: error: 'URSEL' undeclared (first use in this function)
../UART.c:15: error: 'UCSZ0' undeclared (first use in this function)
../UART.c:17: error: 'UBRRH' undeclared (first use in this function)
../UART.c:18: error: 'UBRRL' undeclared (first use in this function)
../UART.c: In function 'uart_putc':
../UART.c:25: error: 'UCSRA' undeclared (first use in this function)
../UART.c:25: error: 'UDRE' undeclared (first use in this function)
../UART.c:26: error: 'UDR' undeclared (first use in this function)
../UART.c: In function 'uart_getc':
../UART.c:32: error: 'UCSRA' undeclared (first use in this function)
../UART.c:32: error: 'RXC' undeclared (first use in this function)
../UART.c:33: error: 'UDR' undeclared (first use in this function)
../UART.c: In function 'main':
../UART.c:48: error: 'length' undeclared (first use in this function)
../UART.c:71: warning: implicit declaration of function 'uart_puts'
../UART.c:74: error: 'UCSRA' undeclared (first use in this function)
../UART.c:74: error: 'UDRE' undeclared (first use in this function)
../UART.c:48: warning: unused variable 'string'
make: *** [UART.o] Error 1
Build failed with 19 errors and 2 warnings...
OP #3994487
Lesenswert?
• ▲
▼
1
#define F_CPU 14745600UL     // CPU Taktfrequenz
2
#include <util/delay.h>       //
3
#include <avr/io.h>               //
4

5
#define BAUD 9200UL        //Baudrate 
6
#define UBRR_BAUD   ((F_CPU/(16UL*BAUD))-1)
7

8

9
//-----------------------
10
//-----------------------
11

12
void uart_init(void) {
13
  UCSRB = (1<<RXEN)|(1<<TXEN);      // UART TX und RX einschalten    
14
    UCSRC |= ( 1 << URSEL )|( 3<<UCSZ0 );  // Asynchron 8N1
15

16
    UBRRH = (uint8_t) (UBRR_BAUD>>8);
17
    UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff);
18
} 
19

20
//-----------------------
21
//-----------------------
22

23
void uart_putc(unsigned char c) {
24
    while (!(UCSRA & (1<<UDRE))) {}  // warten bis Senden möglich 
25
    UDR = c;                         // Zeichen senden   
26
}
27

28
//-----------------------
29
//-----------------------
30
uint8_t uart_getc(void) {
31
    while (!(UCSRA & (1<<RXC))) {} // warten bis Zeichen verfügbar
32
    return UDR;                    // Zeichen aus UDR zurueckgeben
33
}
34

35

36

37

38
//-----------------------
39
//MAIN
40
//-----------------------
41

42

43
int main (void) {
44
  uint8_t i;
45
  char c;
46
  char* s;
47
  char string[length+1];
48

49
  uart_init();
50
  
51
  while(1) {    
52
  
53
   s=string;
54
    i=0;
55

56
    do {
57
    c=uart_getc();    
58
      if (c!='\r')  {
59
        *s=c;      
60
        uart_putc( c );    
61
      s++;
62
      i++;
63
       }       
64
    }
65

66

67
  while( i!=length && c!='\r');  
68
  *s=0;
69

70
  uart_puts( "\r\n" );
71
  uart_puts( "eingegebender Text: " );
72
  uart_puts( string );
73
  while (!(UCSRA & (1<<UDRE))) {}
74
    uart_puts( "\r\n" );
75

76
}
77

78
return (0);
79
}
#3994497
Lesenswert?
• ▲
▼
Anhand der Parameter vom Compiler vermute ich, dass du den atmega1284p 
verwendest. Dort gibt es aber die Register UCSRB usw. gar nicht. Dort 
gibt es z.B. UCSR0B und UCSR1B. Ähnliche Varianten mit Zahlen gibt es 
für die anderen Register auch. Da müsstest du selbst nochmal einen Blick 
ins Datenblatt werfen und zu erfahren welche Register du für welchen 
UART Port brauchst. Oder du suchst dir passenden Beispielcode für deinen 
Mikrocontroller.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.