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

 
 
 
Reply to this topicStart new topic
> Перезагрузка STM32F4 (, необъяснимые прерывания
stm32f4
сообщение Nov 23 2012, 07:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098



Всем привет. Начну сначала) На днях попал мне в руки stm32f405, ну думаю ща поиграюсь, но не тут-то было( Развел платку прилепил светодиод, накнопал простейшую программу мигания светодиода по таймеру:
CODE
#include "stm32f4xx.h"
void TIM5_IRQHandler()
{
GPIOB->ODR^=GPIO_ODR_ODR_8;
TIM5->SR&= ~TIM_SR_UIF; //Сбрасываем флаг UIF
}

int main(void)
{

//***********TIM5***************
RCC->APB1ENR |= RCC_APB1ENR_TIM5EN; // тактирование таймера
TIM5->PSC = 16000; // предделитель
TIM5->ARR = 1000; // переполнение
TIM5->DIER |= TIM_DIER_UIE; // прерывание по переполнению
TIM5->CR1 |= TIM_CR1_CEN; // запуск счета
NVIC_EnableIRQ(TIM5_IRQn);
NVIC_SetPriority(TIM5_IRQn,15);


RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
GPIOB->MODER |= GPIO_MODER_MODER8_0;
GPIOB->ODR |= GPIO_ODR_ODR_8;

//***********MCO2**************
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
RCC->CFGR &=~RCC_CFGR_MCO2; // вывод System clock (SYSCLK) на PC9
RCC->CFGR |= (RCC_CFGR_MCO2PRE_1|RCC_CFGR_MCO2PRE_2);// 110: division by 4
GPIOC->MODER |= GPIO_MODER_MODER9_1; // output
GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9; // 100Mhz I/O


while(1)
{

}
}

зашил в МК! светодиод то зажегся, но не моргает((((( но если присмотреться, он все время как-то подмигивает!
В итоге, если в debug-ере установить breakpoint в начале программы и нажать run то контроллер без проблем туда возращается, при учете что вконце программы есть while(1) -бесконечный цикл!Дело в том что если зашить этуже программу в stm32f4discovery то все работает корректно и при установке breakpoint он к нему никогда не доходит!!!!!


Подскажите из-за чего может происходить прерывание, или что еще это может быть???????????
как определить, какое именно прерывание произошло?

Кстати я еще не совсем уверен в правильности обвязки МК: по 0.1 и 1 мкФ на каждый VDD,по 2.2мкФ на GND от vcap1 и vcap2, NRST через 100к на VDD, BOOT0 и BOOT1 по 10к на VDD и 510 Ом на GND, ну и для SWD вывел VDD,PA14,GND,PA13,NRST,PB3.Правильно?

Сообщение отредактировал IgorKossak - Nov 26 2012, 07:22
Причина редактирования: [codebox] для длинного кода!!!
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 23 2012, 08:17
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



А кварц рабочий? Вы его используете? Надо ж 10 отличий найти... sm.gif
Зачем Вам BOOT1?
И для чего NRST & PB3 в SWD? Может у Вас по NRST и гуляет то, что не надо?
Go to the top of the page
 
+Quote Post
stm32f4
сообщение Nov 23 2012, 09:16
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098



Цитата(_Pasha @ Nov 23 2012, 12:17) *
А кварц рабочий? Вы его используете? Надо ж 10 отличий найти... sm.gif
Зачем Вам BOOT1?
И для чего NRST & PB3 в SWD? Может у Вас по NRST и гуляет то, что не надо?

на данный момент я использую внутренний rc генератор(HSI). Boot1 казалось бы не нужен, но без подтяжки он вообще не стартует(так же и в discovery стоит )!
как можно узнать какое срабатывает прерывание?

Сообщение отредактировал stm32f4 - Nov 23 2012, 09:17
Go to the top of the page
 
+Quote Post
MBR
сообщение Nov 23 2012, 09:24
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Вообще, сначала инициализировать обработчик и разрешать прерывание, которое работает с железом а уже ПОСЛЕ этого инициализировать само железо - совсем не правильно. Есть вероятность, что вызывается обработчик до инициализации.
Go to the top of the page
 
+Quote Post
stm32f4
сообщение Nov 26 2012, 06:39
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098



Цитата(_Pasha @ Nov 23 2012, 12:17) *
А кварц рабочий? Вы его используете? Надо ж 10 отличий найти... sm.gif
Зачем Вам BOOT1?
И для чего NRST & PB3 в SWD? Может у Вас по NRST и гуляет то, что не надо?

подскажите, а как можно узнать из-за чего программа переходит в "Default_Reset_Handler()" ?
Go to the top of the page
 
+Quote Post
MBR
сообщение Nov 27 2012, 09:11
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Цитата(stm32f4 @ Nov 26 2012, 10:39) *
подскажите, а как можно узнать из-за чего программа переходит в "Default_Reset_Handler()" ?

А какие опции у железа есть по ресету? Вопрос не совсем понятен.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 27 2012, 12:50
Сообщение #7


Гуру
******

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



QUOTE (stm32f4 @ Nov 26 2012, 08:39) *
подскажите, а как можно узнать из-за чего программа переходит в "Default_Reset_Handler()" ?
Посмотреть, что процессор сохранил на стеке при входе в этот обработчик, вытащить из стекового кадра адрес возврата, посмотртеть по этому адресу на какой команде он споткнулся, проанализировать значения регистров и прийти к выводам.


--------------------
На любой вопрос даю любой ответ
"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
stm32f4
сообщение Nov 30 2012, 10:32
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098



Тема все еще актуальна ((( но кстати выяснились некоторые моменты! к примеру если ткнуться осциллографом на ножку NRST то там проскакивает каждые 500мс сброс!!!!! Поискав немного в даташите(rm0090) нашел на странице 82 возможные причины сброса, в итоге это IWDG !!!!!!!!!!!Да, сброс его можно обойти - записью значений в переполняемый регистр, но почему он вообще включен? как его отключить ???

Сообщение отредактировал stm32f4 - Nov 30 2012, 10:37
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:10
Рейтинг@Mail.ru


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