Fehlermeldungen UART

#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...
#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren