Re: STM32F427 nefukční HAL_Delay()

Libor xlibor na tiscali.cz
Pátek Duben 5 14:44:35 CEST 2024


Dne 05.04.2024 v 14:10 Jan Waclawek napsal(a):
>> ľá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?
Tu první jsem schopen krokovat, a dělá co má dělat. Když jí dám za 
HAL_Delay, tak se nevykoná ani bez debugu.
>
>> 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?

No, fungovalo  minimálně tak, že jsem byl schopem jít přes Delay dále, 
co to dělalo skutečně uvnitř netuším, nijak jsem to nezkoumal ani nebylo 
třeba.
Používal jsem to víceméňe jen na čekání třeba po nastavení nějaké hrany 
případně obecné zpomalení programu, nějakou přesnost to nevyžadovalo.
>
> 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

Ano, breakpoint jsem zkoušel, nezastavilo se to...

Tu inkrementaci od časovače taktéž, bohužel taky bez úspěchu.

SystinckHandler() a v něm se volá HAL_IncTick(), jak píšete v dalším mailu.

> 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.
Provedu :-)
> 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?

No víceméně ano, až doteď. Je to sic takový Arduino Style, ale stejně 
jako u Arduina to prozatím byla rychlá cesta k požadovanému výsledku. 
Což je pto mě jako spíše neprogramátora naprosto vyhovující.

Kdybych byl full-time FW, tak mám taky raději, když to mám plně pod 
kontrolou a vím přesně co procesor dělá, ale pro mé občasné použití je 
to neprůchodné. To už tam raději přehodím ten F446Z z nuclea, kde 
problém evidentně není.

>
>
>
>> 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
>>>
>>>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list

Děkuji za snahu, zkusím nastudovat a odkrokovat tu inicializaci hodin a 
přerušení, třeba na něco narazím.

Libor



Další informace o konferenci Hw-list