STM32F407 and STM32F4xx DSP and Standard Peripherals Library
I'm new on STM32F407 and STM32F4xx DSP and Standard Peripherals Library.
And now I've got some question.1) GPIO timing
When I code
GPIOF->BSRRH = 0x0100U;
GPIOF->BSRRL = 0x0100U;
GPIOF->BSRRH = 0x0100U;
GPIOF->BSRRL = 0x0100U;
GPIOF->BSRRH = 0x0100U;
GPIOF->BSRRL = 0x0100U;
I didn't see the desired signal on pin PF8.
When I place some delay between every line it works.
What is the minimum required delay?
Is there another way to force the Output?
2) IS_GPIO_PIN() in stm32f4xx_gpio.h
In stm32f4xx_gpio.h is the macro IS_GPIO_PIN() defined.
#define IS_GPIO_PIN(PIN) ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00))
But I didn't understand (((PIN) & (uint16_t)0x00) == 0x00).
This is always evaluated to true.
Can somebody explain this condition?
3) assert in GPIO_SetBits(),GPIO_ResetBits()
I use PB0-7 as data bus to an old LCD module.
So I've got the following code
void LcdData(const unsigned char uiData)
{
GPIO_ResetBits(GPIOF, 0x00FFU); //Reset data bus
GPIO_SetBits(GPIOF, uiData); //Set data bus
GPIO_SetBits( GPIOF, 0x0100U); //Set chip select
GPIO_ResetBits(GPIOF, 0x0100U); //Reset chip select
}
When I call LcdData(0x00U) I get an assert().
When I remove this assert it works fine.
Is there a reason that GPIO_SetBits() does not allowed 0x0000U as argument?
4) Not const prove function in Standard Peripherals Library
I try to initialize a port with the following code:
void init(void)
{
static const GPIO_InitTypeDef sInit =
{
GPIO_Pin_0, // uint32_t GPIO_Pin;
GPIO_Mode_OUT, // GPIOMode_TypeDef GPIO_Mode;
GPIO_Speed_2MHz,// GPIOSpeed_TypeDef GPIO_Speed;
GPIO_OType_PP, // GPIOOType_TypeDef GPIO_OType;
GPIO_PuPd_NOPULL// GPIOPuPd_TypeDef GPIO_PuPd;
};
GPIO_Init(GPIOF, &sInit);
}
But the compiler reports an incompatible with parameter
Is there a reason why GPIO_Init() is not declared with const?
void GPIO_Init(GPIO_TypeDef* const GPIOx, GPIO_InitTypeDef* const GPIO_InitStruct);
Many thanks for your answers
Reto Felix