25.02.2014, 23:53
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
Сообщение от индюк
|
вот этот ваил где сидит? в основном теле?
|
Сидит в прерывании ДМА по окончании передачи блока данных.
Другими словами, когда ДМА задвинул последний байт в передатчик - происходит прерывание ДМА. В этом прерывании этот самый "ваил" ждёт, пока задвинутый байт не вытолкнется из регистра передатчика наружу. После этого RS485 переключается из режима передачи на приём.
Таким образом время ожидания флага равно времени передачи 1 байта, при скорости 115200 это время составляет примерно 100 мкс.
|
|
|
|
26.02.2014, 09:26
|
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
Сообщение от Yurkin2014
|
Сидит в прерывании ДМА по окончании передачи блока данных.
Другими словами, когда ДМА задвинул последний байт в передатчик - происходит прерывание ДМА. В этом прерывании этот самый "ваил" ждёт, пока задвинутый байт не вытолкнется из регистра передатчика наружу. После этого RS485 переключается из режима передачи на приём.
Таким образом время ожидания флага равно времени передачи 1 байта, при скорости 115200 это время составляет примерно 100 мкс.
|
не мой случай
у меня передается 4-6 байт на скорости 9600, дма не используется.
ком порт всего лишь управляет включением кучи релюшек на ведомой стороне.
оно конечно и тут можно тупо проц подвесить на несколько микросекунд но это не кузяво. малоли я потом еще чонить туда захочу приделать
|
|
|
|
26.02.2014, 10:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
А что не дает исаользовать прерывание UARTa по ТС ?
TC - и сделан для того, что б знать когда ТХ освободил линию.
|
|
|
|
26.02.2014, 13:41
|
|
Частый гость
Регистрация: 13.10.2008
Сообщений: 23
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: Вопрос по 485 и стм32ф100
У меня камень в проекте stm32f103RB, реализован протокол Pelco-D, но сути не меняет. В настройках УАРТа разрешаем прерывание по TC и далее в прерывании: остановка ДМА, перезагрузка регистра кол-ва передаваемых байт, перевод трансивера на прием и сброс флага TC. Очень коротко и просто.
Код:
|
void USART2_IRQHandler(void){
u32 Data, State;
State=USART2-›SR; Data=USART2-›DR; // Чтение SR и DR сбрасывает флаги.
if (State & USART_SR_TC) //Если прерывание по завершению передачи.
{
RECEIVE; // переход на прием
DATA_OFF; //выключить светодиод-индикатор обмена
DMA_Cmd(DMA1_Channel7, DISABLE);
DMA1_Channel7-›CNDTR = 7; // число байт для передачи
USART2-›SR&=~USART_SR_TC; // Очистить флаг "Передача завершена".
}
} |
|
|
|
|
26.02.2014, 13:50
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
Сообщение от Boba_spb
|
А что не дает исаользовать прерывание UARTa по ТС ?
|
Можно и так, конечно.
Но, как я понимаю, тут наблюдается некий перфекционизм. Вдруг ДМА замешкается и не успеет задвинуть в передатчик очередной байт. Тогда возникнет преждевременное прерывание UART TC, и флаг DE сбросится раньше времени.
Нет уж. Сделаем всё совершенно идеально. Сначала запретим UART TC прерывание. Когда ДМА отрапортует об окончании передачи, вот тогда разрешим UART TC и в этом прерывании уже будем сбрасывать флаг DE.
|
|
|
|
26.02.2014, 15:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
DMA - засылает байт в регистр. Из этого регистра данные пересылаются внутри UARTа в регистр сдвига и выставляется флаг готовности TXE, по которому DMA, засылает в оркестр следующий байт.
А теперь вопрос !!! На сколько надо тормознуть DMA что б появился ложный ТС? Правильно на передачу в линию двух байт !!!
И что это будет так тормозить DMA ? А главное каким образом?
|
|
|
|
26.02.2014, 18:43
|
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
Сообщение от Boba_spb
|
А что не дает исаользовать прерывание UARTa по ТС ?
TC - и сделан для того, что б знать когда ТХ освободил линию.
|
да. можно
просто в лпц13 было ваще без доп софта все реализовано - удобно
|
|
|
|
26.02.2014, 22:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
Ну дык у STM32F0 то ж пин есть, да еще и можно аппартный сдвиг устроить для DE по переднему фронту и заднему
|
|
|
|
26.02.2014, 23:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Вопрос по 485 и стм32ф100
Ради прикола можно ТХ посадить на DE, а вход передатчика посадить на землю. И будет работать )))
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:00.
|
|