Подскажите пож, что не так: Как я понял из документации в случае использования 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] - для короткого!!!