Skip to content

Commit 7f1b336

Browse files
authored
Merge pull request #264 from fpistm/Serial_update
Serial update
2 parents f040c55 + 3adfa85 commit 7f1b336

File tree

36 files changed

+349
-241
lines changed

36 files changed

+349
-241
lines changed

boards.txt

+35-47
Original file line numberDiff line numberDiff line change
@@ -472,53 +472,41 @@ Maple.menu.upload_method.serialMethod.upload.tool=serial_upload
472472

473473
################################################################################
474474
# Serialx activation
475-
Nucleo_144.menu.xserial.generic=Generic Serial
476-
Nucleo_144.menu.xserial.none=No Serial
477-
Nucleo_144.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
478-
Nucleo_144.menu.xserial.all=All (up to 10)
479-
Nucleo_144.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
480-
Nucleo_144.menu.xserial.third=Enable first third (USART1 to 3 if available)
481-
Nucleo_144.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
482-
483-
Nucleo_64.menu.xserial.generic=Generic Serial
484-
Nucleo_64.menu.xserial.none=No Serial
485-
Nucleo_64.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
486-
Nucleo_64.menu.xserial.all=All (up to 10)
487-
Nucleo_64.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
488-
Nucleo_64.menu.xserial.third=Enable first third (USART1 to 3 if available)
489-
Nucleo_64.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
490-
491-
Nucleo_32.menu.xserial.generic=Generic Serial
492-
Nucleo_32.menu.xserial.none=No Serial
493-
Nucleo_32.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
494-
Nucleo_32.menu.xserial.all=All (up to 10)
495-
Nucleo_32.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
496-
Nucleo_32.menu.xserial.third=Enable first third (USART1 to 3 if available)
497-
Nucleo_32.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
498-
499-
Disco.menu.xserial.generic=Generic Serial
500-
Disco.menu.xserial.none=No Serial
501-
Disco.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
502-
Disco.menu.xserial.all=All (up to 10)
503-
Disco.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
504-
Disco.menu.xserial.third=Enable first third (USART1 to 3 if available)
505-
Disco.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
506-
507-
GenF103.menu.xserial.generic=Generic Serial
508-
GenF103.menu.xserial.none=No Serial
509-
GenF103.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
510-
GenF103.menu.xserial.all=All (up to 10)
511-
GenF103.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
512-
GenF103.menu.xserial.third=Enable first third (USART1 to 3 if available)
513-
GenF103.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
514-
515-
Maple.menu.xserial.generic=Generic Serial
516-
Maple.menu.xserial.none=No Serial
517-
Maple.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
518-
Maple.menu.xserial.all=All (up to 10)
519-
Maple.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
520-
Maple.menu.xserial.third=Enable first third (USART1 to 3 if available)
521-
Maple.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
475+
Nucleo_144.menu.xserial.generic=Enabled with generic Serial
476+
Nucleo_144.menu.xserial.none=Enabled without generic Serial
477+
Nucleo_144.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
478+
Nucleo_144.menu.xserial.disabled=Disabled (No Serial)
479+
Nucleo_144.menu.xserial.disabled.build.xSerial=
480+
481+
Nucleo_64.menu.xserial.generic=Enabled with generic Serial
482+
Nucleo_64.menu.xserial.none=Enabled without generic Serial
483+
Nucleo_64.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
484+
Nucleo_64.menu.xserial.disabled=Disabled (No Serial)
485+
Nucleo_64.menu.xserial.disabled.build.xSerial=
486+
487+
Nucleo_32.menu.xserial.generic=Enabled with generic Serial
488+
Nucleo_32.menu.xserial.none=Enabled without generic Serial
489+
Nucleo_32.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
490+
Nucleo_32.menu.xserial.disabled=Disabled (No Serial)
491+
Nucleo_32.menu.xserial.disabled.build.xSerial=
492+
493+
Disco.menu.xserial.generic=Enabled with generic Serial
494+
Disco.menu.xserial.none=Enabled without generic Serial
495+
Disco.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
496+
Disco.menu.xserial.disabled=Disabled (No Serial)
497+
Disco.menu.xserial.disabled.build.xSerial=
498+
499+
GenF103.menu.xserial.generic=Enabled with generic Serial
500+
GenF103.menu.xserial.none=Enabled without generic Serial
501+
GenF103.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
502+
GenF103.menu.xserial.disabled=Disabled (No Serial)
503+
GenF103.menu.xserial.disabled.build.xSerial=
504+
505+
Maple.menu.xserial.generic=Enabled with generic Serial
506+
Maple.menu.xserial.none=Enabled without generic Serial
507+
Maple.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
508+
Maple.menu.xserial.disabled=Disabled (No Serial)
509+
Maple.menu.xserial.disabled.build.xSerial=
522510

523511
# USB connectivity
524512
Nucleo_144.menu.usb.none=None

cores/arduino/HardwareSerial.cpp

+12-4
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
#include "Arduino.h"
3131
#include "HardwareSerial.h"
3232

