Отладка с временными задержками stm32
- van_de_luxe
- Встал на лапы
- Сообщения: 103
- Зарегистрирован: Вс окт 31, 2010 16:46:10
- Откуда: Оттуда
Отладка с временными задержками stm32
Делаю часы на stm32. использую плату stm32discovery
Задействовал часовой кварц, настроил для него прерывания и моргаю синим светодиодом раз в секунду.
Теперь хочу подключить lcd nokia 3310.
Запускаю через eclipse отладку (для отладки используется st-link gdb server)
На каком-то этапе отладчик отваливается, а плата продолжает жизнерадостно моргать.
Подозреваю что дело в задержках в реальном времени, которые отладчик естественно не может отследить и поэтому отваливается.
Какие есть способы отлаживать программу в которой есть такие особенности?
(к отладке приема данных по интерфейсам наверно тоже относится. как дать понять отладчику что вот эту часть нужно прошагать, а на эту отпустить контроллер для к-н обработки?)
Задействовал часовой кварц, настроил для него прерывания и моргаю синим светодиодом раз в секунду.
Теперь хочу подключить lcd nokia 3310.
Запускаю через eclipse отладку (для отладки используется st-link gdb server)
На каком-то этапе отладчик отваливается, а плата продолжает жизнерадостно моргать.
Подозреваю что дело в задержках в реальном времени, которые отладчик естественно не может отследить и поэтому отваливается.
Какие есть способы отлаживать программу в которой есть такие особенности?
(к отладке приема данных по интерфейсам наверно тоже относится. как дать понять отладчику что вот эту часть нужно прошагать, а на эту отпустить контроллер для к-н обработки?)
- koyodza
- Собутыльник Кота
- Сообщения: 2623
- Зарегистрирован: Вс июл 17, 2011 11:51:52
- Контактная информация:
Re: Отладка с временными задержками stm32
У меня нормально отлаживается stm32 но я пользуюсь другими отладчиками и средой программирования.
Вполне возможно дело не в задержках, а что-то Вы намутили в проекте. Проблемы бывают, например, при неправильных таймингах флеши, при слишком активном обмене по DMA, при коротких циклах поллинга флагов периферии, при слишком высокой частоте тактирования jtag, при неправильной настройке AFIO GPIO на котором висит jtag, также возможно у Вас происходит банальный сброс по вачдогу или вылет по недопустимой инструкции. Возможны и аппаратные проблемы, если отлаживаемое устройство питается от отдельного импульсного БП без (или с плохим) EMI-фильтром на входе
Вполне возможно дело не в задержках, а что-то Вы намутили в проекте. Проблемы бывают, например, при неправильных таймингах флеши, при слишком активном обмене по DMA, при коротких циклах поллинга флагов периферии, при слишком высокой частоте тактирования jtag, при неправильной настройке AFIO GPIO на котором висит jtag, также возможно у Вас происходит банальный сброс по вачдогу или вылет по недопустимой инструкции. Возможны и аппаратные проблемы, если отлаживаемое устройство питается от отдельного импульсного БП без (или с плохим) EMI-фильтром на входе
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Отладка с временными задержками stm32
А вачдог у вас в проекте используется? Если да, то его следует тормозить вместе с остальными таймерами чтобы не произошел сброс при входе в отладку.
Про EMI - правельно замечено. Сразу легче жить стало когда комп с дискавери начал питаться через хороший UPS. До этого работало через раз. Ну и версию IDE с драйвером на ST-link самую свежую.
Про EMI - правельно замечено. Сразу легче жить стало когда комп с дискавери начал питаться через хороший UPS. До этого работало через раз. Ну и версию IDE с драйвером на ST-link самую свежую.
- van_de_luxe
- Встал на лапы
- Сообщения: 103
- Зарегистрирован: Вс окт 31, 2010 16:46:10
- Откуда: Оттуда
Re: Отладка с временными задержками stm32
А можно подробнее про торможение таймеров?
Их дебаггер сам отлавливает или это как-то нужно настраивать?
собаку не использую
Их дебаггер сам отлавливает или это как-то нужно настраивать?
собаку не использую
- koyodza
- Собутыльник Кота
- Сообщения: 2623
- Зарегистрирован: Вс июл 17, 2011 11:51:52
- Контактная информация:
Re: Отладка с временными задержками stm32
Торможение таймеров при отладке на отваливание отладчика не влияет.
Оно влияет, например, на переполнение таймеров и возникновение событий пока программа остановлена. Иногда это важно, иногда наоборот, в любом случае это не то, что Вы ищите.
Покажите свой код, может удастся увидеть потенциально ненадежные места
Оно влияет, например, на переполнение таймеров и возникновение событий пока программа остановлена. Иногда это важно, иногда наоборот, в любом случае это не то, что Вы ищите.
Покажите свой код, может удастся увидеть потенциально ненадежные места
- van_de_luxe
- Встал на лапы
- Сообщения: 103
- Зарегистрирован: Вс окт 31, 2010 16:46:10
- Откуда: Оттуда
Re: Отладка с временными задержками stm32
Нашел место на котором отваливается дебагер
выдает
Отваливается когда доходит до функции delay_ms(100) и начинает в ней крутиться:
Конфигурация:
выдает
Код: Выделить всё
ST_LINK Halt Reason halt requested by NVIC, including step
Unknown(Err)Отваливается когда доходит до функции delay_ms(100) и начинает в ней крутиться:
Код: Выделить всё
/* задержка в микросекундах
* диапазон значений от 0x00000001 до 0x00FFFFFF/multiplier
* работает на прерывании */
void delay_us(uint32_t us)
{
SysTick_Config(us*multiplier);
__WFI(); //Wait for Interrupt.
}
void delay_ms(uint32_t ms)
{
while(ms--) delay_us(1000);
}
///* код для обработчика прерываний */
//
//void SysTick_Handler(void)
//{
// //для отключения счетчика, когда дойдет до 0, если не отключать, будет постоянно работать
// /*
// SysTick->CTRL=0x00000000; //отключение системного таймера
// SysTick->VAL=0x00000000; //сброс текущего значения системного таймера
// */
//}
Конфигурация:
Код: Выделить всё
Init_Clock();
//Настройка контроллера прерываний
NVIC_Configuration();Код: Выделить всё
//конфигурация тактирования - начальная настройка кварца
void Init_Clock()
{
//после запуска должна быть частота 24 мГц, установлена соответствующий define
/* RTC Configuration */
RTC_Configuration();
}Код: Выделить всё
/**
* @brief Configures the RTC.
* @param None
* @retval None
*/
void RTC_Configuration(void)
{
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);
/* Reset Backup Domain */
BKP_DeInit();
/* Enable LSE */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{}
/* Select LSE as RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC registers synchronization */
RTC_WaitForSynchro();
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
/* Enable the RTC Second */
RTC_ITConfig(RTC_IT_SEC, ENABLE);
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
/* Set RTC prescaler: set RTC period to 1sec */
//RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
RTC_SetPrescaler(16383); /* частота=32768/PrescalerValue+1 */
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
}Код: Выделить всё
/**
* @brief Configures the nested vectored interrupt controller.
* @param None
* @retval None
*/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Enable the RTC Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Отладка с временными задержками stm32
Ну так вы активируете СисТик, далее ждем прерывание. Прерывание появилось, а обрабочик, но он закомментирован. Процу только в HardFault и остается.
При разработке прог я юзаю болванку с обработчиками из пакета дискавери(не нужно вручную их прописывать). Только во все Fault-обработчики ставлю бесконечный цикл while(TRUE); Так сразу видно что сделал что-то не то.
При разработке прог я юзаю болванку с обработчиками из пакета дискавери(не нужно вручную их прописывать). Только во все Fault-обработчики ставлю бесконечный цикл while(TRUE); Так сразу видно что сделал что-то не то.
- van_de_luxe
- Встал на лапы
- Сообщения: 103
- Зарегистрирован: Вс окт 31, 2010 16:46:10
- Откуда: Оттуда
Re: Отладка с временными задержками stm32
Обработчик у меня не закомментирован, он в другом файле написан, тут я комментарий добавил чтобы не забыть как его использовать и заодно показать какой он.
А с бесконечным циклом попробую, может в какое другое прерывание вываливается
А с бесконечным циклом попробую, может в какое другое прерывание вываливается
- van_de_luxe
- Встал на лапы
- Сообщения: 103
- Зарегистрирован: Вс окт 31, 2010 16:46:10
- Откуда: Оттуда
Re: Отладка с временными задержками stm32
кстати, для hardFault можно обработчик написать? я не нашел функции
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Отладка с временными задержками stm32
Что значит не нашел? Startup на что?
Пакет VL discovery предлагает вот такой файл с обработчиками.
ЗЫ. имена векторов должны в точности соответствовать именам обработчиков в программе.
Код: Выделить всё
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick HandlerПакет VL discovery предлагает вот такой файл с обработчиками.
ЗЫ. имена векторов должны в точности соответствовать именам обработчиков в программе.
- Вложения
-
- stm32f10x_it.c
- (4.23 КБ) 456 скачиваний
- van_de_luxe
- Встал на лапы
- Сообщения: 103
- Зарегистрирован: Вс окт 31, 2010 16:46:10
- Откуда: Оттуда
Re: Отладка с временными задержками stm32
А для чего нужен Debug Monitor? только чтобы состояния таймеров и т.п. смотреть? или через него их можно приостанавливать?