roboforum.ru

Технический форум по робототехнике.

Проблема с Stm32l152cdiscovery

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Проблема с Stm32l152cdiscovery

Сообщение Gekatonheyr » 27 сен 2014, 09:49

Добрый день.
Помогите плз разобраться с проблемой.
Есть оценочная плата Stm32l152cdiscovery, есть среда разработки CoIDE.
Загружаю проект из официального сайта, компилирую его в CoIDE и заливаю через USB на
МК. Проект не работает. Это при том, что компилируется без ошибок.
Начинаю отладку - видно что стопорится на функции ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS).
Последняя в свою очередь вызывается из Current_Measurement(). Код, на котором стопорится (stm32l1xx_adc.c):
if ((ADCx->SR & ADC_FLAG) != (uint8_t)RESET)
{
/* ADC_FLAG is set */
bitstatus = SET;
}
else
{
/* ADC_FLAG is reset */
bitstatus = RESET;
}
/* Return the ADC_FLAG status */
return bitstatus;

То есть как я понимаю, не может он дождаться установки бита синхронизации АЦП, поскольку все время возвращает статус RESET.
С другой стороны, если заливаю бинарный файл, который идет вместе с фирмваре-пак от STM через ST-Link,
то все проходит нормально и работает.
Помогите победить сие неудобство. Или тыкните что почитать, потому как ничего не могу найти в инете.
Заранее благодарен.
Gekatonheyr
 
Сообщения: 5
Зарегистрирован: 27 сен 2014, 08:58

Re: Проблема с Stm32l152cdiscovery

Сообщение elmot » 27 сен 2014, 20:37

Первое правило работы с стм32 - если периферия не работает, проверь, включено ли у нее тактирование.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Проблема с Stm32l152cdiscovery

Сообщение Gekatonheyr » 28 сен 2014, 08:41

Та периферия-то затактирована, порты А,В,С подключены. Ножки настроены. Смотрел на отладке - все нормально вроде... Кроме того - бинаник жеж из фирмвари заливается и работает нормально. Пробовал откомпилировать проект в Keil - все получается, заливается и работает нормально.
У меня еще другая проблема по этому поводу возникала. Пишу вот такую програмку:
#define STM32L1XX_MDP
#include "main.h"

static __IO uint32_t TimingDelay;

int main(void)
{
bool StanbyWakeUp ;
int a= SystemCoreClock / 1000;
SysTick_Config(a);

if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
{
/* System resumed from STANDBY mode */
/* Clear StandBy flag */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
PWR_ClearFlag(PWR_FLAG_SB);
/* set StandbyWakeup indicator*/
StanbyWakeUp = TRUE;
} else
{
/* Reset StandbyWakeup indicator*/
StanbyWakeUp = FALSE;
}

RCC->APB1ENR |= (RCC_APB1ENR_PWREN | RCC_APB1ENR_LCDEN);


LCD_GLASS_Configure_GPIO();
LCD_GLASS_Init();

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
GPIO_InitTypeDef gpio;
GPIO_StructInit(&gpio);
gpio.GPIO_Mode=GPIO_Mode_OUT;
gpio.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
gpio.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &gpio);
GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);
LCD_GLASS_ScrollSentence("*Hello world* ",1,50);

while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);
Delay(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);
Delay(50);
}

}

void SysTick_Handler()
{
TimingDelay_Decrement();
}

void Delay(__IO uint32_t nTime)
{

TimingDelay = nTime;

while(TimingDelay != 0);
}

void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}

Все компилируется, заливается и работает. НО стоит отключить и включить питание, как происходит затык, перезаливка не спасает. Стирание памяти тоже. Помогает только заливка бинарника от ST, после которой все повторяется: залил - работает; отключил питание, потом включил - висим; залил прошивку из фирмвари - снова работаем до первого отключения питания. Причем случается все это именно на функциях проверки синхронизации флагов. Первый там где я указал, второй на функции WaitForSynhro() из SPL.
Я тут подумал может с фьюзами чего не то получается, по копание в документации пока ничего не дало.
Может какая-то хитрая настройка в проэкте есть чтобы такого не случалось. Я просто новичек в МК, вот и спрашиваю более опытных товарищей..
Из-за общност
Gekatonheyr
 
Сообщения: 5
Зарегистрирован: 27 сен 2014, 08:58

Re: Проблема с Stm32l152cdiscovery

Сообщение elmot » 28 сен 2014, 10:17

Начальный адрес кривой или вообще в RAM заливается.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Проблема с Stm32l152cdiscovery

Сообщение Gekatonheyr » 28 сен 2014, 23:09

а как проверить? и как настроить правильный нач. адрес? это параметры среды разработки? если есть ссылка где про это почитать поделись плз.
Gekatonheyr
 
Сообщения: 5
Зарегистрирован: 27 сен 2014, 08:58

Re: Проблема с Stm32l152cdiscovery

Сообщение avr123.nm.ru » 28 сен 2014, 23:25

Попробуй делать проект не с нуля а взять из примеров (там все правильно будет настроено) и в нем изменить код под свою задачу.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Проблема с Stm32l152cdiscovery

Сообщение Gekatonheyr » 29 сен 2014, 00:26

так в том то и едло - проект взят из коробки. просто ST не дают проекта готового для CoIDE, поэтому все пришлось ручками собирать. Как экспортировать проект из кейла в "кокос" не знаю. Идея с готовым проектом возникла после неудачной своей попытки. Кстати мигать даиодами получается нормаль, программных сбоев не происходит. Может такое быть если начальный адрес прописан неправильно? Короче дурдом какой-то....
Gekatonheyr
 
Сообщения: 5
Зарегистрирован: 27 сен 2014, 08:58

Re: Проблема с Stm32l152cdiscovery

Сообщение avr123.nm.ru » 29 сен 2014, 00:47

пиши в iar keil
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Проблема с Stm32l152cdiscovery

Сообщение Gekatonheyr » 29 сен 2014, 17:58

попробовал написать код для использования lcd в keil - та же история - виснет на функции WaitForSynhro(), которая в свою очередь вызывается из LCD_GLASS_Init() а та - из LCD_Init(). Настройки все вроде скопировал, варианты идей закончились.... Есть предложения кроме тех которые поступали выше?
Gekatonheyr
 
Сообщения: 5
Зарегистрирован: 27 сен 2014, 08:58

Re: Проблема с Stm32l152cdiscovery

Сообщение avr123.nm.ru » 30 сен 2014, 12:34

Зачем копировать? Просто откройте из примеров проект, сохраните его в свою папку и наполните своим кодом.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Проблема с Stm32l152cdiscovery

Сообщение elmot » 30 сен 2014, 23:31

Gekatonheyr писал(а):а как проверить? и как настроить правильный нач. адрес? это параметры среды разработки? если есть ссылка где про это почитать поделись плз.


Configuration->Вкладка Link->Memory Areas
Правильные адреса есть в даташите.В случае stm32f051 стоит Debug In Flash , IROM1 Start 0x08000000 Size
0x00010000, IRAM1 Start 0x20000000 Size 0x00002000
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 65