Jump to content

    

STM32 CDC RTS DTR

Имеется имплементация CDC на STM32F070 близкая к примеру из Куба. Вроде все бы не плохо, но мне надо управлять  RTS и DTR. Когда программа (на Windows) выставляет или снимает DTR, честно приходит CDC_SET_CONTROL_LINE_STATE и 2 бита показывают  RTS и DTR. Но когда программа выставляет/снимает RTS, ничего не происходит. Но если поменять DTR, то оба бита правильные. 

Для контроля взял FT323RT и той же программой менял состояние  RTS. Ножка реагирует сразу. В чем тут дело? Драйвер кривой?

 

Share this post


Link to post
Share on other sites
4 hours ago, alexf said:

на Windows

Какой?

 

4 hours ago, alexf said:

Драйвер кривой?

На XP и W7 такого точно не замечалось.

Share this post


Link to post
Share on other sites
1 hour ago, aaarrr said:

На XP и W7 такого точно не замечалось.

 

Это поведение USB CDC на всех виндах.
Решение - либо считать текущее состояние RTS и ставить вместе с DTR либо хранить и ставить так ж две линии.
К драйверам FT232/CP210xx никакого отношения не имеет.


void CComtestDlg::OnChRts() 
{
	UpdateData(TRUE);
	VERIFY(::EscapeCommFunction(g_hSerialPort, m_bRTS ? SETRTS : CLRRTS));
	VERIFY(::EscapeCommFunction(g_hSerialPort, m_bDTR ? SETDTR : CLRDTR));	// после этой строки выводится изменённое состояние RTS (иначе по USB CDC нет команды SET_CONTROL_LINE_STATE)
}

 

Edited by GenaSPB

Share this post


Link to post
Share on other sites
8 часов назад, alexf сказал:

Для контроля взял FT323RT и той же программой менял состояние  RTS. Ножка реагирует сразу. В чем тут дело? Драйвер кривой?

Советую посмотреть как происходит управление RTS-ом в "той же программе".

Особенно обратить внимание на SetCommState() и его аргумент lpDCB. Особенно на lpDCB->fDtrControl, lpDCB->fRtsControl и всё что связано с управлением потоком.

Share this post


Link to post
Share on other sites

Я получил что заслужил за то что не описал достаточно подробно проблему: правильные но не помогающие ответы. А проблема вот в чем. Есть радио модуль XBee. В нормальном режиме он управляется через только RX/TX. Но для перепрошивки должны быть подключены еще и  RTS и DTR. Я поставил модуль на свою плату, где связь идет через CDC на STM32. Доступа к внутреностям драйверов и программы обновления прошивки нет. Код на STM32 естественно в моих руках, но если нет никакого сигнала на который я мог бы реагировать, то не понятно что можно сделать. Но хотелось бы пользоваться еще одним внешним USB to serial интерфесом для перепрошивки. 

Share this post


Link to post
Share on other sites
1 hour ago, alexf said:

...если нет никакого сигнала на который я мог бы реагировать, то не понятно что можно сделать

В любом случае придется привязываться к каким-то внешним событиям: открытие порта на специфической скорости, изменение DTR, если оно предшествует RTS и т.п.

Share this post


Link to post
Share on other sites

А штатным софтом вообще удвалось прошить через переходники со стандартным виндовым драйвером?

Share this post


Link to post
Share on other sites

Раньше продавали переходник на USB и все перешивалось как надо.  Правдо было дело давно. Попробую подключить через FT232 и посмотреть.

P.S. Да, через стандартный переходник на FT232R все прекрасно работает. Очевидно они используют RTS и DTR чтобы управлять режимом и надо уметь дергать RTS в реальном времени. Чего, похоже, драйвер на WIndows 10 не делает.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now