Skip to content

Add support for Nucleo L152RE #80

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 4 commits into from
Aug 16, 2017
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
14 changes: 14 additions & 0 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,20 @@ Nucleo_64.menu.board_part_num.NUCLEO_L053R8.build.variant=NUCLEO_L053R8
Nucleo_64.menu.board_part_num.NUCLEO_L053R8.build.cmsis_lib_gcc=arm_cortexM0l_math
Nucleo_64.menu.board_part_num.NUCLEO_L053R8.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.enable_Serialx} -D__CORTEX_SC=0

# NUCLEO_L152RE board
# Support: Serial1 (USART1 on PA10, PA9) and Serial2 (UART4 on PC11, PC10)
Nucleo_64.menu.board_part_num.NUCLEO_L152RE=Nucleo L152RE
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.node="NODE_L152RE,NUCLEO"
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.upload.maximum_size=524288
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.upload.maximum_data_size=81920
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.build.mcu=cortex-m3
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.build.f_cpu=32000000L
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.build.board=NUCLEO_L152RE
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.build.series=STM32L1xx
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.build.product_line=STM32L152xE
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.build.variant=NUCLEO_L152RE
Nucleo_64.menu.board_part_num.NUCLEO_L152RE.build.cmsis_lib_gcc=arm_cortexM3l_math

# NUCLEO_L476RG board
# Support: Serial1 (USART1 on PA10, PA9)
Nucleo_64.menu.board_part_num.NUCLEO_L476RG=Nucleo L476RG
Expand Down
8 changes: 4 additions & 4 deletions cores/arduino/stm32/analog.c
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,7 @@ void pwm_start(PinName pin, uint32_t clock_freq,
timHandle.Init.Period = period -1;
timHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
timHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
#ifndef STM32L0xx
#if !defined(STM32L0xx) && !defined(STM32L1xx)
timHandle.Init.RepetitionCounter = 0;
#endif
timHandle.State= HAL_TIM_STATE_RESET;
Expand All @@ -758,7 +758,7 @@ void pwm_start(PinName pin, uint32_t clock_freq,
timConfig.OCMode = TIM_OCMODE_PWM1;
timConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
timConfig.OCFastMode = TIM_OCFAST_DISABLE;
#ifndef STM32L0xx
#if !defined(STM32L0xx) && !defined(STM32L1xx)
timConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
timConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
timConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
Expand All @@ -771,7 +771,7 @@ void pwm_start(PinName pin, uint32_t clock_freq,
return;
}

#ifndef STM32L0xx
#if !defined(STM32L0xx) && !defined(STM32L1xx)
if(STM_PIN_INVERTED(pinmap_function(pin, PinMap_PWM))) {
HAL_TIMEx_PWMN_Start(&timHandle, timChannel);
} else
Expand All @@ -797,7 +797,7 @@ void pwm_stop(PinName pin)
timChannel = get_pwm_channel(pin);
if (!IS_TIM_CHANNELS(timChannel)) return;

#ifndef STM32L0xx
#if !defined(STM32L0xx) && !defined(STM32L1xx)
if (STM_PIN_INVERTED(pinmap_function(pin, PinMap_PWM))) {
HAL_TIMEx_PWMN_Stop(&timHandle, timChannel);
} else
Expand Down
16 changes: 12 additions & 4 deletions cores/arduino/stm32/stm32_eeprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
* @{
*/
// We use the last page of the flash to store data (to prevent code overwritten).
#if defined (STM32F0xx) || defined (STM32F1xx)
#if defined (STM32F0xx) || defined (STM32F1xx) || defined(STM32L1xx)
#ifdef FLASH_BANK2_END
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_BANK2_END + 1) - FLASH_PAGE_SIZE))
#else
Expand Down Expand Up @@ -200,7 +200,7 @@ void set_data_to_flash(void)
uint32_t address = FLASH_BASE_ADDRESS;
uint32_t address_end = FLASH_BASE_ADDRESS + E2END;
#if defined (STM32F0xx) || defined (STM32F1xx) || defined (STM32F3xx) || \
defined (STM32L0xx) || defined(STM32L4xx)
defined (STM32L0xx) || defined (STM32L1xx) || defined(STM32L4xx)
uint32_t pageError = 0;
uint64_t data = 0;

Expand All @@ -218,18 +218,26 @@ void set_data_to_flash(void)
EraseInitStruct.NbPages = 1;

if(HAL_FLASH_Unlock() == HAL_OK) {
#ifdef STM32L0xx
#if defined(STM32L0xx)
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGAERR|\
FLASH_FLAG_SIZERR|FLASH_FLAG_OPTVERR|FLASH_FLAG_RDERR|\
FLASH_FLAG_FWWERR|FLASH_FLAG_NOTZEROERR);
#elif defined(STM32L1xx)
#if defined(FLASH_SR_RDERR)
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGAERR|\
FLASH_FLAG_SIZERR|FLASH_FLAG_OPTVERR|FLASH_FLAG_RDERR);
#else
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGAERR|\
FLASH_FLAG_SIZERR|FLASH_FLAG_OPTVERR);
#endif
#elif defined (STM32L4xx)
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS);
#else
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR);
#endif
if(HAL_FLASHEx_Erase(&EraseInitStruct, &pageError) == HAL_OK) {
while(address < address_end) {
#ifdef STM32L0xx
#if defined(STM32L0xx) || defined(STM32L1xx)
memcpy(&data, tmpEE + offset, sizeof(uint32_t));
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data) == HAL_OK) {
address += 4;
Expand Down
6 changes: 3 additions & 3 deletions cores/arduino/stm32/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ void TimerHandleInit(stimer_t *obj, uint16_t period, uint16_t prescaler)
handle->Init.CounterMode = TIM_COUNTERMODE_UP;
handle->Init.Period = period;
handle->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
#ifndef STM32L0xx
#if !defined(STM32L0xx) && !defined(STM32L1xx)
handle->Init.RepetitionCounter = 0x0000;
#endif
if(HAL_TIM_Base_Init(handle) != HAL_OK){
Expand Down Expand Up @@ -757,7 +757,7 @@ void TimerPulseInit(stimer_t *obj, uint16_t period, uint16_t pulseWidth, void (*
handle->Init.Prescaler = (uint32_t)(getTimerClkFreq(obj->timer) / (1000000)) - 1;
handle->Init.ClockDivision = 0;
handle->Init.CounterMode = TIM_COUNTERMODE_UP;
#ifndef STM32L0xx
#if !defined(STM32L0xx) && !defined(STM32L1xx)
handle->Init.RepetitionCounter = 0;
#endif
obj->irqHandleOC = irqHandle;
Expand All @@ -766,7 +766,7 @@ void TimerPulseInit(stimer_t *obj, uint16_t period, uint16_t pulseWidth, void (*
sConfig.Pulse = pulseWidth;
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
#ifndef STM32L0xx
#if !defined(STM32L0xx) && !defined(STM32L1xx)
sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/stm32/uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,7 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
volatile uint32_t tmpval;
#if defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx)
#if defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L1xx)
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_PE) != RESET) {
tmpval = huart->Instance->DR; // Clear PE flag
} else if (__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET) {
Expand Down
Loading