Skocz do zawartości

Brak odpowiedzi modułu SIM800L na komendy AT


Alrbr1234

Pomocna odpowiedź

Cześć,

Mam problem z otrzymaniem odpowiedzi od modułu SIM800L na komendy AT. Używam STM32F446RE. Pomimo wysłania komendy w formacie "AT\r\n" nie otrzymuję żadnej odpowiedzi od modułu. W projekcie użyłem UART1 na pinach PA9 i PA10. Moduł oczywiście loguje się do sieci(dioda miga raz na 3 sekundy). Poniżej zrzut ekranu z analizatora logicznego(komenda AT prawidłowo wysłana):

image.thumb.png.b27e4d0195180dca9c49d253133e925e.png

Pin Tx i Rx są połączone na krzyż do pinów modułu. Masy zasilania, mikrokontrolera i modułu są złączone. Ze względu na to, że moduł posiada funkcję autobaud użyłem baudrate zgodnego ze zrzutem ekranu zawierającym ustawienia UART:

static void MX_USART1_UART_Init(void)
{

  /* USER CODE BEGIN USART1_Init 0 */

  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 9600;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART1_Init 2 */

  /* USER CODE END USART1_Init 2 */

}

Ustawienia pinów:
 

 GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(huart->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_USART1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART1 GPIO Configuration
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* USART1 interrupt Init */
    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USART1_IRQn);
  /* USER CODE BEGIN USART1_MspInit 1 */

  /* USER CODE END USART1_MspInit 1 */
  }

Poniżej funkcja wysyłająca komendę(przyciśnięcie przycisku na płytce nucleo wywołuje przerwanie, po którym następuje wykonanie wysłania komendy):

static const char* auto_baud_init_cmd = "AT\r\n";


void check_module_info(UART_HandleTypeDef *huart){
	uint16_t length = strlen(auto_baud_init_cmd);
	HAL_UART_Transmit(huart, (uint8_t*)auto_baud_init_cmd, length, 10);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){

	check_module_info(&huart1);
	
}

Schemat poglądowy:
image.thumb.png.a4acde76481f03fd09d114d2ca8472ed.png

Bardzo proszę o pomoc, nie mam pojęcia dlaczego układ nie działa.

Pozdrawiam,

Link do komentarza
Share on other sites

Przeczytaj o UART Firmware driver registers structures w dm00173145-description-of-stm32l4l4-hal-and-lowlayer-drivers-stmicroelectronics.pdf   czyli UM1884

Nie widzę w kodzie zastosowanego

HAL_StatusTypeDef HAL_UART_Receive_IT (UART_HandleTypeDef * huart , uint8_t * pData , uint16_t
Size)

Function description
Receive an amount of data in interrupt mode.
Parameters
• huart: UART handle.
• pData: Pointer to data buffer (u8 or u16 data elements).
• Size: Amount of data elements (u8 or u16) to be received.

W konkretnym zastosowaniu  to będzie np.

HAL_UART_Receive_IT(&huart1,uint8_t * tablica ,rozmiar tablicy);

 

 

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.