stm32f103c8t6 + tarjeta SD -> Arduino

Buenas!

He decidido dar el salto del Nano al stm32f103c8t6, que ofrece unas prestaciones muy superiores por un precio igual o inferior. Para programar la tarjeta estoy utilizando el IDE de Arduino.

Quiero hacer un datalogger donde quiero guardar ciertas variables en una tarjeta SD, pero no consigo hacerlo funcionar. Me da errores al compilar.

Estoy utilizando esta librería --> GitHub - stm32duino/STM32SD: Enables reading and writing on SD card using SD card slot of the STM32 Board.
La configuración de la placa es la siguiente --> Configuracion.JPG

La librería que menciono incluye unos ejemplos, concretamente estoy probando el Dataogger.ino, pero ninguno de los ejemplo compila. Adjunto el mensaje que me sale al compilar:

In file included from C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/Sd2Card.h:40,
                 from C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/STM32SD.h:22,
                 from C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\examples\CardInfo\CardInfo.ino:12:
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:58:40: error: variable or field 'BSP_SD_GetCardInfo' declared void
   58 | #define HAL_SD_CardInfoTypedef         HAL_SD_CardInfoTypeDef
      |                                        ^~~~~~~~~~~~~~~~~~~~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:115:28: note: in expansion of macro 'HAL_SD_CardInfoTypedef'
  115 | void    BSP_SD_GetCardInfo(HAL_SD_CardInfoTypedef *CardInfo);
      |                            ^~~~~~~~~~~~~~~~~~~~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:58:40: error: 'HAL_SD_CardInfoTypeDef' was not declared in this scope; did you mean 'HAL_SD_CardInfoTypedef'?
   58 | #define HAL_SD_CardInfoTypedef         HAL_SD_CardInfoTypeDef
      |                                        ^~~~~~~~~~~~~~~~~~~~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:115:28: note: in expansion of macro 'HAL_SD_CardInfoTypedef'
  115 | void    BSP_SD_GetCardInfo(HAL_SD_CardInfoTypedef *CardInfo);
      |                            ^~~~~~~~~~~~~~~~~~~~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:115:52: error: 'CardInfo' was not declared in this scope; did you mean 'SD_CardInfo'?
  115 | void    BSP_SD_GetCardInfo(HAL_SD_CardInfoTypedef *CardInfo);
      |                                                    ^~~~~~~~
      |                                                    SD_CardInfo
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:120:24: error: variable or field 'BSP_SD_MspInit' declared void
  120 | void    BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                        ^~~~~~~~~~~~~~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:120:24: error: 'SD_HandleTypeDef' was not declared in this scope; did you mean 'SPI_HandleTypeDef'?
  120 | void    BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                        ^~~~~~~~~~~~~~~~
      |                        SPI_HandleTypeDef
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:120:42: error: 'hsd' was not declared in this scope
  120 | void    BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                                          ^~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:120:47: error: expected primary-expression before 'void'
  120 | void    BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                                               ^~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:121:31: error: variable or field 'BSP_SD_Detect_MspInit' declared void
  121 | void    BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                               ^~~~~~~~~~~~~~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:121:31: error: 'SD_HandleTypeDef' was not declared in this scope; did you mean 'SPI_HandleTypeDef'?
  121 | void    BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                               ^~~~~~~~~~~~~~~~
      |                               SPI_HandleTypeDef
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:121:49: error: 'hsd' was not declared in this scope
  121 | void    BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                                                 ^~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:121:54: error: expected primary-expression before 'void'
  121 | void    BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params);
      |                                                      ^~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:122:26: error: variable or field 'BSP_SD_MspDeInit' declared void
  122 | void    BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params);
      |                          ^~~~~~~~~~~~~~~~
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:122:26: error: 'SD_HandleTypeDef' was not declared in this scope; did you mean 'SPI_HandleTypeDef'?
  122 | void    BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params);
      |                          ^~~~~~~~~~~~~~~~
      |                          SPI_HandleTypeDef
C:\Users\55947\Documents\Arduino\libraries\STM32SD-master\src/bsp_sd.h:122:44: error: 'hsd' was not declared in this scope
  122 | void    BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params);
      |                                            ^~~
C:\Users\

¿Alguien me puede orientar con esto? parece que hay que configurar algunas cosas en archivos .h de la librería, pero no estoy muy familiarizado con el lenguaje C. En la red no he encontrado gran cosa sobre esto. ¿alguien ha conseguido hacer un datalogger con esta librería?

Quizás mas fácil que todo esto es preguntar... alguien ha conseguido utilizar esta placa stm32f103c8t6 y guardar datos en una SD con éxito utilizando el lenguaje y el IDE de Arduino??

Un saludo!!

configuracion.JPG

Moderador:
Hola @alba5, bienvenido al foro Arduino.
Tu consulta es para la sección Microprocesadores. Asi que el tema seguirá ahi.

Agradezco que hayas posteado debidamente el código.
Solo ubicaste mal tu tópico.
Además debes leer al final de las normas como se visualizan las imágenes adjuntas y hacer visible la que has posteado.
Gracias

Supongo que comenzaste agregando esto a tu IDE no?

Puntualmente esto

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

Y debes ser en el Menu => Preferencias => Gestor de URLs Adicionas de Tarjetas:

Lo pegas ahi y luego que se actualice estaras en condiciones.

Gracias por la respuesta! Si, ese paso ya lo hice... he probado a cargar el ejemplo blink y funciona bien... el problema viene con la librería que digo.

Esa librería tiene algunos fallos.

He visto que la librería SdFat beta 2, funciona en la placa Nucleo F767ZI y en la nucleo H743ZI, instalando un lector micro SD en SPI3, por lo menos los ejemplos SdInfo y bench, usando en Nucleo oficial para STM32 (1.9.0). Solo hay que cuidar las instrucciones de llamado para los pines en los que puedes instalar el lector microSD.

En el ejemplo SdInfo, para el bus SPI3:

const uint8_t SD_CS_PIN = PB11;

Instancias de configuración del pinout SPI3

static SPIClass mySPI3(PB2, PB4, PB3);
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(18), &mySPI3)
SdFs sd;
FsFile file2;

Ese podría ser un buen punto de partida para revisar la librería en STM32. En la placa F103C8 hay dos buses SPI: 1 y 2

El pinuout respectivo es:

        SPI1     SPI2

MISO --- PA6 --- PB14
MOSI --- PA7 --- PB15
CS   --- PA4 --- PB12
SCK  --- PA5 --- PB13

GND
3V3