| Микроконтролери и електроника 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. | |||||||||
не ползвам 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. | |||||||||
|
||||||||||
| Автор: | ike [ Нед Мар 22, 2015 11:06 pm ] | |||||||||
| Заглавие: | Re: Софтуерен ресет на STM32F407. | |||||||||
+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. | |||||||||
Това не работи (надеждно) - не можеш да осигуриш минимален импулс. |
||||||||||
| Автор: | ¶ [ Пон Мар 23, 2015 6:24 pm ] | ||||||||||||||||||
| Заглавие: | Re: Софтуерен ресет на STM32F407. | ||||||||||||||||||
Защо ? Съмнясва ме да не работи надежно - RESET линията ще възприеме сигнала като RESET след определено време, а докато не го възприеме професора би трябвало да работи и I/O пина да си стои в зададеното RESET ниво. |
|||||||||||||||||||
| Автор: | Реконструктор [ Вто Мар 24, 2015 4:49 pm ] | |||||||||
| Заглавие: | Re: Софтуерен ресет на STM32F407. | |||||||||
Ако занулиш програм каунтъра (R15) кво ще стане? |
||||||||||
| Автор: | miro_atc [ Вто Мар 24, 2015 5:06 pm ] | ||||||||||||||||||
| Заглавие: | Re: Софтуерен ресет на STM32F407. | ||||||||||||||||||
боза Ресет вектора на този проц е нула, обаче при куртексите ресет вектора сочи към табличка с 2 елемента - стек поинтер и начален адрес. Демек на адрес 0 нямаш код, а данни така че не е добра идея да джъмпваш към адрес 0. Но дори и към правилния адрес на ресет вектора пак не е добра идея просто така да джъмпваш... Курът има нещо като хардуерен стек за ексепшъните, в който се пъха текущия приоритет при влизане в ексепшън (прекъсване). Задължително като влизаш, трябва да влизаш в по-висок приоритет. И обратно при излизане се следи дали излизаш в по-нисък. Това нещо няма заобикаляне и ако все пак се опиташ да го прескочиш ти гърми с hard fault ексепшън. Та ако искаш да рестартираш без да ресетваш нищо трябва да се погрижиш да симулираш "излизания" докато нивото падне до нулево и чак тогава може да джъмпнеш към ресет процедурата. Ако някой се интересува ще му дам код за чистенето... но по принцип по-добре да се мине през софтуерен или хардуерен ресет. Изключение се налага само ако умишлено искаш да избегнеш ресети. |
|||||||||||||||||||
| Автор: | woody [ Вто Мар 24, 2015 10:46 pm ] | |||||||||||||||||||||||||||
| Заглавие: | Re: Софтуерен ресет на STM32F407. | |||||||||||||||||||||||||||
Ресетирането вътре е доволно сложно - комбинация от синхронно и асинхронно, с автомат (FSM) да вкарва ред. Така най-вероятно ще се получи глич, който ще обърка всичко. |
||||||||||||||||||||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|