реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> stm32 ADC Hard_Fault
x893
сообщение Nov 23 2015, 21:37
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Так это уже совсем просто. У вас только Timer2 и ADC1 инициализируются, значит два прерывания должно прилететь.
Для простоты поставьте в начале программы
DBGMCU_APB1PeriphConfig(DBGMCU_TIM2_STOP, ENABLE)
и breakpoint на TIM2_IRQ и ADC_IRQ
и смотрите что там происходит

Go to the top of the page
 
+Quote Post
Reystlin
сообщение Nov 23 2015, 23:30
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 6-09-15
Пользователь №: 88 307



вычислил, что проблема в строках
data_adc1 = data_adc1*1.365;
data_adc2 = data_adc2*1.365;

сделал вот так
data_adc1 = data_adc1*(uint16_t)1.365;
data_adc2 = data_adc2*(uint16_t)1.365;
заработалоsm.gif
хотя, что самое странное, пару недель назад этот код работал без проблем%)
Спасибо большое x893

Сообщение отредактировал Reystlin - Nov 23 2015, 23:30
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 24 2015, 00:40
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Перед умножением коэффициент привели к целой единице - операция выкинулась.
Целочисленное масштабирование выглядело бы так:
data_adc1 = data_adc1 * 1365 / 1000;
Go to the top of the page
 
+Quote Post
Reystlin
сообщение Nov 24 2015, 04:54
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 6-09-15
Пользователь №: 88 307



Спасибо, Genadi Zawidowski
а есть ли мысли из-за чего изначально все могло работать с этим-же кодом?
я к своему проекту прикручивал экнодер и начала вываливаться ошибка Hard_Fault, хотя АЦП совершенно не трогал
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 24 2015, 08:04
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



В обработчике прерывания АЦП поищите... Выдайте в отладочный компорт плюсик в начале и минус в конце - скорее всего валится там.
Go to the top of the page
 
+Quote Post
Reystlin
сообщение Nov 24 2015, 12:16
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 6-09-15
Пользователь №: 88 307



строку в которой валится я нашел: data_adc1 = data_adc1*1.365; а вот почему не пойму
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 24 2015, 13:11
Сообщение #22


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Что-то припоминается про выравнивание стека на 8 при использовании плавающей точки.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Reystlin
сообщение Nov 25 2015, 06:46
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 6-09-15
Пользователь №: 88 307



а при чем тут стек? и поччему изначально такая конструкция работала
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 25 2015, 08:33
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Reystlin @ Nov 25 2015, 09:46) *
а при чем тут стек?
Вот, почитайте.

Цитата(Reystlin @ Nov 25 2015, 09:46) *
и почему изначально такая конструкция работала
Например, изначально на стеке была или отсутствовала еще одна 4-байтовая переменная и выравнивание получалось само собой. Это предположение, выяснять в любом случае вам. Я бы давно прошелся отладчиком по дизассемблированному коду, нашел конкретную вызывающую падение ассемблерную команду и уже думал о ней.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 14:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016