Estoy tratando de recibir serie en un stm32f411.
Decidí monitorizar la bandera RXNE para comprobar el buffer serie. Puedo conseguir que la bandera funcione, sin embargo, la cuestión es que no creo que esté funcionando completamente.
Configuré una prueba para incrementar un contador basado en cuántas veces necesito leer el registro DR. El problema es que no consigo incrementar el contador más de una vez. Para verificar esto, simplemente hice un bucle para encender un LED basado en cuántas veces accedí al registro DR. Lo máximo que puedo hacer que el LED parpadee es 2 veces. ¿Está mal la lógica de mi código?
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
/* USER CODE BEGIN Includes */
#include <stdbool.h>
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint8_t pdiddy_increment = 0;
int pdiddy[15];
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
// detect if anything is in serial buffer
uint8_t Serial_Available(UART_HandleTypeDef *huart)
{
uint32_t RX_State;
RX_State = huart->Instance->SR & UART_FLAG_RXNE;
//something is in the buffer
if (RX_State > 0)
{
return 1;
}
//nothing is there
return 0;
}
/* USER CODE END 0 */
int main(void)
{
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
while (1)
{
while (Serial_Available(&huart1))
{
/*read DR and put value in array*/
/*Reading DR, increment shift*/
pdiddy[pdiddy_increment] = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF);
pdiddy_increment++;
}
while (pdiddy_increment > 0)
{
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
HAL_Delay(400);
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
HAL_Delay(400);
pdiddy_increment--;
}
}
/* USER CODE END 3 */
}