Forum: Mikrocontroller und Digitale Elektronik STM32 USART probleme


von Philipp (Gast)


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

von Matthias K. (matthiask)


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.

von Philipp (Gast)


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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Die Alternative wird damit aktiviert:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

Remap bedeuted, dass die alternative Funktion auf anderen Port-Pins 
umgeschaltet wird.

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.