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

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