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

 
 
 
Reply to this topicStart new topic
> STM32F4 USART FLOW CONTROL
plushevyj
сообщение Sep 14 2014, 11:01
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 12-08-14
Пользователь №: 82 525



Подскажите пож, что не так: Как я понял из документации в случае использования flow control, то при поступлении в регистр приема байта, контроллер выставляет RTS в 1, пока я не считаю данные из регистра, реально иногда там появляется 1, но не всегда и не понятно по какому принципу.
CODE
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;

RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );

// конфигурим пины
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_USART2);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;
GPIO_Init(GPIOA, &GPIO_InitStructure);


USART2->CR1 &= ~((uint16_t)USART_CR1_UE); // останавливаем usart2

USART_InitStructure.USART_BaudRate = BaudRate ;//9600;// 14400;// 19200;// 38400;// 56000;// 57600;//115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_RTS_CTS;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
USART2->CR1 |= USART_CR1_RXNEIE | USART_CR1_TXEIE; // разрешаем прерывания по готовности байта на приеме

USART2->CR1 |= USART_CR1_UE; // стартуем usart2


// конфигурим прерывания
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


*************************************************************
void USART2_IRQHandler(void){
if((USART2->SR & USART_SR_RXNE) > 0){
// пришел байт от GSM модуля
ByteReceived();

ставлю BP на ByteReceived(); по идее в этот момент RTS должно быть равно 1, но ее в основном нет

Сообщение отредактировал IgorKossak - Sep 15 2014, 07:37
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 16 2014, 06:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Вообще, по-хорошему, согласно описанию на протокол после снятия сигнала источник может ещё несколько байт отправить ... biggrin.gif Поэтому RTS выставляется при 2/3 буфера. То есть, если строго подходить, то аппаратное управление потоком для STM зззз... не совсем корректное.
В одну сторону (на передачу) оно является достаточным (есть прерывание), а на приём, 2 байта маловато. ))
Красиво всё таки в LPC реализовано. Ч/з FIFO.
Go to the top of the page
 
+Quote Post
plushevyj
сообщение Sep 22 2014, 15:11
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 12-08-14
Пользователь №: 82 525



Цитата(SasaVitebsk @ Sep 16 2014, 07:35) *
Вообще, по-хорошему, согласно описанию на протокол после снятия сигнала источник может ещё несколько байт отправить ... biggrin.gif Поэтому RTS выставляется при 2/3 буфера. То есть, если строго подходить, то аппаратное управление потоком для STM зззз... не совсем корректное.
В одну сторону (на передачу) оно является достаточным (есть прерывание), а на приём, 2 байта маловато. ))
Красиво всё таки в LPC реализовано. Ч/з FIFO.

Да, так и вышло, к тому же в еррате найдена какашечка STM, если он выставил RTS , а источник продалжает слать ему данные, то он RTS убриает

Сообщение отредактировал plushevyj - Sep 22 2014, 15:14
Go to the top of the page
 
+Quote Post

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

 


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


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