33-
#if !defined(NO_HWSERIAL)
33+
#if defined(HAL_UART_MODULE_ENABLED)
3434
#if defined(HAVE_HWSERIAL1) || defined(HAVE_HWSERIAL2) || defined(HAVE_HWSERIAL3) ||\
3535
defined(HAVE_HWSERIAL4) || defined(HAVE_HWSERIAL5) || defined(HAVE_HWSERIAL6) ||\
3636
defined(HAVE_HWSERIAL7) || defined(HAVE_HWSERIAL8) || defined(HAVE_HWSERIAL8) ||\
37-
defined(HAVE_HWSERIAL10)
37+
defined(HAVE_HWSERIAL10) || defined(HAVE_HWSERIALLP1)
3838
// SerialEvent functions are weak, so when the user doesn't define them,
3939
// the linker just sets their address to 0 (which is checked below).
4040
#if defined(HAVE_HWSERIAL1)
@@ -103,6 +103,12 @@
103103
void serialEvent10() __attribute__((weak));
104104
#endif
105105

106+
#if defined(HAVE_HWSERIALLP1)
107+
HardwareSerial SerialLP1(LPUART1);
108+
void serialEventLP1() __attribute__((weak));
109+
#endif
110+
#endif // HAVE_HWSERIALx
111+
106112
void serialEventRun(void)
107113
{
108114
#if defined(HAVE_HWSERIAL1)
@@ -135,6 +141,9 @@ void serialEventRun(void)
135141
#if defined(HAVE_HWSERIAL10)
136142
if (serialEventl10 && Serial10.available()) serialEvent10();
137143
#endif
144+
#if defined(HAVE_HWSERIALLP1)
145+
if (serialEventLP1 && SerialLP1.available()) serialEventLP1();
146+
#endif
138147
}
139148

140149
// Constructors ////////////////////////////////////////////////////////////////
@@ -391,5 +400,4 @@ void HardwareSerial::setRx(PinName _rx) {
391400
void HardwareSerial::setTx(PinName _tx){
392401
_serial.pin_tx = _tx;
393402
}
394-
#endif // HAVE_HWSERIALx
395-
#endif // !NO_HWSERIAL
403+
#endif // HAL_UART_MODULE_ENABLED

cores/arduino/HardwareSerial.h

+1
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ extern HardwareSerial Serial7;
146146
extern HardwareSerial Serial8;
147147
extern HardwareSerial Serial9;
148148
extern HardwareSerial Serial10;
149+
extern HardwareSerial SerialLP1;
149150

150151
extern void serialEventRun(void) __attribute__((weak));
151152

cores/arduino/stm32/clock.c

+59-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
*
3636
******************************************************************************
3737
*/
38-
#include "stm32_def.h"
38+
#include "clock.h"
3939

4040
#ifdef __cplusplus
4141
extern "C" {
@@ -120,6 +120,64 @@ void delayInsideIT(uint32_t delay_us)
120120
#endif
121121
}
122122

123+
/**
124+
* @brief Enable the specified clock if not already set
125+
* @param source: clock source: LSE_CLOCK, LSI_CLOCK, HSI_CLOCK or HSE_CLOCK
126+
* @retval None
127+
*/
128+
void enableClock(sourceClock_t source)
129+
{
130+
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
131+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
132+
133+
switch(source) {
134+
case LSI_CLOCK:
135+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) {
136+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
137+
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
138+
}
139+
break;
140+
case HSI_CLOCK:
141+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {
142+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
143+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
144+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
145+
}
146+
break;
147+
case LSE_CLOCK:
148+
/* Enable Power Clock */
149+
if(__HAL_RCC_PWR_IS_CLK_DISABLED()) {
150+
__HAL_RCC_PWR_CLK_ENABLE();
151+
}
152+
#ifdef HAL_PWR_MODULE_ENABLED
153+
/* Allow access to Backup domain */
154+
HAL_PWR_EnableBkUpAccess();
155+
#endif
156+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {
157+
#ifdef __HAL_RCC_LSEDRIVE_CONFIG
158+
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
159+
#endif
160+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
161+
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
162+
}
163+
break;
164+
case HSE_CLOCK:
165+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {
166+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
167+
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
168+
}
169+
break;
170+
default:
171+
/* No valid clock to enable */
172+
break;
173+
}
174+
if(RCC_OscInitStruct.OscillatorType != RCC_OSCILLATORTYPE_NONE) {
175+
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
176+
Error_Handler();
177+
}
178+
}
179+
}
180+
123181
#ifdef __cplusplus
124182
}
125183
#endif

cores/arduino/stm32/clock.h

+9
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,22 @@
4747
#endif
4848

4949
/* Exported types ------------------------------------------------------------*/
50+
/* Clock source selection */
51+
typedef enum {
52+
LSI_CLOCK,
53+
HSI_CLOCK,
54+
LSE_CLOCK,
55+
HSE_CLOCK
56+
} sourceClock_t;
57+
5058
/* Exported constants --------------------------------------------------------*/
5159
/* Exported macro ------------------------------------------------------------*/
5260
/* Exported functions ------------------------------------------------------- */
5361
uint32_t GetCurrentMilli(void);
5462
uint32_t GetCurrentMicro(void);
5563
void delayInsideIT(uint32_t delay_us);
5664

