STM32F4 Initialization

ChibiOS public support forum for topics related to the STMicroelectronics STM32 family of micro-controllers.

Moderator: RoccoMarco

Post Reply
ucasano
Posts: 57
Joined: Mon Aug 06, 2012 1:05 pm
Has thanked: 1 time

STM32F4 Initialization

Post by ucasano »

Hi, I just upgraded my previous project from Chibi 2.5 to 2.6.1.

I upgraded the board files also, with the new definition for using SPI2 peripherals on PB12-13-14-15; but when I run the demo, SPI2 does not work.

If I do pin configuration in demo software (main.c) SPI2 works fine, so question is: why board file configuration is not working?

thanks.
-g
User avatar
Giovanni
Site Admin
Posts: 14892
Joined: Wed May 27, 2009 8:48 am
Has thanked: 1202 times
Been thanked: 996 times

Re: STM32F4 Initialization

Post by Giovanni »

Which board? all the board files I see have those pins undefined or assigned to OTG HS.

Giovanni
ucasano
Posts: 57
Joined: Mon Aug 06, 2012 1:05 pm
Has thanked: 1 time

Re: STM32F4 Initialization

Post by ucasano »

Oh, well... it's a custom made board :-) It's a design of mine ;-) which runs ChibiOS successfull since release 2.4.2

-g

PS. this is part of my board.h, which defines SPI2 pins:

Code: Select all

#define VAL_GPIOB_MODER         (PIN_MODE_OUTPUT(GPIOB_LED2) |            \
                                 PIN_MODE_OUTPUT(GPIOB_LED1) |            \
                                 PIN_MODE_INPUT(GPIOB_PWR_IND) |         \
                                 PIN_MODE_ALTERNATE(GPIOB_I2S3_SCLK) |      \
                                 PIN_MODE_OUTPUT(GPIOB_OSC_EN) |         \
                                 PIN_MODE_INPUT(GPIOB_I2S3_SDAT) |         \
                                 PIN_MODE_ALTERNATE(GPIOB_I2C1_SCL) |      \
                                 PIN_MODE_ALTERNATE(GPIOB_I2C1_SDA) |      \
                                 PIN_MODE_ALTERNATE(GPIOB_SDIO_D4) |      \
                                 PIN_MODE_ALTERNATE(GPIOB_SDIO_D5) |      \
                                 PIN_MODE_OUTPUT(GPIOB_EMMC_RST) |         \
                                 PIN_MODE_INPUT(GPIOB_SPI2_INT) |         \
                                 PIN_MODE_ALTERNATE(GPIOB_SPI2_NSS) |      \
                                 PIN_MODE_ALTERNATE(GPIOB_SPI2_SCK) |      \
                                 PIN_MODE_ALTERNATE(GPIOB_SPI2_MISO) |      \
                                 PIN_MODE_ALTERNATE(GPIOB_SPI2_MOSI))
#define VAL_GPIOB_OTYPER        (PIN_OTYPE_PUSHPULL(GPIOB_LED2) |         \
                                 PIN_OTYPE_PUSHPULL(GPIOB_LED1) |          \
                                 PIN_OTYPE_PUSHPULL(GPIOB_PWR_IND) |          \
                                 PIN_OTYPE_PUSHPULL(GPIOB_I2S3_SCLK) |      \
                                 PIN_OTYPE_PUSHPULL(GPIOB_OSC_EN) |         \
                                 PIN_OTYPE_PUSHPULL(GPIOB_I2S3_SDAT) |      \
                                 PIN_OTYPE_OPENDRAIN(GPIOB_I2C1_SCL) |     \
                                 PIN_OTYPE_OPENDRAIN(GPIOB_I2C1_SDA) |     \
                                 PIN_OTYPE_PUSHPULL(GPIOB_SDIO_D4) |          \
                                 PIN_OTYPE_PUSHPULL(GPIOB_SDIO_D5) |          \
                                 PIN_OTYPE_PUSHPULL(GPIOB_EMMC_RST) |         \
                                 PIN_OTYPE_PUSHPULL(GPIOB_SPI2_INT) |         \
                                 PIN_OTYPE_PUSHPULL(GPIOB_SPI2_NSS) |         \
                                 PIN_OTYPE_PUSHPULL(GPIOB_SPI2_SCK) |         \
                                 PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MISO) |      \
                                 PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MOSI))
#define VAL_GPIOB_OSPEEDR       (PIN_OSPEED_100M(GPIOB_LED2) |             \
                                 PIN_OSPEED_100M(GPIOB_LED1) |            \
                                 PIN_OSPEED_2M(GPIOB_PWR_IND) |               \
                                 PIN_OSPEED_100M(GPIOB_I2S3_SCLK) |         \
                                 PIN_OSPEED_100M(GPIOB_OSC_EN) |            \
                                 PIN_OSPEED_100M(GPIOB_I2S3_SDAT) |        \
                                 PIN_OSPEED_100M(GPIOB_I2C1_SCL) |         \
                                 PIN_OSPEED_100M(GPIOB_I2C1_SDA) |         \
                                 PIN_OSPEED_100M(GPIOB_SDIO_D4) |           \
                                 PIN_OSPEED_100M(GPIOB_SDIO_D5) |           \
                                 PIN_OSPEED_100M(GPIOB_EMMC_RST) |          \
                                 PIN_OSPEED_2M(GPIOB_SPI2_INT) |              \
                                 PIN_OSPEED_100M(GPIOB_SPI2_NSS) |          \
                                 PIN_OSPEED_100M(GPIOB_SPI2_SCK) |          \
                                 PIN_OSPEED_100M(GPIOB_SPI2_MISO) |         \
                                 PIN_OSPEED_100M(GPIOB_SPI2_MOSI))
