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

 
 
 
Reply to this topicStart new topic
> Не стартует программа 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
IGK
сообщение Jan 5 2011, 14:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 7-01-07
Из: Севастополь
Пользователь №: 24 170



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


Зайдите по ссылке http://kazus.ru/forums/showthread.php?t=20861, там есть про УАРТ и довольно подробно. У меня под ИАРом проблем с запуском не было, шил и ST Visual Programmero'ом. Где-то видел обсуждение такой же проблемы, но не запомнил, где...
Go to the top of the page
 
+Quote Post
Сергей Б
сообщение Jun 25 2011, 17:18
Сообщение #3


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

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



прочитал весь казус не нашел как решить проблему с программированием. Помогает только закрытие stvp, тогда проц запускается. Есть предположение, что это связано с рестартом контроллера по SWIM, программа после прошивки просто не ресетит контроллер в режиме отладки.
Go to the top of the page
 
+Quote Post
ZiB
сообщение Jun 27 2011, 03:48
Сообщение #4


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Используйте, для сброса дебагер (я использую эклипс, но это не важно, пропишите внешнюю тулзу):

Код
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
Go to the top of the page
 
+Quote Post

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

 


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


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