2016-01-29 07:30 AM
Hello,
I'm trying
for several
days
to set up the
pin
PA8
(
STM32F4
) asoutput
but
I do not see
anything with
an oscilloscope.
Here is the
code I use
to configure the
pin
:
#define PORT_IO_A_8 ((Uint32)0)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
Uint32 port_a_mask =
(PORT_IO_A_0 << 0 ) |
(PORT_IO_A_1 << 1 ) |
(PORT_IO_A_2 << 2 ) |
(PORT_IO_A_3 << 3 ) |
(PORT_IO_A_4 << 4 ) |
(PORT_IO_A_5 << 5 ) |
(PORT_IO_A_6 << 6 ) |
(PORT_IO_A_7 << 7 ) |
(PORT_IO_A_8 << 8 ) |
(PORT_IO_A_9 << 9 ) |
(PORT_IO_A_10 << 10) |
(PORT_IO_A_11 << 11) |
(PORT_IO_A_12 << 12) |
(PORT_IO_A_13 << 13) |
(PORT_IO_A_14 << 14) |
(PORT_IO_A_15 << 15);
GPIO_InitStructure.GPIO_Pin = ((uint32_t)port_a_mask) & 0xFFFF9FFF;
//JTMS-SWDIO, JTCK-SWCLK
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = (~((uint32_t)port_a_mask)) & 0xFFFF9FFF;
//JTMS-SWDIO, JTCK-SWCLK
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOA, &GPIO_InitStructure);
I use
the following function
to switch between
high or low level
.
1.
GPIO_WriteBit(GPIOA,GPIO_Pin_8, Bit_RESET);
2.
//GPIO_WriteBit(GPIOA,GPIO_Pin_8, Bit_SET);
The pin is
always
at the low level
.I tested
with
another pin
as
PA0
or
PA1
and
it works
well
.
I hope you can help me.
Cordially
Guillaume #gpio #!stm32f4discovery-!fsmc2016-01-29 07:52 AM
>
#define PORT_IO_A_8 ((Uint32)0)
Eh?
----
Do you have a debugger?
Connect to the mcu, stop it, reset, go to the peripheral registers window, now
- in RCC->AHB1ENR set GPIOAEN to 1
- in GPIOA->MODER, set MODER8 to 01 (i.e. whole MODER will become 0xA8010000)
- in GPIOA->ODR, write to ODR8 1 then 0 repeatedly - and watch the output toggling
JW
2016-01-29 08:26 AM
Thank you for your response.
I use system workbench for stm32.Your
procedure
works well.
But I do
not see why
my code
does not work on
the
PA8
pin
while it
works on
other pins
.
2016-01-29 08:53 AM
Your code is so muddled, and unnecessary convoluted. I'd ask for complete code, but I'm afraid to wade deeper.
Just enable the pin and set itGPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_WriteBit(GPIOA,GPIO_Pin_8, Bit_RESET);
//GPIO_WriteBit(GPIOA,GPIO_Pin_8, Bit_SET);
Quit with the masking stuff, you are passing a pin vector of the ONES you want to configure, it is not going to change your other pins, and you can call the GPIO_Init() function separately for each group of pin(s) you want to use.
Now if this doesn't work perhaps you can provide some more details about your specific board, or you can refer to the schematic, and check for other connectivity or solder bridges being used on PA8.
2016-01-29 09:21 AM
I just
identify the problem.
I use the
USB
host
library
.In
this library
the mode of
PA8
pin is
changed. (usb_bsp.c)
/* Configure SOF VBUS ID DM DP Pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 |
GPIO_Pin_9 |
GPIO_Pin_11 |
GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_OTG1_FS) ;
Can I
still use
the
PA8
pin
?
2016-01-29 10:53 AM
Can I
still use
the
PA8
pin
? What is it being used for in this code, and what is it being used for in your board design? The ''board support'' needs to match the board it's being applied too. If PA8 isn't being used for USB (SOF), then you need to strip that stuff out, right?