65+
void enableClock(sourceClock_t source);
5766
#ifdef __cplusplus
5867
}
5968
#endif

cores/arduino/stm32/low_power.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
extern "C" {
4646
#endif
4747

48-
#ifdef UART_IT_WUF
48+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
4949
/* Save UART handler for callback */
5050
static UART_HandleTypeDef* WakeUpUart = NULL;
5151
#endif
@@ -201,7 +201,7 @@ void LowPower_sleep(uint32_t regulator){
201201
void LowPower_stop(serial_t *obj){
202202
__disable_irq();
203203

204-
#ifdef UART_IT_WUF
204+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
205205
if (WakeUpUart != NULL) {
206206
HAL_UARTEx_EnableStopMode(WakeUpUart);
207207
}
@@ -224,7 +224,7 @@ void LowPower_stop(serial_t *obj){
224224

225225
/* Exit Stop mode reset clocks */
226226
SystemClock_Config();
227-
#ifdef UART_IT_WUF
227+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
228228
if (WakeUpUart != NULL) {
229229
/* In case of WakeUp from UART, reset its clock source to HSI */
230230
uart_config_lowpower(obj);
@@ -290,7 +290,7 @@ void LowPower_shutdown(){
290290
* @retval None
291291
*/
292292
void LowPower_EnableWakeUpUart(serial_t* serial, void (*FuncPtr)( void ) ) {
293-
#ifdef UART_IT_WUF
293+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
294294
UART_WakeUpTypeDef WakeUpSelection;
295295
if(serial == NULL) {
296296
return;

cores/arduino/stm32/rtc.c

+4-39
Original file line numberDiff line numberDiff line change
@@ -100,22 +100,11 @@ void RTC_SetClockSource(sourceClock_t source)
100100
*/
101101
static void RTC_initClock(sourceClock_t source)
102102
{
103-
RCC_OscInitTypeDef RCC_OscInitStruct;
104103
RCC_PeriphCLKInitTypeDef PeriphClkInit;
105104

106105
if(source == LSE_CLOCK) {
107106
/* Enable the clock if not already set by user */
108-
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {
109-
#ifdef __HAL_RCC_LSEDRIVE_CONFIG
110-
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
111-
#endif
112-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
113-
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
114-
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
115-
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
116-
Error_Handler();
117-
}
118-
}
107+
enableClock(LSE_CLOCK);
119108

120109
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
121110
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
@@ -125,14 +114,8 @@ static void RTC_initClock(sourceClock_t source)
125114
clkSrc = LSE_CLOCK;
126115
} else if(source == HSE_CLOCK) {
127116
/* Enable the clock if not already set by user */
128-
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {
129-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
130-
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
131-
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
132-
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
133-
Error_Handler();
134-
}
135-
}
117+
enableClock(HSE_CLOCK);
118+
136119
/* HSE division factor for RTC clock must be set to ensure that
137120
* the clock supplied to the RTC is less than or equal to 1 MHz
138121
*/
@@ -182,14 +165,7 @@ static void RTC_initClock(sourceClock_t source)
182165
clkSrc = HSE_CLOCK;
183166
} else if(source == LSI_CLOCK) {
184167
/* Enable the clock if not already set by user */
185-
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) {
186-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
187-
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
188-
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
189-
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
190-
Error_Handler();
191-
}
192-
}
168+
enableClock(LSI_CLOCK);
193169

194170
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
195171
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
@@ -314,17 +290,6 @@ void RTC_init(hourFormat_t format, sourceClock_t source)
314290
{
315291
initFormat = format;
316292

317-
/* Enable Power Clock */
318-
__HAL_RCC_PWR_CLK_ENABLE();
319-
320-
#ifdef HAL_PWR_MODULE_ENABLED
321-
/* Allow access to Backup domain */
322-
HAL_PWR_EnableBkUpAccess();
323-
#endif
324-
/* Reset RTC Domain */
325-
__HAL_RCC_BACKUPRESET_FORCE();
326-
__HAL_RCC_BACKUPRESET_RELEASE();
327-
328293
/* Init RTC clock */
329294
RTC_initClock(source);
330295

cores/arduino/stm32/rtc.h

+1-8
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
#define __RTC_H
4141

4242
/* Includes ------------------------------------------------------------------*/
43-
#include "stm32_def.h"
43+
#include "clock.h"
4444

4545
#ifdef HAL_RTC_MODULE_ENABLED
4646

@@ -72,13 +72,6 @@ typedef enum {
7272
Y_MSK = 32
7373
} alarmMask_t;
7474

75-
/* Clock source selection */
76-
typedef enum {
77-
LSI_CLOCK,
78-
LSE_CLOCK,
79-
HSE_CLOCK
80-
} sourceClock_t;
81-
8275
typedef void(*voidCallbackPtr)(void *);
8376

8477
/* Exported constants --------------------------------------------------------*/

0 commit comments

Comments
 (0)