Перейти к содержанию
    

Исключение Hard Fault на Cortex-M3

20 минут назад, Arlleex сказал:

Посмотрите - он установлен.

Я писал для общего случая.

PS: Совсем не обязательно, что у ТС-а при каждом fault-е одна и та же картина в регистрах причины fault. И вполне возможно (и судя по всему так оно и есть), что багов там несколько. И возможно они вызывают разные fault-ы.

7 минут назад, dimka76 сказал:

Не совсем. Сначала статус регистр надо прочитать, а потом регистр данных. Тогда сбросятся.

Вроде как очевидно, что раз мы знаем, что соответствующий флаг стоит (который нужно сбросить), то как мы об этом узнали (что он стоит)? Очевидно - что уже ранее прочитали регистр статуса. А значит теперь для его сброса нужно только чтение слова данных.

Нестоящий флаг сбрасывать нельзя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, jcxz said:

В мануале написано то, что я сказал. Это вам надо "см. мануал".

вам лучше быть повнимательнее иначе в работе будет много интересного.

 

это банально от 31 процессора. в разных семействах по -разному. но это уже удивительная совместимость stm ов

 

 

444.jpg

23 minutes ago, jcxz said:

В мануале написано то, что я сказал. Это вам надо "см. мануал".

вы сказали глупость и сейчас будут маневры что вас не так поняли

24 minutes ago, dimka76 said:

Не совсем. Сначала статус регистр надо прочитать, а потом регистр данных. Тогда сбросятся.

в разных семействах по - разному

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/13/2024 at 9:48 PM, firstvald said:

это банально от 31 процессора

Так здесь тема про F100

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, firstvald said:

и то я тоже не ждал подляны но FE  у меня подвесил прибор который ушел в релиз. хотя вроде бы лишнее не было включено

Странно это. В стандартном STM-овском UART прерывание по FrameError включается флажком ErrorInterruptEnable и только в режиме DMA. Ну то есть лишнее было-таки включено

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, dimka76 said:

Так здесь тема про F100

так упомянули все современные процессоры. и из за того что в разных stm это место сделано по разному каждый раз внимательно читать и разбираться.

18 minutes ago, esaulenka said:

Странно это. В стандартном STM-овском UART прерывание по FrameError включается флажком ErrorInterruptEnable и только в режиме DMA. Ну то есть лишнее было-таки включено

куб мог навтыкать. и хотя я специально ничего лишнего не включаю, в прерывании ставлю анализ и сброс всех флагов. это можно удивляться сколько угодно,  но на практике могут возникать фокусы которые попробуй поймай,  воспроизведи и пойми почему. стандартный это какой. у меня в работе проекты на  031  103 476  429 процессоры. уарты практически всегда отличаются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, esaulenka сказал:

Странно это. В стандартном STM-овском UART прерывание по FrameError включается флажком ErrorInterruptEnable и только в режиме DMA. Ну то есть лишнее было-таки включено

Это потому, что в режиме приема по прерываниям прерывания по ошибкам бесполезны - т.к. они определяются чтением регистра статуса, совместно с флагом RXNE. А в режиме DMA процессор не дергается на каждый байт, поэтому таким образом настраивается "ловушка" на различного вида ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, firstvald сказал:

вам лучше быть повнимательнее иначе в работе будет много интересного.

Как это работает в STM-ах я прекрасно знаю. И говорю на основе собственного опыта и мануала. А судя по вашим постам - вы только теоретизируете.

16 часов назад, firstvald сказал:

вы сказали глупость и сейчас будут маневры что вас не так поняли

Я сказал следующее:

19 часов назад, jcxz сказал:
20 часов назад, firstvald сказал:

в момент подцепления разъема в приемнике встают практически все флаги. и с этим надо что то делать.

Просто прочитать принятое слово и всё.

Что именно здесь по вашему является "глупостью" и почему?

И ни от чего не отказываюсь. Всё так и есть. А вот за понимание вами написанного - я ручаться не могу.

Или лучше расскажите - как следует по вашему работать с флагами в STM? Если вы реально имеете какой -то опыт, а не теоретизируете впустую.

 

16 часов назад, firstvald сказал:

так упомянули все современные процессоры. и из за того что в разных stm это место сделано по разному каждый раз внимательно читать и разбираться.

Ну вот  - сперва ляпнул глупость, а теперь начинает выкручиваться.  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, Arlleex сказал:

А в режиме DMA процессор не дергается на каждый байт, поэтому таким образом настраивается "ловушка" на различного вида ошибки.

Что является существенным недостатком UART-а STM-ов. Гораздо правильнее было бы в DMA отдавать слова данных дополненные флагами ошибок. Для каждого слова.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

46 минут назад, jcxz сказал:

Что является существенным недостатком UART-а STM-ов. Гораздо правильнее было бы в DMA отдавать слова данных дополненные флагами ошибок. Для каждого слова.

Соглашусь, но что есть, то есть...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/13/2024 at 1:36 PM, kpv said:

RXNE это не только правильный приём, но и overrun error туда может проскочить, если разрешено.

Вот как раз оно и проскакивало... одна одна из проблем... а оно отдельно не выключается...

On 8/13/2024 at 7:20 PM, firstvald said:

я из всего массива не уловил: советовали или нет. нужно сбрасывать(хотя бы сбрасывать ) вообще все возможные флаги при приеме. а это и FE  и OVR и PE.

Да, я не сбрасывал ORE...

On 8/13/2024 at 8:23 PM, jcxz said:

Как правило в любом МК эти флаги сбрасываются обычным чтением регистра принятых данных. Никакие другие сбросы для них не нужны.

Сбрасываются автоматом программной последовательностью: чтение регистра состояния и чтение регистра данных...

On 8/13/2024 at 9:27 PM, esaulenka said:

Я не понимаю, почему у вас txSize портится, но если бы вы написали if (txCnt >= txSize)  всего этого топика не было бы.

txCnt портился.
Ситуация была следующая: ведущее устройство при определенных обстоятельствах начинало постоянно без пауз что-то слать...
Ведомое устройство (которое мы сейчас ризбираем) неправильно обрабатывало прерывания (возникала ошибка Overrun) и мы попадали в функцию обработчика передачи данных, в которой не было контроля как Вы написали, в результате - переполнение и т. д.

По сути, выручил осциллограф, надо было его раньше включать 🤣

Искренне всех благодарю, спасибо большое за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...