Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не стартует программа STM8 при прошивке
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > STM8
Сергей Б
Есть проблема.
Работаю в W7 и IDE ST Visual Develop (COSMIC).
Если зашиваю прошивку в Debug режиме, и нажимаю кнопку Start, то все нормально пускается и при выходе из этого режима, тоже замечательно работает. При прошивке из под ST Visual Develop или ST Visual Programmer, прошивка не стартует, если выдернуть отладчик из платы и передернуть питание платы. Стартует только в том случае, если не отключая отладчик от платы, вынуть USB шнур отладчика из порта компьютера, при подключенном отладчике к плате.
Пробовал Rlink и Stlink. Может, кто уже решал подобную проблему, у меня поиском найти не получилось.


Ну и сразу спрошу заодно, может, ткнет кто меня носом в обсуждение этого вопроса. Меня интересует правильная работа с сигналом отключения передатчика после окончания передачи, при использование half duplex работы RS485 (двухпроводная линия). Как я понял у этого микроконтроллера на любое прерывание (по передатчику) по UART осуществляется переход по одному и тому же вектору. Вот сделал такое решение, в принципе заработало, но как то коряво со стороны смотрится.

CODE

#ifdef _COSMIC_
@far @interrupt void UART2_TX_IRQHandler(void)
#else /* _RAISONANCE_ */
void UART2_TX_IRQHandler(void) interrupt 20
#endif /* _COSMIC_ */
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/

if(!IsPktSend)
{
if(OutBuff2Ptr.rd == OutBuff2Ptr.wr)
{
UART2_ITConfig(UART2_IT_TXE, DISABLE);
//UART2_GetITStatus(UART2_IT_TXE);

//UART2_GetITStatus(UART2_IT_TC);

/* Очистка флага "передача завершена" */
/* не нашел в библиотеке команду как его очищать */
UART2->SR = (u8)~(UART2_IT_TC);
UART2_ITConfig(UART2_IT_TC, ENABLE);

IsPktSend = 1;
}
else
{
UART2_SendData8(Uart2OutBuff[OutBuff2Ptr.rd++]);
if(OutBuff2Ptr.rd >= sizeof(Uart2OutBuff))
OutBuff2Ptr.rd = 0;
}
}
else
{
if(UART2_GetITStatus(UART2_IT_TC))
{

TX_EN_OFF();
UART2_ITConfig(UART2_IT_TC, DISABLE);
UART2->SR = (u8)~(UART2_IT_RXNE_OR);
UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);
IsPktSend = 0;
}
}
}

IGK
Цитата(Сергей Б @ Jan 5 2011, 19:35) *
Ну и сразу спрошу заодно, может, ткнет кто меня носом в обсуждение этого вопроса. Меня интересует правильная работа с сигналом отключения передатчика после окончания передачи, при использование half duplex работы RS485 (двухпроводная линия). Как я понял у этого микроконтроллера на любое прерывание (по передатчику) по UART осуществляется переход по одному и тому же вектору. Вот сделал такое решение, в принципе заработало, но как то коряво со стороны смотрится.


Зайдите по ссылке http://kazus.ru/forums/showthread.php?t=20861, там есть про УАРТ и довольно подробно. У меня под ИАРом проблем с запуском не было, шил и ST Visual Programmero'ом. Где-то видел обсуждение такой же проблемы, но не запомнил, где...
Сергей Б
прочитал весь казус не нашел как решить проблему с программированием. Помогает только закрытие stvp, тогда проц запускается. Есть предположение, что это связано с рестартом контроллера по SWIM, программа после прошивки просто не ресетит контроллер в режиме отладки.
ZiB
Используйте, для сброса дебагер (я использую эклипс, но это не важно, пропишите внешнюю тулзу):

Код
C:/Tools/STMicroelectronics/Toolset/stvd/gdb7.exe --quiet --command=mcu/stm8l151k6.ini


сам ини файл

Код
define emulator-reset-port-mcu
target gdi -dll swim\stm_swim.dll -stlink3 -port $arg0 -mcuname $arg1
mcuname -set $arg1
end

emulator-reset-port-mcu usb://usb stm8l151k6
quit
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.