cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F407 Buffer printing HAL_UART_Transmit

davidec
Associate III

Good morning everyone, after collecting some data and storing it in various buffers, I am trying to write them to the serial port for further processing. I am experiencing issues as I can see that something is being written to the serial port, but not all the samples in the buffer are being printed. Any suggestions?

 

  while (1)

  {

  HAL_UART_Receive (&huart2, UART1_rxBuffer, 1, 5000); //receive and store string

 

  if(UART1_rxBuffer[0] == 115){

  HAL_UART_Transmit(&huart2, UART1_rxBuffer, 1, 100); //print received string

  if(flag == 1){ //check add finished

  for(c=0;c<ADC_BUF_SIZE/2;c++){

  sprintf(str, "%hu",(uint16_t*)buf1[c]); // conversion in str of value

  HAL_UART_Transmit(&huart2, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);

 

  HAL_Delay(10);

  }

  HAL_UART_Transmit(&huart2,(uint8_t *)space,strlen(space),10); // string = “— — — — ;”

  UART1_rxBuffer[0]=0; // start flag clear

  flag = 0; // conversion adc clear

  }

  }

 

  }

16 REPLIES 16

i have already done it. The adc sample the signal that i need and after the buffer filling I need, it does not change buf1 and buf2. The problem remains for me to print the values to serial and then process them externally.

 

for(i=0;i<ADC_BUF_SIZE/2;i++)

			        	  {
			        		  buf1[i] = (uint16_t)(adcBuf[i]&0x0000FFFF);
			        	  	  buf2[i] = (uint16_t)(adcBuf[i]>>16);
			        	  }
	}

 sprintf(str, "%hu",(uint16_t*)buf1[c]); // conversion in str of value

 Did you fix the error on this line? Show the corrected code.

 

If you feel a post has answered your question, please click "Accept as Solution".
davidec
Associate III
  while (1)
  {
	  HAL_UART_Receive (&huart2, UART1_rxBuffer, 1, 5000);

	  if(UART1_rxBuffer[0] == 115){
		  HAL_UART_Transmit(&huart2, UART1_rxBuffer, 1, 100);
		  if(flag == 1){
		  for(c=0;c<ADC_BUF_SIZE/2;c++){
			  sprintf(str, "%u\r\n",((uint16_t*)buf1)[c]); // conversion in str of value
			  HAL_UART_Transmit(&huart2, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
			  HAL_Delay(100);

		  }
		  HAL_UART_Transmit(&huart2,(uint8_t *)space,strlen(space),10);
		  UART1_rxBuffer[0]=0;
		  flag = 0;
	  }
	  }

So show what is in buf1 array, and what you're seeing being printed. And what are you printing to?

CANable V3 firmware | CAN-X CAN bus analyzer software for CANable V3 |
TimerCallback tutorial! | UART and DMA Idle with multiple UART instances tutorial!

If you find my solution useful, please click the Accept as Solution so others see the solution.
davidec
Associate III

Screenshot 2023-10-24 alle 11.02.56.png

So what interface are you using to communicate with uart2? I suspect that is your weak link.

 

I am using a STM32F407VG-Discovery, used your code and saved the same data that you've provided. When i press the letter 's', I am able to output all the data correctly.

 

Screenshot 2023-10-24 025636.pngScreenshot 2023-10-24 025645.png

CANable V3 firmware | CAN-X CAN bus analyzer software for CANable V3 |
TimerCallback tutorial! | UART and DMA Idle with multiple UART instances tutorial!

If you find my solution useful, please click the Accept as Solution so others see the solution.
davidec
Associate III

I am using a TTL converter because via usb I cannot see the serial port. Is there some setting I'm missing?