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
//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 */
}
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)