Forum: Mikrocontroller und Digitale Elektronik STM32 NUCLEOF411RE USART1 mit HC-05 verbinden


von Walt N. (belayason)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

möchte meine STM32 NUCLEO-F411RE über Bluetoot mit meinem Rechner 
verbinden und Daten senden. Beide HC-05 Module habe ich eingerichtet und 
laut status LED ist sie auch miteinander verbunden. Meine Aufbau seht 
ihr im Bild. Ich benutze das USART1 da ich gehört habe USART2 benutzt 
noch irgendwie die USB Schnittstelle und sei deswegen ungeeignet? 
Jedenfalls Will ich Sensordaten rüber schicken, für den Test mit 
bluetooth habe ich mit der CubeMx Initialisierungssoftware von STM mein 
USART1 initialisiert und versuche daten zu schicken. Leider bisher ohne 
erfolg ich bekomme weder einen fehler noch kommen Daten an meinem COM 
Port an. Jemand eine idee ?
1
/* Includes ------------------------------------------------------------------*/
2
#include "main.h"
3
#include "stm32f4xx_hal.h"
4
5
/* Private variables ---------------------------------------------------------*/
6
UART_HandleTypeDef huart1;
7
8
/* Private variables ---------------------------------------------------------*/
9
uint8_t bufftx[10] = "hello!\n\r";
10
11
/* Private function prototypes -----------------------------------------------*/
12
void SystemClock_Config(void);
13
static void MX_GPIO_Init(void);
14
static void MX_USART1_UART_Init(void);
15
16
int main(void)
17
{
18
  HAL_Init();
19
  
20
  /* Configure the system clock */
21
  SystemClock_Config();
22
23
  /* Initialize all configured peripherals */
24
  MX_GPIO_Init();
25
  MX_USART1_UART_Init();
26
27
  while (1)
28
  {
29
  HAL_UART_Transmit(&huart1, bufftx, 10, 100);
30
  HAL_Delay(100);
31
  }
32
}
33
34
void SystemClock_Config(void)
35
{
36
37
  RCC_OscInitTypeDef RCC_OscInitStruct;
38
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
39
40
    /**Configure the main internal regulator output voltage 
41
    */
42
  __HAL_RCC_PWR_CLK_ENABLE();
43
44
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
45
46
    /**Initializes the CPU, AHB and APB busses clocks 
47
    */
48
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
49
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
50
  RCC_OscInitStruct.HSICalibrationValue = 16;
51
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
52
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
53
  {
54
    _Error_Handler(__FILE__, __LINE__);
55
  }
56
57
    /**Initializes the CPU, AHB and APB busses clocks 
58
    */
59
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
60
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
61
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
62
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
63
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
64
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
65
66
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
67
  {
68
    _Error_Handler(__FILE__, __LINE__);
69
  }
70
71
    /**Configure the Systick interrupt time 
72
    */
73
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
74
75
    /**Configure the Systick 
76
    */
77
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
78
79
  /* SysTick_IRQn interrupt configuration */
80
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
81
}
82
83
/* USART1 init function */
84
static void MX_USART1_UART_Init(void)
85
{
86
87
  huart1.Instance = USART1;
88
  huart1.Init.BaudRate = 9600;
89
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
90
  huart1.Init.StopBits = UART_STOPBITS_1;
91
  huart1.Init.Parity = UART_PARITY_NONE;
92
  huart1.Init.Mode = UART_MODE_TX_RX;
93
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
94
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
95
  if (HAL_UART_Init(&huart1) != HAL_OK)
96
  {
97
    _Error_Handler(__FILE__, __LINE__);
98
  }
99
100
}
101
102
static void MX_GPIO_Init(void)
103
{
104
105
  /* GPIO Ports Clock Enable */
106
  __HAL_RCC_GPIOA_CLK_ENABLE();
107
108
}
109
110
void _Error_Handler(char *file, int line)
111
{
112
  while(1)
113
  {
114
  }
115
}
116
117
#ifdef  USE_FULL_ASSERT
118
119
void assert_failed(uint8_t* file, uint32_t line)
120
{ 
121
122
}

Gruß Belaya

von Harry L. (mysth)


Lesenswert?

Was auf Anhieb auffällt:

Walt N. schrieb:
> /* Private variables
> ---------------------------------------------------------*/
> uint8_t bufftx[10] = "hello!\n\r";

sollte sein:
1
/* Private variables 
2
---------------------------------------------------------*/
3
uint8_t bufftx[] = "hello!\n\r";

und:

Walt N. schrieb:
> while (1)
>   {
>   HAL_UART_Transmit(&huart1, bufftx, 10, 100);
>   HAL_Delay(100);
>   }

sollte sein:
1
while (1)
2
  {
3
  HAL_UART_Transmit(&huart1, bufftx, sizeof[bufftx], 100);
4
  HAL_Delay(100);
5
  }

Alternativ kannst du auch den bufftx lassen wie er ist und statt 
sizeof() strlen() nutzen.

von pegel (Gast)


Lesenswert?

STM32 TX an HC05 RX und umgekehrt?
Das Gleiche auf der anderen Seite?

von Harry L. (mysth)


Lesenswert?

Harry L. schrieb:
> sollte sein:
> while (1)
>   {
>   HAL_UART_Transmit(&huart1, bufftx, sizeof[bufftx], 100);
>   HAL_Delay(100);
>   }
>
> Alternativ kannst du auch den bufftx lassen wie er ist und statt
> sizeof() strlen() nutzen.

Sorry, die Hitze...

natürlich immer strlen()!!!

Sonst wird das abschließende \0 mit gesendet.

von Walt N. (belayason)


Lesenswert?

Die Änderung hat leider nichts gebracht. Habe das gefühl es liegt an 
meiner USART1 initialisierung oder bei der GPIO init? Ansonsten reicht 
es bei dem HC-05 Modul wenn die verbunden sind? Welchen sollte ich auf 
Master stellen und welchen auf slave?

von Harry L. (mysth)


Lesenswert?

Walt N. schrieb:
> Habe das gefühl es liegt an
> meiner USART1 initialisierung oder bei der GPIO init?

Glaub ich nicht!

Walt N. schrieb:
> Ansonsten reicht
> es bei dem HC-05 Modul wenn die verbunden sind?

Ja

Schau mit einem Oszilloskop an TX Vom Nucleo, ob da was rauskommt! (wird 
aber wohl)

Ansonsten verbinde mal TX und RX von dem HC05 am Nucleo (natürlich ohne 
das Nucleo-Board) und schau mit einem Terminal auf dem PC ob die 
eingegebenen Zeichen zurück gesendet werden.

Ganz wichtig:

IMMER: TX mit RX verbinden und umgekehrt!

Oder laß zum Testen die Bluetooth-Geschichte erstmal weg, und verbinde 
die Serielle vom Nucleo über deinem USB-Adapter direkt mit dem PC.

: Bearbeitet durch User
von Walt N. (belayason)


Lesenswert?

Harry L. schrieb:
> IMMER: TX mit RX verbinden und umgekehrt!

GEIL!! Das hat funktioniert. Vielen Dank!!!

von pegel (Gast)


Lesenswert?

Sagte ich doch!

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.