Настройка модуля. Условно. Контроль удален. Все выполняется без ошибок Put_Modem ( "AT+IFC=1,1", 0, TRUE ); Put_Modem ( "AT+IPR=4800", 0, TRUE ); Put_Modem ( "ATE0", 0, TRUE ); Put_Modem ( "ATV1", 0, TRUE ); Put_Modem ( "AT+CMEE=1", 0, TRUE ); Put_Modem ( "AT+CLIP=1", 0, TRUE ); Put_Modem ( "AT+CMGF=0", 0, TRUE ); Put_Modem ( "AT+CSCS=\"UCS2\"", 0, TRUE ); Put_Modem ( "AT+CSCB=1", 0, TRUE ); Put_Modem ( "AT+CPMS=\"ME_P\",\"ME_P\",\"ME_P\"", 0, TRUE ); Put_Modem ( "AT+CMGDA=6", 0, TRUE ); Put_Modem ( "AT+CNMI=3,2", 0, TRUE ); Put_Modem ( "AT+DDET=1,100,0,0", 0, TRUE ); Put_Modem ( "AT+CSGS=0", 0, TRUE ); Put_Modem ( "AT+CNETLIGHT=0", 0, TRUE ); Put_Modem ( "AT+CSCLK=1", 0, TRUE );
Перевод модуля в спать void Set_Modem_Low_Power ( void ) { GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_SET ); }
Вывод модуля из спать void Set_Modem_Std_еPower ( void ) { uint32_t Time = RTC_GetCounter (); GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_RESET ); while ( ( RTC_GetCounter () - Time ) < 2 ); }
Извлечение байта void USART1_IRQHandler ( void ) { if ( USART_GetFlagStatus ( USART1, USART_FLAG_RXNE ) != RESET ) { uint8_t Byte = USART_ReceiveData ( USART1 ); if ( ( Byte != 0x11 ) && ( Byte != 0x13 ) ) { *USART_Write_Pointer++ = Byte; if ( USART_Write_Pointer == ( USART_Buffer + USART_BUFFER_SIZE ) ) USART_Write_Pointer = USART_Buffer; } } }
Настройка околомодульного железа GPIO_StructInit ( &GPIO_InitStruct ); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init ( GPIOA, &GPIO_InitStruct ); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_Init ( GPIOA, &GPIO_InitStruct ); USART_StructInit ( &USART_InitStruct ); USART_InitStruct.USART_BaudRate = 4800; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init ( USART1, &USART_InitStruct ); USART_Cmd ( USART1, ENABLE ); USART_ITConfig ( USART1, USART_IT_RXNE, ENABLE );
Сейчас не могу сказать версию, забыл посмотреть. Но. Заменил позапрошлогодний модуль 800l на модуль, купленный в этом году. Никакой разницы. Сейчас подключил RI от модуля. Перед переводом в сон контроллера перевожу ноги rx и tx в вывод и верхнее состояние. Чтобы не прерываться от этих ксонов. По прерыванию от RI перенастраиваю ноги в правильный режим и включаю тактирование usart контроллера. С удивлением вижу, что ничего не теряю. Для этого, на всякий, максимально понизил скорость порта. Задачу решил. От ксонов не избавился. Что-то я с портом контроллера или модулем не доделал.
|