Forum: Mikrocontroller und Digitale Elektronik USART --- UART


von Tim S. (169)


Lesenswert?

Hallo Leute,

ich möchte mithilfe der "USART"-Schnittstelle des Arm Cortex M3 
(STM32F100RB) Daten an die "UART"-Schnittstelle des Arduino Uno 
verschicken um diese schließlich über putty anzuschauen.
Da ich kein usb-rs232 converter rumliegen habe und nicht noch einen erst 
bestellen möchte muss ich dies über den Arduino machen.
Ist dies möglich? Oder habt ihr da eine einfachere Lösung.
Ein LCD habe ich ebenfalls nicht :)


Vielen Dank :)

von Oliver J. (skriptkiddy)


Lesenswert?

Einfach den AVR aus dem Sockel ziehen und dann RX und TX von STM32 an D0 
und D1 vom Arduino anschließen (Aber gekreuzt).

Der STM32 ist 5V-Tolerant an allen Pins außer an den Analogen Eingängen.


Gruß Oliver

von Tim S. (169)


Lesenswert?

Muss der AVR unbedingt aus dem Sockel entnommen werden. Ich denk es geht 
auch ohne!
Ich benutze die stm32-Library aber kann leider nichts empfangen.

von Oliver J. (skriptkiddy)


Lesenswert?

Tim S. schrieb:
> Muss der AVR unbedingt aus dem Sockel entnommen werden. Ich denk es geht
> auch ohne!
Nimm ihn doch einfach raus. Ich weiß nicht was der an den beiden Pins 
tut.
Du etwa?

Tim S. schrieb:
> Ich benutze die stm32-Library aber kann leider nichts empfangen.
Selbst damit kann man so Einiges falsch machen. Habe ich selbst kürzlich 
erst feststellen müssen. Zeig mal den Code.

Gruß Oliver


Edit: Bekommst du denn ein Echo im Putty, wenn du D0 und D1 auf dem 
Arduino kurzschließt?

von Tim S. (169)


Lesenswert?

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"


void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

void init(){
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  GPIOC->CRH=0x0020;
}

int main(void)
{
  init();

  int i;

  while(1)
    {
    USART_SendData(USART1, 1);

    for(i=0;i<0x900000;i++);
    }
}

von Oliver J. (skriptkiddy)


Lesenswert?

Das reicht nicht mal im Ansatz. Da muss noch wesentlich mehr 
initialisiert werden. Schau dich mal im Internet nach Beispielen um.


Bekommst du im Putty nun ein Echo?


Gruß Oliver

von Tim S. (169)


Lesenswert?

Sorry der Code ist nicht vollständig kopiert worden.
In der main ist noch die Methode: USART_Print()
In dieser wird, so hoffe ich die gesamte Initilisierung vorgenommen.
Diese Methode ist aus einem Beispielcode.

von Oliver J. (skriptkiddy)


Lesenswert?

Tim S. schrieb:
> Sorry der Code ist nicht vollständig kopiert worden.
Wie soll man dir denn helfen, wenn du Informationen vorenthältst?

von Tim S. (169)


Angehängte Dateien:

Lesenswert?

Sorry.
Im Anhang ist nun die C-Datei mit den Initialisierungsroutinen und der 
Senderoutine.

von Oliver J. (skriptkiddy)


Lesenswert?

Tim S. schrieb:
> Sorry.
> Im Anhang ist nun die C-Datei mit den Initialisierungsroutinen und der
> Senderoutine.
Und wo in deiner Main ruft du diese Initialisierungen auf?

Die beiden Funktionen:
1
SetupClock();
2
SetupUSART();
musst du schon aufrufen, sonst wird es mit
1
USART_SendData(USART1, 1);
nichts.

Mach doch lieber:
1
USART_SendData(USART1, '*');
da sieht man wenigstens was im Putty.

Gruß Oliver

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.