Skip to main content
KMill
Senior
July 16, 2025
Solved

PORT D Read errors.

  • July 16, 2025
  • 4 replies
  • 711 views

I have an STM32CubeIDE project using HAL for a STM32G071RBT6

I have Port D bits 0 to 6 set up for GPIO Input, with pull-up enabled.

Screenshot 2025-07-16 at 16.20.46.png

Screenshot 2025-07-16 at 16.20.13.png

In hardware these are connected to an 8-WAY dip switch, which when each switch is "on" connects the respective pin to GND. (PB3[STOPBITS] is connected to the 8th switch)

 

The issue is that when I read the port using

id = (GPIOD->IDR & 0x7F); /* Lowest 7-bits are from PORT D0-D6 */

Bits 0 and 2 are always stuck at 0.

With the board powerd off I have tested the board connctions to the chip and the dip switch, all seems OK. There is no short to GND on bits 0 and 2.

I checked the resistance on all the bits of port D and bits 0 and 2 have about 500KΩ to ground, whereas the rest of port D has about 7 MΩ

I have checked through the rest of my code and it's not doing anything else to PORT D, and the alternate-function registers (PORTD->AFR) read all zero immediately before reading from the IDR.

I have five of these boards, all made by JLCPCB (including assembly) and they all do the same thing.

What's causing the bits 0 and 2 to be stuck at 0? Does PULL UP not work on those bits? I could try hand-soldering some stronger pullups on, but it works for the other bits in port d, and it's the same on all boards!

Best answer by Andrew Neil

@KMill did you see my PS?

 

AndrewNeil_0-1752682338541.png

 

4 replies

Andrew Neil
Super User
July 16, 2025

If you measure the voltage at the STM32 pins, are they going high?

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
KMill
KMillAuthor
Senior
July 16, 2025

Thanks @Andrew Neil 

The 2 stuck pins are reading 0.24v and the rest are reading 3.26v with the swicthes open.

Andrew Neil
Super User
July 16, 2025

So the port is actually reading correctly - those bits really are at zero.

The question becomes: why are they not being pulled-up.

As a test, can they be pulled-up with an external resistor?

 

PS:

AndrewNeil_0-1752681760567.png

https://www.st.com/resource/en/datasheet/stm32g071rb.pdf#page=48

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
KMill
KMillAuthor
Senior
July 16, 2025

With a 4K7 pull up they are reading as expected (1 when switchopen, 2 when closed) but the voltage on the pins is only getting pulled up to 1.65 V (VCC is 3.3 V)

 

So yip, I agree, the quesion is what has happened to the pull ups?

Let me go read the PUDR register...

Associate II
July 16, 2025

Which board do you use?

In DS12232 section Pinouts... PD0 and PD2 are said to have an IO structure of "FT_c" where the _c means "USB Type-C PD capable" and they have an additional function of UCPD2_CC1 resp. UCPD2_CC2.

Does your board have an USB port connected to them?

Andrew Neil
Andrew NeilBest answer
Super User
July 16, 2025

@KMill did you see my PS?

 

AndrewNeil_0-1752682338541.png

 

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
KMill
KMillAuthor
Senior
July 16, 2025

AHA! A smoking gun!

Thank you - that sounds like exactly the sort of thing that would cause this. I'll try strobing that bit and see what happens.

KMill
KMillAuthor
Senior
July 16, 2025

@Andrew Neil Thank you!

The STOBE Bit was the issue.

I set the appropriate bit in SYSCFG1 and now it all works as expected.

You have saved me a lot of grief! Who would have thought the Pull-Downs would be enabled when the UCPD Device is disabled?

Screenshot 2025-07-16 at 17.29.40.png

Andrew Neil
Super User
July 16, 2025

@KMill wrote:

The STOBE Bit was the issue.


Great - please mark the solution.

 


@KMill wrote:

Who would have thought the Pull-Downs would be enabled when the UCPD Device is disabled?


Always good to check those little footnotes on the the pinout table - there's a few gotchas!

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.