Skip to content

Commit

Permalink
Merge pull request #41 from tropicsquare/40-implement-support-for-nuc…
Browse files Browse the repository at this point in the history
…leo-l432kc-devboard

40 implement support for nucleo l432kc devboard
  • Loading branch information
pavelpolach321 authored Feb 19, 2025
2 parents ddcbfb8 + 99224a9 commit 54ffca0
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 4 deletions.
6 changes: 3 additions & 3 deletions examples/lt_ex_hw_wallet.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,18 +195,18 @@ static int session_initial(void)
LT_ASSERT(LT_OK, read_whole_R_config(&h, &r_config_read));
// Print r config
for (int i=0; i<27;i++) {
printf("\r\n%s, %08X", get_conf_desc(i), r_config_read.obj[i]);
printf("\r\n%s, %08" PRIX32, get_conf_desc(i), r_config_read.obj[i]);
}
printf("\r\n");

LT_LOG("%s", "Writing whole R config");
LT_ASSERT(LT_OK, write_whole_R_config(&h, &config));

LT_LOG("%s", "Reading R CONFIG again");
read_whole_R_config(&h, &r_config_read);
// Print r config
for (int i=0; i<27;i++) {
printf("\r\n%s, %08X", get_conf_desc(i), r_config_read.obj[i]);
printf("\r\n%s, %08" PRIX32, get_conf_desc(i), r_config_read.obj[i]);
}
printf("\r\n");

Expand Down
File renamed without changes.
132 changes: 132 additions & 0 deletions hal/port/stm32/lt_port_stm32_nucleo_l432kc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
/**
* @file lt_port_stm32.c
* @author Tropic Square s.r.o.
*
* @license For the license see file LICENSE.txt file in the root directory of this source tree.
*/

#include <stdint.h>
#include <string.h>
#include "stm32l4xx_hal.h"

#include "libtropic_common.h"
#include "libtropic_port.h"

// CS pin
#define LT_SPI_CS_BANK GPIOA
#define LT_SPI_CS_PIN GPIO_PIN_4
// Spi instance
#define LT_SPI_INSTANCE SPI1

// Random number generator's handle
RNG_HandleTypeDef rng;
// SPI handle declaration
SPI_HandleTypeDef SpiHandle;

lt_ret_t lt_port_random_bytes(uint32_t *buff, uint16_t len)
{
for(int i=0; i<len; i++) {
uint32_t helper = HAL_RNG_GetRandomNumber(&rng);
buff[i] = helper;
}

return LT_OK;
}

lt_ret_t lt_port_spi_csn_low(lt_handle_t *h)
{
UNUSED(h);

HAL_GPIO_WritePin(LT_SPI_CS_BANK, LT_SPI_CS_PIN, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(LT_SPI_CS_BANK, LT_SPI_CS_PIN)) {
;
}

return LT_OK;
}

lt_ret_t lt_port_spi_csn_high(lt_handle_t *h)
{
UNUSED(h);

HAL_GPIO_WritePin(LT_SPI_CS_BANK, LT_SPI_CS_PIN, GPIO_PIN_SET);
while(!HAL_GPIO_ReadPin(LT_SPI_CS_BANK, LT_SPI_CS_PIN)) {
;
}

return LT_OK;
}

lt_ret_t lt_port_init(lt_handle_t *h)
{
UNUSED(h);

// RNG
if (HAL_RNG_Init(&rng) != HAL_OK) {
return LT_FAIL;
}

// SPI CS
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_GPIO_WritePin(LT_SPI_CS_BANK, LT_SPI_CS_PIN, GPIO_PIN_SET);
GPIO_InitStruct.Pin = LT_SPI_CS_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
HAL_GPIO_Init(LT_SPI_CS_BANK, &GPIO_InitStruct);
// SPI hardware
SpiHandle.Instance = LT_SPI_INSTANCE;
SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
SpiHandle.Init.NSS = SPI_NSS_HARD_OUTPUT;
SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE;
SpiHandle.Init.Mode = SPI_MODE_MASTER;

if(HAL_SPI_Init(&SpiHandle) != HAL_OK)
{
return LT_FAIL;
}

return LT_OK;
}

lt_ret_t lt_port_deinit(lt_handle_t *h)
{
UNUSED(h);

if (HAL_RNG_DeInit(&rng) != HAL_OK) {
return LT_FAIL;
}

HAL_SPI_MspDeInit(&SpiHandle);

return LT_OK;
}

lt_ret_t lt_port_spi_transfer(lt_handle_t *h, uint8_t offset, uint16_t tx_data_length, uint32_t timeout)
{
if (offset + tx_data_length > LT_L1_LEN_MAX) {
return LT_L1_DATA_LEN_ERROR;
}
int ret = HAL_SPI_TransmitReceive(&SpiHandle, h->l2_buff + offset, h->l2_buff + offset, tx_data_length, timeout);
if(ret != HAL_OK) {
return LT_FAIL;
}

return LT_OK;
}

lt_ret_t lt_port_delay(lt_handle_t *h, uint32_t ms)
{
UNUSED(h);

HAL_Delay(ms);

return LT_OK;
}
2 changes: 1 addition & 1 deletion tests/platforms/libtropic-stm32

0 comments on commit 54ffca0

Please sign in to comment.