2015-03-26 07:48 AM
Dear All,
I am new to an embedded world in general and to the STM32F4xx controllers in particular. In order to learn the trade, I got the STM32429I-Discovery board and along with the hardware, I have installed:
emIDE development environment version 2.20
STM32F4xx DSP and Peripherals Library ver. 1.5.0 ( 06 March�15)
STM32Cube version 1.5.0
And other tools for flashing/monitoring the board
I found an example in (which is not exactly for the Discovery board) :
\STM32F4xx_DSP_StdPeriph_Lib\Project\STM32F4xx_StdPeriph_Examples\GPIO\GPIO_IOToggle added all (I hope) required *.h , and *c files, and tried to build the binary. The compiler failed to produce a valid output, and instead I got the following error message:C:\Users\Work\STM32F4xx_DSP_StdPeriph_Lib\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c: In function 'GPIO_SetBits':
C:\Users\Work\STM32F4xx_DSP_StdPeriph_Lib\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c:418:8: error: 'GPIO_TypeDef' has no member named 'BSRRL'
The gcc compiler includes the file stm32f429xx.h where the �GIO_TypeDef� is defined.
It seems that the stm32f4xx_gpio.c is broken because the whole file uses the old register definition.Extra compiler &sharpdefines:
DEBUG=1
USE_STDPERIPH_DRIVER
USE_STM32F429_439xx
STM32F429xx
How to fix this issue ? Or maybe I did miss something ?
Your help is highly appreciated.
Cheers,
Darek #stm32f4xx_gpio2015-03-26 08:46 AM
You seem to be mixing and matching incompatible library versions and include files.
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h...
/**
* @brief General Purpose I/O
*/
typedef struct
{
__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */
__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */
__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */
__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */
__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */
__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */
__IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */
__IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */
__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */
} GPIO_TypeDef;
...
You need to use a coherent pairing of library code, and make sure that the include paths configured into the project/compiler pull the right files from the correct directories.