#define VAL_GPIOB_PUPDR         (PIN_PUPDR_FLOATING(GPIOB_LED2) |           \
                                 PIN_PUPDR_FLOATING(GPIOB_LED1) |          \
                                 PIN_PUPDR_PULLUP(GPIOB_PWR_IND) |            \
                                 PIN_PUPDR_FLOATING(GPIOB_I2S3_SCLK) |      \
                                 PIN_PUPDR_FLOATING(GPIOB_OSC_EN) |         \
                                 PIN_PUPDR_FLOATING(GPIOB_I2S3_SDAT) |      \
                                 PIN_PUPDR_FLOATING(GPIOB_I2C1_SCL) |      \
                                 PIN_PUPDR_FLOATING(GPIOB_I2C1_SDA) |      \
                                 PIN_PUPDR_FLOATING(GPIOB_SDIO_D4) |        \
                                 PIN_PUPDR_FLOATING(GPIOB_SDIO_D5) |        \
                                 PIN_PUPDR_FLOATING(GPIOB_EMMC_RST) |       \
                                 PIN_PUPDR_PULLUP(GPIOB_SPI2_INT) |           \
                                 PIN_PUPDR_FLOATING(GPIOB_SPI2_NSS) |       \
                                 PIN_PUPDR_FLOATING(GPIOB_SPI2_SCK) |       \
                                 PIN_PUPDR_FLOATING(GPIOB_SPI2_MISO) |      \
                                 PIN_PUPDR_FLOATING(GPIOB_SPI2_MOSI))
#define VAL_GPIOB_ODR           (PIN_ODR_HIGH(GPIOB_LED2) |                 \
                                 PIN_ODR_HIGH(GPIOB_LED1) |                \
                                 PIN_ODR_HIGH(GPIOB_PWR_IND) |                \
                                 PIN_ODR_HIGH(GPIOB_I2S3_SCLK) |            \
                                 PIN_ODR_HIGH(GPIOB_OSC_EN) |               \
                                 PIN_ODR_HIGH(GPIOB_I2S3_SDAT) |            \
                                 PIN_ODR_HIGH(GPIOB_I2C1_SCL) |            \
                                 PIN_ODR_HIGH(GPIOB_I2C1_SDA) |            \
                                 PIN_ODR_HIGH(GPIOB_SDIO_D4) |                \
                                 PIN_ODR_HIGH(GPIOB_SDIO_D5) |                \
                                 PIN_ODR_HIGH(GPIOB_EMMC_RST) |               \
                                 PIN_ODR_HIGH(GPIOB_SPI2_INT) |               \
                                 PIN_ODR_HIGH(GPIOB_SPI2_NSS) |               \
                                 PIN_ODR_HIGH(GPIOB_SPI2_SCK) |               \
                                 PIN_ODR_HIGH(GPIOB_SPI2_MISO) |              \
                                 PIN_ODR_HIGH(GPIOB_SPI2_MOSI))
#define VAL_GPIOB_AFRL          (PIN_AFIO_AF(GPIOB_LED2, 0) |               \
                                 PIN_AFIO_AF(GPIOB_LED1, 0) |              \
                                 PIN_AFIO_AF(GPIOB_PWR_IND, 0) |              \
                                 PIN_AFIO_AF(GPIOB_I2S3_SCLK, 6) |          \
                                 PIN_AFIO_AF(GPIOB_OSC_EN, 0) |             \
                                 PIN_AFIO_AF(GPIOB_I2S3_SDAT, 6) |          \
                                 PIN_AFIO_AF(GPIOB_I2C1_SCL, 4) |          \
                                 PIN_AFIO_AF(GPIOB_I2C1_SDA, 4))
#define VAL_GPIOB_AFRH          (PIN_AFIO_AF(GPIOB_SDIO_D4, 12) |           \
                                 PIN_AFIO_AF(GPIOB_SDIO_D5, 12) |           \
                                 PIN_AFIO_AF(GPIOB_EMMC_RST, 0) |             \
                                 PIN_AFIO_AF(GPIOB_SPI2_INT, 0) |             \
                                 PIN_AFIO_AF(GPIOB_SPI2_NSS, 5) |             \
                                 PIN_AFIO_AF(GPIOB_SPI2_SCK, 5) |             \
                                 PIN_AFIO_AF(GPIOB_SPI2_MISO, 5) |          \
                                 PIN_AFIO_AF(GPIOB_SPI2_MOSI, 5))
User avatar
Giovanni
Site Admin
Posts: 14892
Joined: Wed May 27, 2009 8:48 am
Has thanked: 1202 times
Been thanked: 996 times

Re: STM32F4 Initialization

Post by Giovanni »

This is strange because board files do not depend on anything external. Not sure abut what the problem could be, you should verify if the GPIO registers are initialized correctly.

Giovanni
ucasano
Posts: 57
Joined: Mon Aug 06, 2012 1:05 pm
Has thanked: 1 time

Re: STM32F4 Initialization

Post by ucasano »

I forget to tell you I run another application (bootloader) just before the main app.

But the board configuration files are always the same.
-g
ucasano
Posts: 57
Joined: Mon Aug 06, 2012 1:05 pm
Has thanked: 1 time

Re: STM32F4 Initialization

Post by ucasano »

I do initialize SPI device in a separate process: could this be the problem of incorrect initialization of spi pins?
-g
User avatar
Giovanni
Site Admin
Posts: 14892
Joined: Wed May 27, 2009 8:48 am
Has thanked: 1202 times
Been thanked: 996 times

Re: STM32F4 Initialization

Post by Giovanni »

The SPI driver does not initialize pins so it should not matter.

Giovanni
Post Reply