cancel
Showing results for 
Search instead for 
Did you mean: 

Cannot find a clear mapping from physical ports/pins to the software GPIO pins

kyrkap
Associate II

Hello everyone,

I am new to STM32 architecture and configuration. I am trying to configure new GPIO ports and pins in an STM32H745i-DISCO board. I had some previous code for the pin configuration, but I could not 100% map it to the user manual for the board. The code is the following. I could not match these definitions to any from the manual. Could anyone help me with the mapping for pins D0-D15 on the board? Thank you very much

 


#define LD6_Port GPIOD
#define LD7_Port GPIOI
#define LD8_Port GPIOB

#define LD9_Port GPIOC
#define LD10_Port GPIOA

#define B1_Port GPIOC

#define LD6_Pin GPIO_PIN_3
#define LD7_Pin GPIO_PIN_2
#define LD8_Pin GPIO_PIN_15

 

 

14 REPLIES 14

Just with the HAL_GPIO_WritePin function you mean? D10 is working perfectly (new pin). D14 and 15 not at all

 

Please show your code with HAL implementation by toggling GPIOD pin 12 and 13. They correspond respectively to CN2/D15 and D14.

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.
typedef unsigned int uint;
typedef unsigned int uint32;
typedef uint16_t uint16;
typedef uint8_t uint8;
typedef uint8_t byte;

#define LD6_Port GPIOD
#define LD7_Port GPIOI
#define LD8_Port GPIOB

#define LD9_Port GPIOD
#define LD10_Port GPIOD

#define B1_Port GPIOC

#define LD6_Pin GPIO_PIN_3
#define LD7_Pin GPIO_PIN_2
#define LD8_Pin GPIO_PIN_15

#define LD9_Pin GPIO_PIN_13 
#define LD10_Pin GPIO_PIN_12 

#define B1_Pin GPIO_PIN_13

typedef struct GPIO_Pin {
	GPIO_TypeDef* port;
	uint16_t pin;
	GPIO_PinState initialState;
	uint32_t state;
} GPIO_Pin;

GPIO_Pin outputs[] = {
	{.port = LD6_Port, .pin = LD6_Pin, .initialState = GPIO_PIN_SET, .state = 0}, 
	{.port = LD7_Port, .pin = LD7_Pin, .initialState = GPIO_PIN_SET, .state = 0},
	{.port = LD8_Port, .pin = LD8_Pin, .initialState = GPIO_PIN_RESET, .state = 0},
	{.port = LD9_Port, .pin = LD9_Pin, .initialState = GPIO_PIN_RESET, .state = 0},
	{.port = LD10_Port, .pin = LD10_Pin, .initialState = GPIO_PIN_RESET, .state = 0},
};

const uint8_t outputCount = sizeof(outputs) / sizeof(GPIO_Pin);

void initOutputs() {

	// Common settings
	GPIO_InitTypeDef gpioInit = { 0 };
	gpioInit.Mode = GPIO_MODE_OUTPUT_PP;
	gpioInit.Pull = GPIO_NOPULL;
	gpioInit.Speed = GPIO_SPEED_FREQ_LOW;


	for (uint16 i = 0; i < outputCount; i++) {
		HAL_GPIO_WritePin(outputs[i].port, outputs[i].pin, outputs[i].initialState);
		gpioInit.Pin = outputs[i].pin;
		HAL_GPIO_Init(outputs[i].port, &gpioInit);
	}
}

void toggleLed(GPIO_Led led) {
	HAL_GPIO_TogglePin(outputs[led].port, outputs[led].pin);
}

void setLed(GPIO_Led led, GPIO_State state) {
	HAL_GPIO_WritePin(outputs[led].port, outputs[led].pin, state == LOW ? GPIO_PIN_RESET : GPIO_PIN_SET);
	if (state != outputs[led].initialState) {
		outputs[led].state = 50;
	}
}

No.

I requested a test like this in a while loop in main.c:

 

while(1)
{
  HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
  HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);
  HAL_Delay(500);
}

 

Are you seeing GPIOD pin12/pin13 are toggling?

 

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.
SofLit
ST Employee

FYI,
This is just to confirm my suspicion in my previous comment regarding the discrepancy in the Arduino D0/D1 CN6 connector in table 8: PB6 and PB7 will be respectively replaced by PB10 and PB11. Also USART1 will be replaced by USART3.
The internal Ticket 183533 has been opened to fix the issue.

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.