HAL UART receive yardım

Başlatan magnetron, 20 Ağustos 2022, 16:20:04

magnetron

merhaba forum,

blue pill kartında UARTa gelen değişken sayıda  datayı yakalamaya çalışıyorum

şöyle güzel bir fonksiyon buldum

HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

dediğine göre belirtilen sayıda karakter gelince veya hatta IDLE durumu gerçekleşirse bu fonksiyon gelen datayı alıyor

fakat gelen datanın kaç karakter olduğunu nasıl anlıycam onu bulamadım - sıcaktan kafam durdu

bir tavsiyeniz var mı  ( Bu HAL drivere bir türlü alışamadım )

teşekkür

eti

//dma kullanılarak yapılmış örnektir
// önce dma ve interrupt açılmalıdır.


//global değişkenler
#define BUFFER_SIZE 100
uint8_t buffer[BUFFER_SIZE]; //gelen verinin aktarılacağı buffer

//main
/* USER CODE BEGIN 2 */
 __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE); // uart interrupt devrede
 HAL_UART_Receive_DMA(&huart1, buffer, BUFFER_SIZE); // dma devrede
 
 
 
 
//stm32f0xx_it.c

/**
  * @brief This function handles USART1 global interrupt.
  */
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
  uint8_t  rx_byte_count;

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  if(HAL_UART_GetError(&huart1)) {
       HAL_UART_DMAStop(&huart1);                          // STOP Uart
      HAL_UART_Init(&huart1);                              // INIT Uart
   }

     if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) == SET) { // is uart idle
      
             __HAL_UART_CLEAR_IDLEFLAG(&huart1);
               HAL_UART_DMAStop(&huart1);    // STOP Uart

           rx_byte_count =  BUFFER_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx); // dma da biriken byte sayısı
       }



  /* USER CODE END USART1_IRQn 1 */
}

Bahadır AYDINOĞLU

Merhaba,
Aşağıdaki videomda anlatmıştım.

Gelen datanın boyutuna aslında aşağıdaki fonksiyonda bulunan "Size" değişkeni ile ulaşabilirsiniz.

HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)