Skip to content

Serial update #264

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jun 15, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 35 additions & 47 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -472,53 +472,41 @@ Maple.menu.upload_method.serialMethod.upload.tool=serial_upload

################################################################################
# Serialx activation
Nucleo_144.menu.xserial.generic=Generic Serial
Nucleo_144.menu.xserial.none=No Serial
Nucleo_144.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
Nucleo_144.menu.xserial.all=All (up to 10)
Nucleo_144.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
Nucleo_144.menu.xserial.third=Enable first third (USART1 to 3 if available)
Nucleo_144.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL

Nucleo_64.menu.xserial.generic=Generic Serial
Nucleo_64.menu.xserial.none=No Serial
Nucleo_64.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
Nucleo_64.menu.xserial.all=All (up to 10)
Nucleo_64.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
Nucleo_64.menu.xserial.third=Enable first third (USART1 to 3 if available)
Nucleo_64.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL

Nucleo_32.menu.xserial.generic=Generic Serial
Nucleo_32.menu.xserial.none=No Serial
Nucleo_32.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
Nucleo_32.menu.xserial.all=All (up to 10)
Nucleo_32.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
Nucleo_32.menu.xserial.third=Enable first third (USART1 to 3 if available)
Nucleo_32.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL

Disco.menu.xserial.generic=Generic Serial
Disco.menu.xserial.none=No Serial
Disco.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
Disco.menu.xserial.all=All (up to 10)
Disco.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
Disco.menu.xserial.third=Enable first third (USART1 to 3 if available)
Disco.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL

GenF103.menu.xserial.generic=Generic Serial
GenF103.menu.xserial.none=No Serial
GenF103.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
GenF103.menu.xserial.all=All (up to 10)
GenF103.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
GenF103.menu.xserial.third=Enable first third (USART1 to 3 if available)
GenF103.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL

Maple.menu.xserial.generic=Generic Serial
Maple.menu.xserial.none=No Serial
Maple.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
Maple.menu.xserial.all=All (up to 10)
Maple.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
Maple.menu.xserial.third=Enable first third (USART1 to 3 if available)
Maple.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
Nucleo_144.menu.xserial.generic=Enabled with generic Serial
Nucleo_144.menu.xserial.none=Enabled without generic Serial
Nucleo_144.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
Nucleo_144.menu.xserial.disabled=Disabled (No Serial)
Nucleo_144.menu.xserial.disabled.build.xSerial=

Nucleo_64.menu.xserial.generic=Enabled with generic Serial
Nucleo_64.menu.xserial.none=Enabled without generic Serial
Nucleo_64.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
Nucleo_64.menu.xserial.disabled=Disabled (No Serial)
Nucleo_64.menu.xserial.disabled.build.xSerial=

Nucleo_32.menu.xserial.generic=Enabled with generic Serial
Nucleo_32.menu.xserial.none=Enabled without generic Serial
Nucleo_32.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
Nucleo_32.menu.xserial.disabled=Disabled (No Serial)
Nucleo_32.menu.xserial.disabled.build.xSerial=

Disco.menu.xserial.generic=Enabled with generic Serial
Disco.menu.xserial.none=Enabled without generic Serial
Disco.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
Disco.menu.xserial.disabled=Disabled (No Serial)
Disco.menu.xserial.disabled.build.xSerial=

GenF103.menu.xserial.generic=Enabled with generic Serial
GenF103.menu.xserial.none=Enabled without generic Serial
GenF103.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
GenF103.menu.xserial.disabled=Disabled (No Serial)
GenF103.menu.xserial.disabled.build.xSerial=

Maple.menu.xserial.generic=Enabled with generic Serial
Maple.menu.xserial.none=Enabled without generic Serial
Maple.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
Maple.menu.xserial.disabled=Disabled (No Serial)
Maple.menu.xserial.disabled.build.xSerial=

# USB connectivity
Nucleo_144.menu.usb.none=None
Expand Down
16 changes: 12 additions & 4 deletions cores/arduino/HardwareSerial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@
#include "Arduino.h"
#include "HardwareSerial.h"

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

#if defined(HAVE_HWSERIALLP1)
HardwareSerial SerialLP1(LPUART1);
void serialEventLP1() __attribute__((weak));
#endif
#endif // HAVE_HWSERIALx

void serialEventRun(void)
{
#if defined(HAVE_HWSERIAL1)
Expand Down Expand Up @@ -135,6 +141,9 @@ void serialEventRun(void)
#if defined(HAVE_HWSERIAL10)
if (serialEventl10 && Serial10.available()) serialEvent10();
#endif
#if defined(HAVE_HWSERIALLP1)
if (serialEventLP1 && SerialLP1.available()) serialEventLP1();
#endif
}

// Constructors ////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -391,5 +400,4 @@ void HardwareSerial::setRx(PinName _rx) {
void HardwareSerial::setTx(PinName _tx){
_serial.pin_tx = _tx;
}
#endif // HAVE_HWSERIALx
#endif // !NO_HWSERIAL
#endif // HAL_UART_MODULE_ENABLED
1 change: 1 addition & 0 deletions cores/arduino/HardwareSerial.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ extern HardwareSerial Serial7;
extern HardwareSerial Serial8;
extern HardwareSerial Serial9;
extern HardwareSerial Serial10;
extern HardwareSerial SerialLP1;

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

Expand Down
60 changes: 59 additions & 1 deletion cores/arduino/stm32/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
*
******************************************************************************
*/
#include "stm32_def.h"
#include "clock.h"

