Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Софтуерен ресет на STM32F407.
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13661
Страница 1 от 2

Автор:  bateAz [ Нед Мар 22, 2015 3:22 pm ]
Заглавие:  Софтуерен ресет на STM32F407.

Контролерът е STM32F407 ( от Discovery board ). Как е най-добре да се саморесетира ? Т.е най-бързо може да се стигне до ресет ?

Автор:  miro_atc [ Нед Мар 22, 2015 4:21 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

Въпросът е твърде общ... имаш много неща дето могат да се ресетват и по различни начини. Ако питаш за тотален ресет, само чрез шалтер на захранването. Принципно идеята на куртексите е да не се ползват тотални ресети, просто софта трябва да може да инициализира всичко, без да разчита че всичко е в някакво дефолт състояние. За повечето периферии имаш бит в системния контролер и може да ги ресетваш и е за препоръчване преди да почнеш да си играеш с тях да им биеш профилактично един ресет.
Имаш и една стандартна периферия наречена SCB (system control blok) и в нея имаш един регистър application interrupt/reset control май се казваше и там има бит за системен ресет. Но за да го вдигнеш в старшата част се пишеше парола. Сега съм на таблет и ми е трудно да ти ровя точния адрес на регистъра и какво се пишеше... Но това е универсален начин да ресетнеш софтуерно един куртекс.

Автор:  ps66 [ Нед Мар 22, 2015 5:01 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

bateAz написа:
Контролерът е STM32F407 ( от Discovery board ). Как е най-добре да се саморесетира ? Т.е най-бързо може да се стигне до ресет ?


не ползвам ST, но в Kinetis K60F (M4F) има регистър в за целта

void Cpu_SystemReset(void)
{
/* SCB_AIRCR: VECTKEY=0x05FA,SYSRESETREQ=1 */
SCB_AIRCR = (uint32_t)((SCB_AIRCR & (uint32_t)~(uint32_t)(
SCB_AIRCR_VECTKEY(0xFA05)
)) | (uint32_t)(
SCB_AIRCR_VECTKEY(0x05FA) |
SCB_AIRCR_SYSRESETREQ_MASK
)); /* Request system reset */
while(1) { /* Wait until reset */
}
}

ако няма подобна възможност, обикновенно ползвам watchdog-а за ресет (пишейки невалидни стойности в рег)

Автор:  TheWizard [ Нед Мар 22, 2015 8:38 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

питай Гугъл

https://www.google.bg/search?q=STM32F40 ... 220x5FA%22

Автор:  bateAz [ Нед Мар 22, 2015 9:10 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

И аз това направих - питах Гугъл и избрах готовата библиотечната функция. Като дойдат по-добри времена може и да напиша и ползвам нещо мое. Въпросът ми беше, ако някой вече се е спрял на просто и "красиво" решение.

Автор:  gicho [ Нед Мар 22, 2015 10:43 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

Код:
NVIC_SystemReset();

Автор:  ike [ Нед Мар 22, 2015 11:06 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

ps66 написа:
обикновенно ползвам watchdog-а за ресет (пишейки невалидни стойности в рег)

+1

Автор:  miro_atc [ Пон Мар 23, 2015 10:07 am ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

и с кучето става, обаче някои библиотечки/rtos си следят reset cause-a и ще ви напсуват, ако разлаете някое куче ;-)

Автор:  ike [ Пон Мар 23, 2015 2:08 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

Ами тогава викаш reset() функцията на библиотечките/rtos и всички са доволни.

Автор:  [ Пон Мар 23, 2015 6:00 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

I/O пин към RESET сигнала и шунтираш цялата какафония с буболечки и библиотечки

Автор:  woody [ Пон Мар 23, 2015 6:11 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

¶ написа:
I/O пин към RESET сигнала и шунтираш цялата какафония с буболечки и библиотечки

Това не работи (надеждно) - не можеш да осигуриш минимален импулс.

Автор:  [ Пон Мар 23, 2015 6:24 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

woody написа:
¶ написа:
I/O пин към RESET сигнала и шунтираш цялата какафония с буболечки и библиотечки

Това не работи (надеждно) - не можеш да осигуриш минимален импулс.

Защо ? Съмнясва ме да не работи надежно - RESET линията ще възприеме сигнала като RESET след определено време,
а докато не го възприеме професора би трябвало да работи и I/O пина да си стои в зададеното RESET ниво.

Автор:  Реконструктор [ Вто Мар 24, 2015 4:49 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

bateAz написа:
Контролерът е STM32F407 ( от Discovery board ). Как е най-добре да се саморесетира ? Т.е най-бързо може да се стигне до ресет ?


Ако занулиш програм каунтъра (R15) кво ще стане? :)

Автор:  miro_atc [ Вто Мар 24, 2015 5:06 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

Реконструктор написа:
bateAz написа:
Контролерът е STM32F407 ( от Discovery board ). Как е най-добре да се саморесетира ? Т.е най-бързо може да се стигне до ресет ?


Ако занулиш програм каунтъра (R15) кво ще стане? :)


боза ;-)

Ресет вектора на този проц е нула, обаче при куртексите ресет вектора сочи към табличка с 2 елемента - стек поинтер и начален адрес. Демек на адрес 0 нямаш код, а данни така че не е добра идея да джъмпваш към адрес 0.

Но дори и към правилния адрес на ресет вектора пак не е добра идея просто така да джъмпваш... Курът има нещо като хардуерен стек за ексепшъните, в който се пъха текущия приоритет при влизане в ексепшън (прекъсване). Задължително като влизаш, трябва да влизаш в по-висок приоритет. И обратно при излизане се следи дали излизаш в по-нисък.
Това нещо няма заобикаляне и ако все пак се опиташ да го прескочиш ти гърми с hard fault ексепшън.
Та ако искаш да рестартираш без да ресетваш нищо трябва да се погрижиш да симулираш "излизания" докато нивото падне до нулево и чак тогава може да джъмпнеш към ресет процедурата. Ако някой се интересува ще му дам код за чистенето... но по принцип по-добре да се мине през софтуерен или хардуерен ресет. Изключение се налага само ако умишлено искаш да избегнеш ресети.

Автор:  woody [ Вто Мар 24, 2015 10:46 pm ]
Заглавие:  Re: Софтуерен ресет на STM32F407.

¶ написа:
woody написа:
¶ написа:
I/O пин към RESET сигнала и шунтираш цялата какафония с буболечки и библиотечки

Това не работи (надеждно) - не можеш да осигуриш минимален импулс.

Защо ? Съмнясва ме да не работи надежно - RESET линията ще възприеме сигнала като RESET след определено време,
а докато не го възприеме професора би трябвало да работи и I/O пина да си стои в зададеното RESET ниво.

Ресетирането вътре е доволно сложно - комбинация от синхронно и асинхронно, с автомат (FSM) да вкарва ред.
Така най-вероятно ще се получи глич, който ще обърка всичко.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/