Прошивка STM32

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Юрий199
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт ноя 18, 2014 08:05:24

Прошивка STM32

Сообщение Юрий199 »

Здравствуйте. Использую stm32f103c8t6, EmBits 0.42 и st-link v2. Программа в контроллере исполняется только после запуска сессии отладки. Запустил, нажал run и все работает, после этого хоть среду разработки закрывай. А если сбросить контроллер или просто прршить, а потом подать питание, ничего не происходит. В чем может быть причина?
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Прошивка STM32

Сообщение uldemir »

Может быть неправильно поданы сигналы на входы boot, выбирающие с кого начинать выполнение после включения?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
Юрий199
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт ноя 18, 2014 08:05:24

Re: Прошивка STM32

Сообщение Юрий199 »

Никак нет. Подал на оба входа BOOT нули (замкнул на минус), но это ничего не поменяло. Программа во флеше есть точно. При подаче питания на BOOT0 и BOOT1 по 0,7V при подаче питания.
Юрий199
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт ноя 18, 2014 08:05:24

Re: Прошивка STM32

Сообщение Юрий199 »

Что-то не так со средой разработки. При написании того же кода из CooCox все работает в штатном режиме.
Реклама
Эиком - электронные компоненты и радиодетали
pixar
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Чт ноя 29, 2012 08:27:22

Re: Прошивка STM32

Сообщение pixar »

отладка в ОЗУ
Реклама
Юрий199
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт ноя 18, 2014 08:05:24

Re: Прошивка STM32

Сообщение Юрий199 »

Да, спасибо, дело было в этом.
Реклама
Юрий199
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт ноя 18, 2014 08:05:24

Re: Прошивка STM32

Сообщение Юрий199 »

Ещё есть вопрос. Настроил прерывания по переполнению таймера 2. На прерывание он уходит, но флаг упорно сбрасывать не хочет, если в регистре ARR не 0. При чём изменить значение флагов невозможно даже через отладчик, пока в ARR не пусто.

Инициализация:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM2->PSC=10;
TIM2->ARR=2057;
TIM2->DIER|=TIM_DIER_UIE;
TIM2->CR1 |=TIM_CR1_CEN;
NVIC_EnableIRQ(TIM2_IRQn);
NVIC_SetPriority(TIM2_IRQn,4);

Прерывание:

void TIM2_IRQHandler(void)
{
TIM2->ARR=0; //Сброс
while(TIM2->SR & TIM_SR_UIF)
{
TIM2->SR =~TIM_SR_UIF; //Сбрасываем флаг
};

TIM2->ARR=2057;
};
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Прошивка STM32

Сообщение uldemir »

Код: Выделить всё

TIM2->SR &= ~TIM_SR_UIF;
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Прошивка STM32

Сообщение Z_h_e »

pixar писал(а):отладка в ОЗУ
Юрий199 писал(а):Да, спасибо, дело было в этом.
Юрий199, у меня к Вам вопрос. Если у Вас была отладка в ОЗУ, Вы же должны были сменить адрес таблицы векторов прерываний. Или кейл автоматом его меняет?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Юрий199
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт ноя 18, 2014 08:05:24

Re: Прошивка STM32

Сообщение Юрий199 »

uldemir писал(а):

Код: Выделить всё

TIM2->SR &= ~TIM_SR_UIF;
Не помогало. У меня программатор st/linkV2 - позволяет смотреть и менять значения в регистрах периферии и процессора, но даже прямой записью значения флаг не сбрасывался. В то время, как на другом таймере, не использующим ARR, все флаги можно было устанавливать/сбрасывать через отладчик.
Z_h_e писал(а):
pixar писал(а):отладка в ОЗУ
Юрий199 писал(а):Да, спасибо, дело было в этом.
Юрий199, у меня к Вам вопрос. Если у Вас была отладка в ОЗУ, Вы же должны были сменить адрес таблицы векторов прерываний. Или кейл автоматом его меняет?
У меня не кейл, а EmBitz (EmBlocks). У него 2 режима debug и release. В режиме Release, при прошитом контроллере, достаточно просто подать на него питание. В debug, скорее всего, таблицу сам меняет. Только я сомневаюсь, что код исполняется из ОЗУ. Сервер при старте всё равно пишет, что прошивает FLASH.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Прошивка STM32

Сообщение Z_h_e »

Юрий199 писал(а):позволяет смотреть и менять значения в регистрах периферии и процессора,
Область памяти переферии USB через ST-Link2 и кокос я просматривать не мог, добавлял код, копирующий данные в ОЗУ и глядел уже оттуда. Но как не мог, данные то какие-то показывал типа 0xFF или может нули. Я к тому, что как оказалось не все можно увидеть. Может еще чего не видно.
Z_h_e писал(а):В debug, скорее всего, таблицу сам меняет. Только я сомневаюсь, что код исполняется из ОЗУ.
Дебаг и исполнение в ОЗУ разные вещи. Оба режима могут быть и во флеш и в озу. Если Ваш код исполняется в ОЗУ или отлаживается то надо менять адрес таблицы прерываний, на нее спец. регистр указывает. В Кокосе я так делал

Код: Выделить всё

int main(void)
{	//адрес таблицы векторов прерываний
         SCB->VTOR = 0x20000000;
...
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Юрий199
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт ноя 18, 2014 08:05:24

Re: Прошивка STM32

Сообщение Юрий199 »

Юрий199 писал(а):Ещё есть вопрос. Настроил прерывания по переполнению таймера 2. На прерывание он уходит, но флаг упорно сбрасывать не хочет, если в регистре ARR не 0. При чём изменить значение флагов невозможно даже через отладчик, пока в ARR не пусто.

Инициализация:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM2->PSC=10;
TIM2->ARR=2057;
TIM2->DIER|=TIM_DIER_UIE;
TIM2->CR1 |=TIM_CR1_CEN;
NVIC_EnableIRQ(TIM2_IRQn);
NVIC_SetPriority(TIM2_IRQn,4);

Прерывание:

void TIM2_IRQHandler(void)
{
TIM2->ARR=0; //Сброс
while(TIM2->SR & TIM_SR_UIF)
{
TIM2->SR =~TIM_SR_UIF; //Сбрасываем флаг
};

TIM2->ARR=2057;
};
Так что с этим?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Прошивка STM32

Сообщение dosikus »

Код: Выделить всё

TIM2->SR =~TIM_SR_UIF; //Сбрасываем флаг
Невнимательность?
ARR оставьте в покое...
Ответить

Вернуться в «ARM»