#ifdef __cplusplus
extern "C" {
Expand Down Expand Up @@ -120,6 +120,64 @@ void delayInsideIT(uint32_t delay_us)
#endif
}

/**
* @brief Enable the specified clock if not already set
* @param source: clock source: LSE_CLOCK, LSI_CLOCK, HSI_CLOCK or HSE_CLOCK
* @retval None
*/
void enableClock(sourceClock_t source)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

switch(source) {
case LSI_CLOCK:
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) {
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
}
break;
case HSI_CLOCK:
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
}
break;
case LSE_CLOCK:
/* Enable Power Clock */
if(__HAL_RCC_PWR_IS_CLK_DISABLED()) {
__HAL_RCC_PWR_CLK_ENABLE();
}
#ifdef HAL_PWR_MODULE_ENABLED
/* Allow access to Backup domain */
HAL_PWR_EnableBkUpAccess();
#endif
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {
#ifdef __HAL_RCC_LSEDRIVE_CONFIG
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
#endif
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
}
break;
case HSE_CLOCK:
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
}
break;
default:
/* No valid clock to enable */
break;
}
if(RCC_OscInitStruct.OscillatorType != RCC_OSCILLATORTYPE_NONE) {
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
}
}

#ifdef __cplusplus
}
#endif
Expand Down
9 changes: 9 additions & 0 deletions cores/arduino/stm32/clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,22 @@
#endif

/* Exported types ------------------------------------------------------------*/
/* Clock source selection */
typedef enum {
LSI_CLOCK,
HSI_CLOCK,
LSE_CLOCK,
HSE_CLOCK
} sourceClock_t;

/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
uint32_t GetCurrentMilli(void);
uint32_t GetCurrentMicro(void);
void delayInsideIT(uint32_t delay_us);

void enableClock(sourceClock_t source);
#ifdef __cplusplus
}
#endif
Expand Down
8 changes: 4 additions & 4 deletions cores/arduino/stm32/low_power.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
extern "C" {
#endif

#ifdef UART_IT_WUF
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
/* Save UART handler for callback */
static UART_HandleTypeDef* WakeUpUart = NULL;
#endif
Expand Down Expand Up @@ -201,7 +201,7 @@ void LowPower_sleep(uint32_t regulator){
void LowPower_stop(serial_t *obj){
__disable_irq();

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

/* Exit Stop mode reset clocks */
SystemClock_Config();
#ifdef UART_IT_WUF
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
if (WakeUpUart != NULL) {
/* In case of WakeUp from UART, reset its clock source to HSI */
uart_config_lowpower(obj);
Expand Down Expand Up @@ -290,7 +290,7 @@ void LowPower_shutdown(){
* @retval None
*/
void LowPower_EnableWakeUpUart(serial_t* serial, void (*FuncPtr)( void ) ) {
#ifdef UART_IT_WUF
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
UART_WakeUpTypeDef WakeUpSelection;
if(serial == NULL) {
return;
Expand Down
43 changes: 4 additions & 39 deletions cores/arduino/stm32/rtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,22 +100,11 @@ void RTC_SetClockSource(sourceClock_t source)
*/
static void RTC_initClock(sourceClock_t source)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;

if(source == LSE_CLOCK) {
/* Enable the clock if not already set by user */
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {
#ifdef __HAL_RCC_LSEDRIVE_CONFIG
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
#endif
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
}
enableClock(LSE_CLOCK);

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
Expand All @@ -125,14 +114,8 @@ static void RTC_initClock(sourceClock_t source)
clkSrc = LSE_CLOCK;
} else if(source == HSE_CLOCK) {
/* Enable the clock if not already set by user */
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
}
enableClock(HSE_CLOCK);

/* HSE division factor for RTC clock must be set to ensure that
* the clock supplied to the RTC is less than or equal to 1 MHz
*/
Expand Down Expand Up @@ -182,14 +165,7 @@ static void RTC_initClock(sourceClock_t source)
clkSrc = HSE_CLOCK;
} else if(source == LSI_CLOCK) {
/* Enable the clock if not already set by user */
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) {
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
}
enableClock(LSI_CLOCK);

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
Expand Down Expand Up @@ -314,17 +290,6 @@ void RTC_init(hourFormat_t format, sourceClock_t source)
{
initFormat = format;

/* Enable Power Clock */
__HAL_RCC_PWR_CLK_ENABLE();

#ifdef HAL_PWR_MODULE_ENABLED
/* Allow access to Backup domain */
HAL_PWR_EnableBkUpAccess();
#endif
/* Reset RTC Domain */
__HAL_RCC_BACKUPRESET_FORCE();
__HAL_RCC_BACKUPRESET_RELEASE();

/* Init RTC clock */
RTC_initClock(source);

Expand Down
9 changes: 1 addition & 8 deletions cores/arduino/stm32/rtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
#define __RTC_H

/* Includes ------------------------------------------------------------------*/
#include "stm32_def.h"
#include "clock.h"

#ifdef HAL_RTC_MODULE_ENABLED

Expand Down Expand Up @@ -72,13 +72,6 @@ typedef enum {
Y_MSK = 32
} alarmMask_t;

/* Clock source selection */
typedef enum {
LSI_CLOCK,
LSE_CLOCK,
HSE_CLOCK
} sourceClock_t;

typedef void(*voidCallbackPtr)(void *);

/* Exported constants --------------------------------------------------------*/
Expand Down
Loading