cancel
Showing results for 
Search instead for 
Did you mean: 

NUCLEO-STM32G0B1RE USART2 with CTS/RTS can NOT communicate with U-blox GSM module LARA-6004D?

E-John
Associate III

Dear Sir,

 

I have a NUCLEO-STM32G0B1RE board. I configure USART2 with CTS and RTS try to communicate with u-blox GSM module LARA-6004D, but fails. No data received.

Is there any missing? Any comment are welcome, thanks.

hardware connection is

MCU TXD <-> GSM RXD

MCU RXD <-> GSM TXD

MCU CTS <-> GSM RTS

MCU RTS <-> GSM CTS

 

IOC config about USRAT2 are as fillows,

 

32:Mcu.IP4=USART2 65:NVIC.USART2_LPUART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true 93:PD3.Signal=USART2_CTS 96:PD4.Signal=USART2_RTS 98:PD5.GPIO_Label=USART2_TX [STLK_TX] 101:PD5.Signal=USART2_TX 103:PD6.GPIO_Label=USART2_RX [STLK_RX] 106:PD6.Signal=USART2_RX 149:ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true 168:RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APBFreq_Value,APBTimFreq_Value,CECFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2S1Freq_Value,I2S2Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LPUART2Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PWRFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,TIM15Freq_Value,TIM1Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value 186:RCC.USART2Freq_Value=64000000 191:USART2.IPParameters=VirtualMode-Asynchronous 192:USART2.VirtualMode-Asynchronous=VM_ASYNC

 

 Code snippet are

 

#define RX_BUFFER_SIZE 128 typedef struct { uint8_t buffer[RX_BUFFER_SIZE]; size_t head; size_t tail; } RingBuffer; UART_HandleTypeDef huart2; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART2) { /* Get the received character */ uint8_t data = huart2.Instance->RDR; /* Add the data to the ring buffer */ rx_buffer.buffer[rx_buffer.head] = data; rx_buffer.head = (rx_buffer.head + 1) % RX_BUFFER_SIZE; /* Restart the interrupt-driven reception for the next byte */ HAL_UART_Receive_IT(&huart2, &rx_buffer.buffer[rx_buffer.head], 1); } } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_USART2_UART_Init(); MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart2, (uint8_t*)rx_buffer.buffer, 1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if (i % 1000 == 0) { HAL_UART_Transmit_IT(&huart2, "AT", 2); } i++; /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
View more

 

 

1 ACCEPTED SOLUTION

Accepted Solutions

Hi Andrew,

After test, the conclusion is below,

For GSM module LARA-6004D which voltage is 1.8V

1. It needs a level-shift circuit between the STM32 and the GSM module.

2. The 4-wire connection should be as below described, cross-over connection is not needed because MCU is DTE and GSM is DCE.

MCU TXD <-> GSM TXD

MCU RXD <-> GSM RXD

MCU CTS <-> GSM CTS

MCU RTS <-> GSM RTS

View solution in original post

4 REPLIES 4

Can you communicate with the module using a PC terminal ?

Hi Andrew,

Currently no USB-Uart with CTS/RTS dongle on my hand to do the cross-reference.

That helps to check the GSM target side setting. I would buy one to check it. Thanks for your suggestion.

Hi Andrew, 

Most likely the level-shift problem, I measured MCU UART voltage is 3.3V, while GSM module UART level is 1.8V

Hi Andrew,

After test, the conclusion is below,

For GSM module LARA-6004D which voltage is 1.8V

1. It needs a level-shift circuit between the STM32 and the GSM module.

2. The 4-wire connection should be as below described, cross-over connection is not needed because MCU is DTE and GSM is DCE.

MCU TXD <-> GSM TXD

MCU RXD <-> GSM RXD

MCU CTS <-> GSM CTS

MCU RTS <-> GSM RTS