Sida 1 av 1

STM32 GPIO problem

Postat: 3 oktober 2022, 15:43:37
av mkk
Hej alla glada!

Jag sitter med en STM32F401CEU6 (Black PIll). Denna har 10 GPIO confade open drain. På dessa sitter externa 10k pullups till 5 Volt (eller kanske blir 10 eller 12, oklart än och jag har samma problem oavsett spänning). Således förväntar jag mig en spänning på utgångarna som är 0 eller 5/10/12V, vilket oxå är fallet (STM32an har tydligen inga skyddsdioder på pinnarna) på 9 av mina 10 utgångar. En av dem (PB2) vägrar gå över 2.5 Volt!! :cry: Detta är så oavsett om jag konfar pinnen som oanvänd, ingång eller open drain utgång. Om jag dock sätter push pull ut så får jag de väntade 3.3v ut. Men den noden kan jag aldrig få till mina önskade 5+ volt.

Min fråga, har jag förstört pinnen på ngt sätt, eller är det normalt beteende för denna MCU? Jag har beställt en likadan till för att testa, men det tar en mindre evighet att få hem den... Finns ngn STM32 kung som vet?

Jag vet att det är okristligt att lägga så höga spänningar över ingångarna, men det borde funka. I nästa hw kommer det sitta n-ch FET-ar på utgångarna, för att skydda MCUn. Men man undrar ju ändå... :humm:

Re: STM32 GPIO problem

Postat: 3 oktober 2022, 16:24:56
av Klas-Kenny
Databladet säger absolut max Vdd+4.0 V på dessa pinnar.
Så du får ej överstiga 7.3V på pinnarna om du matar med 3.3V.

Har du kopplat till 12V är det nog stor risk att utgången gått sönder.

Re: STM32 GPIO problem

Postat: 3 oktober 2022, 19:20:23
av Wihelm
STM32 är 3.3V MCU som tål 5V på många ingångar inte alla. Så ut får du aldig mera än 3.3V ut. Vill du ha mera får du ha externa mosfet.

Re: STM32 GPIO problem

Postat: 3 oktober 2022, 21:14:08
av Klas-Kenny
Kollade just schemat för Black Pill:
https://stm32-base.org/assets/pdf/board ... l_V2.0.pdf


Tydligen sitter där ett pull-down på 10k på just PB2. Det är sannolikt förklaringen till problemet då. Om du matar 5V till ditt 10k pull-up så är 2.5V precis som förväntat.

Men faktum kvarstår, du får inte mata in 10 eller 12V på de pinnarna, då lär något gå sönder.
Men med 5V till dina pull-up så ska det fungera fint, men inte just PB2. Du får använda en annan pinne istället.

Re: STM32 GPIO problem

Postat: 3 oktober 2022, 23:01:52
av ToPNoTCH
Man kan inte låta bli att undra varför dom pillat dit en pull-down där.
Ologiskt.

Som ett tillägg till mycket bra svar tidigare, tänk på att när man håller på att närma sig maximum rating på spänning, så behöver man ha väldigt klart för sig hur mycket jitter och spikar man har på denna spänning.
Man fångar inte sådant med multimeter utan kräver ett skåp.

Re: STM32 GPIO problem

Postat: 3 oktober 2022, 23:49:22
av Mr Andersson
Inte alls ologiskt. PB2 är BOOT1-pinne.
En bättre fråga är varför ST valt en GPIO-pinne för den funktionen istället för en dedikerad pinne som BOOT0 är.
BOOT1BOOT0
x0Main Flash memory
01System memory
11Embedded SRAM

Re: STM32 GPIO problem

Postat: 4 oktober 2022, 00:07:05
av ToPNoTCH
Hehe
Jag som till och med bemödade mig att kolla databladet i tabell 9 "Alternate functions".

Boot1 är "Additional function" och mycketriktigt framgår detta i tabell 8

Jag tror dom har så på i princip alla sina MCU.
Jag har aldrig haft behov av att använda boot1 och på modeller med få pinnar så känns det ju rätt.
Boot0 har man dock (med viss skam) fått lov att använda när man efter ett tag kommer på att det inte är smart att sätta mcu i deepsleep det första man gör i koden :roll:

Re: STM32 GPIO problem

Postat: 4 oktober 2022, 07:43:27
av AndLi
Mr Andersson skrev: 3 oktober 2022, 23:49:22 Inte alls ologiskt. PB2 är BOOT1-pinne.
En bättre fråga är varför ST valt en GPIO-pinne för den funktionen istället för en dedikerad pinne som BOOT0 är.
BOOT1BOOT0
x0Main Flash memory
01System memory
11Embedded SRAM
För att om man verkligen behöver maxa antalet gpio så är det ju onödigt att slösa en på boot...

Re: STM32 GPIO problem

Postat: 4 oktober 2022, 08:22:49
av Wihelm
Nu finns ju STM32F401 i 48, 64 eller 100 pinars utförande.
Vill man ha färdiga kort rekomenderar jag ST egna Nucleo kort med inbyggd debugger/progammerare
https://www.st.com/en/ecosystems/stm32- ... l#overview

Re: STM32 GPIO problem

Postat: 6 oktober 2022, 17:47:22
av mkk
Wihelm skrev: 3 oktober 2022, 19:20:23 STM32 är 3.3V MCU som tål 5V på många ingångar inte alla. Så ut får du aldig mera än 3.3V ut. Vill du ha mera får du ha externa mosfet.
De är open drain och externt pullade up till en högre spänning. Det går som sagt fint på alla andra utgångar. Men på just en så max 2.5 V, och i push-pull hela vägen till 3.3v. Knepigt.

Re: STM32 GPIO problem

Postat: 6 oktober 2022, 17:56:53
av mkk
Klas-Kenny skrev: 3 oktober 2022, 21:14:08 Kollade just schemat för Black Pill:
https://stm32-base.org/assets/pdf/board ... l_V2.0.pdf


Tydligen sitter där ett pull-down på 10k på just PB2. Det är sannolikt förklaringen till problemet då. Om du matar 5V till ditt 10k pull-up så är 2.5V precis som förväntat.

Men faktum kvarstår, du får inte mata in 10 eller 12V på de pinnarna, då lär något gå sönder.
Men med 5V till dina pull-up så ska det fungera fint, men inte just PB2. Du får använda en annan pinne istället.
Aha, en pull down för boot. Tusan, annars kunde jag ju opererat bort den. BlackPillen är en ryggsäck på ett custom PCB, så byta pinne är nytt PCB. Då kan jag lika gärna göra ett riktigt drivsteg för varje IO. Är ändå inte nöjd med flankerna från pullupen.. Slarvigt av mig att missa det i schemat. Tack till dig!! :tumupp: Ska verifiera med lite olika spänningar och pullup värden. Är det konsekvent motsv 10k ner så är det svaret. Om nivån ligger kvar på 2.5v oavsett så är det ngt i ingångsteget på just den pinnen.

Re: STM32 GPIO problem

Postat: 6 oktober 2022, 21:26:27
av Mr Andersson
Om du bara startar från flash (SW2 öppen enligt schemat) kan du ta bort PD-motståndet på PB2. Med BOOT0 låg har BOOT1 ingen funktion.

Re: STM32 GPIO problem

Postat: 7 oktober 2022, 11:07:53
av adent
Jag har alltid tyckt att open drain är lite useless om man ändå inte får ha högre spänning på pinnen än var processorn matas med ungefär.
Friflytandeheten kan ju uppnås genom att växla mellan output-låg och input-no-pull-up/down istället.