Re: STM32F427 nefukční HAL_Delay()

Jan Waclawek konfera na efton.sk
Pátek Duben 5 14:10:43 CEST 2024


>µádné přeru±ení nepouµívám, 

OK

>No k závěru jsem do±el tím, µe v mainu mám jen dvě funkce a to 
>HAL_GPIO_TogglePin() a HAL_Delay(); ta první funguje, druhá nikoliv.

Odkial presne viete, ze ta prva funkcia funguje a ta druha nie?

>Ano to by bylo celkem logické, ale proč by to tedy na Nucleu s F446 
>krokování fungovalo i přes HAL_Delay() 

A fungovalo?

A ako to krokovanie presne funguje? (Toto je zakerna a brutalne zlozita
otazka, na ktoru v mnohych situaciach neviem odpoved ani pri nastrojoch,
ktore ja pouzivam).

"Pres HAL_Delay()" moze fungovat tak, ze si debugger vytvori breakpoint na
instrukcii za volanim HAL_Delay a spusti beh, vtedy prerusenia bezia; t.j.
sa nejedna o single-step, ked su prerusenia zakazane. Niektore debuggery
vsak robia seriu single-step-ov napr. v pripade, ked je funkcia
inlineovana, t.j. sa nejedna o volanie "podprogramu" ani v asm.

Debugging pomocou toho zabudovaneho on-chip debugu ani zdaleka nie je taka
trivialna zalezitost akou by sa v tych IDE na prvy pohlad zdalo.

---

Skusme problem riesit z inej strany, t.j. nie zo strany symptomov ale zo
strany ocakavaneho zdroja funkcnosti: ten uwTick ma byt inkrementovany v
nejakom preruseni od casovaca (nemusi to byt SysTick, pokial viem, da sa
nastavit aj niektory timer - nemam CubeMX, toto mam len z citania fora).
Takze skuste najst kus programu, v ktorom sa uwTick inkrementuje. Toto
moze byt iny subor nez ten, co na prvy pohlad vidite; skutocne prerusenia
CubeMX/CubeIDE dava do extra suboru (mozno stm32f4xx_it.c). Dajte si
breakpoint na ten bod a skuste spustit. Ak sa to tam zastavi, tak sa
uwTick inkrementuje a problem je inde. Ak sa to tam nezastavi, tak je
problem v generovani prerusenia; treba sa pozriet na registre zdrojovej
periferie (napr Systick) ze ci bezi a ci tam v zdroji je povolene
prerusenie; a  ak oboje je ano, tu
http://www.efton.sk/STM32/gotcha/g16.html je zoznam dalsich otazok.

Ja viem, je toho velmi vela; experimentujte, dajte vediet vysledky a
pytajte sa.

wek



PS. >>[nedoporucujem Cube]
>Ano tomu rozumím, ale neµ načtu celou dokumentaci která má vět±í stovky 
>stran, tak to bude trvat věky a/proto jsem vzal je ST klikací nástroj, 
>kde si rozchodím jednodu±±e periferie které potřebuji v nějakém 
>primitivním demo kódu, abych byl schopen dooµivit svůj HW, nechci a 
>pravděpodobně ani nebudu psát výsledný FW.

No a osvedcil sa Vam tento pristup?



>Dne 05.04.2024 v 13:15 Jan Waclawek napsal(a):
>> Aha, a este to moze byt aj chybny zaver z debugovania.
>>
>>>>> Do±el jsem postupně aµ k funkci HAL_GetTick, která čte volatile
>>>>> registr uwTick, který je stále nula.
>> Ak krokujete HAL_Delay() v debuggeri, tak sa SysTick() nikdy nevyvola, lebo
>> pocas krokovania su prerusenia obvykle zakazane (malo by sa to dat niekde
>> povolit, ale defaultne to byva zakazane, lebo krokovat s povolenymi
>> preruseniami je v akomkolvek realnom programe viacmenej nemozne). Takze je
>> mozne, ze Vas problem je inde, a nie v HAL_Delay(), resp. skuste popisat,
>> ako ste dosli k zaveru ze to je HAL_Delay().
>>
>> wek
>>
>>



Další informace o konferenci Hw-list