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

 
 
> Не стартует программа STM8 при прошивке, стартует если выдернуть шнур USB из отладчика
Сергей Б
сообщение Jan 5 2011, 14:35
Сообщение #1


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

Группа: Свой
Сообщений: 80
Регистрация: 14-04-06
Из: Russia, Orel
Пользователь №: 16 115



Есть проблема.
Работаю в 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;
}
}
}

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 02:18
Рейтинг@Mail.ru


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