STM32 USART probleme

Gast #2060188
Lesenswert?
• ▲
▼
Hallo,

ich versuche jetzt schon seit einiger zeit "Hello World!!" über den 
USART1 an den PC zu senden. Ich hab mir schon die st beispiele und 
diverse diskusionen hier im Forum durchgelesen, konnte bis jetzt aber 
noch nichts erreichen. Der PC empfängt nur 0. habs in mit nem anderen 
quelltext schon geschafft, das er 255 und 0 empfängt, aber das war so 
nicht gewollt ^_^'

Hier mal mein aktueller Quelltest:
1
#include <stdio.h>
2
#include "stm32f10x.h"
3

4
#ifdef __GNUC__
5
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
6
#else
7
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
8
#endif
9

10
int main(int argc, char* argv[])
11
{
12
  SystemInit();
13
  USART_DeInit(USART1);
14
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
15
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
16
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
17

18
  GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
19

20
  GPIO_InitTypeDef  GPIO_InitStruct;
21
  USART_InitTypeDef  USART_InitStruct;
22

23
  GPIO_InitStruct.GPIO_Pin    = GPIO_Pin_10;
24
  GPIO_InitStruct.GPIO_Mode    = GPIO_Mode_IN_FLOATING;
25
  GPIO_InitStruct.GPIO_Speed    = GPIO_Speed_50MHz;
26
  GPIO_Init(GPIOA, &GPIO_InitStruct);
27

28
  GPIO_InitStruct.GPIO_Pin    = GPIO_Pin_9;
29
  GPIO_InitStruct.GPIO_Mode    = GPIO_Mode_AF_PP;
30
  GPIO_Init(GPIOA, &GPIO_InitStruct);
31

32
  USART_InitStruct.USART_BaudRate        = 9600;
33
  USART_InitStruct.USART_WordLength      = USART_WordLength_8b;
34
  USART_InitStruct.USART_StopBits        = USART_StopBits_1;
35
  USART_InitStruct.USART_Parity        = USART_Parity_No;
36
  USART_InitStruct.USART_HardwareFlowControl  = USART_HardwareFlowControl_None;
37
  USART_InitStruct.USART_Mode          = USART_Mode_Rx | USART_Mode_Tx;
38
  USART_Init(USART1, &USART_InitStruct);
39
  USART_Cmd(USART1, ENABLE);
40

41
  printf("Hello World!!\n\r");
42

43
  while(1);
44

45
  return 0;
46
}
47

48
PUTCHAR_PROTOTYPE
49
{
50
  USART_SendData(USART1, (uint8_t) ch);
51
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
52
  return ch;
53
}

Falls es wichtig ist:
ich benutze HTerm und dieses board 
http://cgi.ebay.de/STM32-Development-Board-STM32F103VET6-TFT-LCD-Module_W0QQitemZ190412961573QQcategoryZ26206QQcmdZViewItemQQ_trksidZp5197.m7QQ_trkparmsZalgo%3DLVI%26itu%3DUCI%26otn%3D5%26po%3DLVI%26ps%3D63%26clkid%3D7039328767038264550

Ich hoffe ihr könnt mir helfen
#2060263
Lesenswert?
• ▲
▼
>  GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);

Sicher, dass ein REMAP erforderlich ist? (Schaltplan u. Datenblatt 
vergleichen;-) )

Eigene Sendefunktion probieren:
1
// ***********************************************************************
2
// USART - Byte senden
3
// Übergabe: Sende-Byte
4
// ***********************************************************************
5
void sendbyte_usart (uint8_t byte) {
6
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  // warten, falls Buffer voll
7
  USART_SendData(USART1, byte);     // Byte senden
8
}
9

10
// ***********************************************************************
11
// USART - Zeichenkette senden
12
// Übergabe: Adresse der zu sendenden Zeichenkette
13
// ***********************************************************************
14
void sendstring_usart (char *send_zk) {
15
  while (*send_zk) sendbyte_usart(*send_zk++);
16
}
17

18
....
19

20
sendstring_usart("Hello World\n\r");

Ansonsten Oszi dran, ob überhaupt was am richtigen PIN seriell raus 
kommt.
Gast #2060278
Lesenswert?
• ▲
▼
Danke schön, es funktioniert jetzt.

Hab deine Funktionen mal kopiert (wobei ich sicher war, das ich recht 
ähnliche auch schon probiert hatte) und das Remap weggelassen.

Ich hatte das mit dem remap so verstanden, das damit die alternative 
funktion freigeschaltet wird.

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.