cancel
Showing results for 
Search instead for 
Did you mean: 

How to Communicate with UART Sensor on USART6

AMoha.13
Associate II

Hi all,

So I'm trying to communicate with a dust sensor (SMUART04L) via USART with the use of an STM32 F411RE. So far I have been able to connect it to the board and get a response of 0x42 which according to other online sources and datasheet is so far correct but I have been unable to try and retrieve data from the sensor. All other online sources show Arduino code and not LL USART code.

This is what I have so far:

	while(LL_USART_ReceiveData8(USART6)!= 0x42);
 
	for(uint8_t i=0; i<32; i++)
	{
		//LL_mDelay(500);
		Data[i] = LL_USART_ReceiveData8(USART6);
	}

The above returns value 0x42 in the array, I assumed that reading the USART would have returned the data I need one byte at a time. But the data sheet refers to a data frame format that I have to decode and I've been trying to get the data source but have been so far unsuccessful.

I assumed, similar to i2c that the sensor would just send data one byte at a time but it seems to be only transmitting 0x42.

Other online sources do a single byte read(See below) but how would I do this in LL USART?

(Below is Arduino code)

boolean readPMSdata(Stream *s) {
  if (! s->available()) {
    return false;
  }
  
  // Read a byte at a time until we get to the special '0x42' start-byte
  if (s->peek() != 0x42) {
    s->read();
    return false;
  }
 
  // Now read all 32 bytes
  if (s->available() < 32) {
    return false;
  }
    
  uint8_t buffer[32];    
  uint16_t sum = 0;
  s->readBytes(buffer, 32);
 
  // get checksum ready
  for (uint8_t i=0; i<30; i++) {
    sum += buffer[i];
  }

Any help is appreciated 🙂

5 REPLIES 5

Aren't you suppose to wait on RXNE status before calling LL_USART_ReceiveData8(), it just does a blind read, and doesn't block for actual data availability.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
AMoha.13
Associate II

Thanks for that. I did that exactly and now it works 🙂

curious_george
Associate II

Hi, I am wondering how you were able to connect the SM-UART-04L sensor to the STM32 F411RE board? Thanks!

Quite an old post..

There's only a handful of pins, surely can't be than complicated.

If you're using the NUCLEO board, determine which free pins are available for a U(S)ART

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Thanks for the quick response on such an old post!

I am more wondering how to connect the board physically as the output of the sensor has a 2x5 configuration of smaller pins that I am not sure how to connect to the MCU. I don’t have any wires currently that is able to connect to it so I’m wondering what kind of wire/adapter I would need.

Thanks again!