diff --git a/Inc/main.h b/Inc/main.h index db6aa74..f02b79b 100644 --- a/Inc/main.h +++ b/Inc/main.h @@ -41,7 +41,7 @@ extern "C" { /* Exported constants --------------------------------------------------------*/ /* USER CODE BEGIN EC */ -#define BUFFER_SIZE 8 +#define BUFFER_SIZE 515 extern uint8_t rxBuffer[BUFFER_SIZE]; /* USER CODE END EC */ diff --git a/Src/main.c b/Src/main.c index 806c68a..4100cb1 100644 --- a/Src/main.c +++ b/Src/main.c @@ -58,11 +58,11 @@ static void MX_GPIO_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ -#define BUFFER_SIZE 8 +#define BUFFER_SIZE 515 uint8_t rxBuffer[BUFFER_SIZE]; +uint16_t rxBufferPos = 0; void init_UART1(){ - USART1->CR1 &= ~USART_CR1_UE; RCC->APBENR2 |= RCC_APBENR2_USART1EN; RCC->IOPENR |= RCC_IOPENR_GPIOCEN; @@ -72,8 +72,11 @@ void init_UART1(){ GPIOC->AFR[0] |= 1 << GPIO_AFRL_AFSEL5_Pos; USART1->BRR = 128; // 32000000รท250000 - USART1->CR3 |= USART_CR3_EIE; USART1->CR1 = USART_CR1_RE; + + USART1->CR3 |= USART_CR3_EIE; + USART1->CR1 |= USART_CR1_RXNEIE_RXFNEIE; + USART1->CR1 |= USART_CR1_UE; HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); @@ -81,6 +84,38 @@ void init_UART1(){ } /* USER CODE END 0 */ +void USART1_IRQHandler(){ + if(USART1->ISR & USART_ISR_RXNE_RXFNE){ + //printf("%x ", USART1->RDR); + rxBuffer[rxBufferPos++] = USART1->RDR; + if(rxBufferPos >= BUFFER_SIZE){ + rxBufferPos = 0; + } + } + + if(USART1->ISR & USART_ISR_FE){ + USART1->ICR = USART_ICR_FECF; + printf("FE after %d\n",rxBufferPos); + rxBufferPos = 0; + printf("buf: "); + for(uint16_t i=0; i<10; i++) + printf("0x%02X ", rxBuffer[i]); + printf("\n"); + } + if(USART1->ISR & USART_ISR_ORE){ + USART1->ICR = USART_ICR_ORECF; + printf("ORE\n"); + } + if(USART1->ISR & USART_ISR_NE){ + USART1->ICR = USART_ICR_NECF; + printf("NE\n"); + } + if(USART1->ISR & USART_ISR_UDR){ + USART1->ICR = USART_ICR_UDRCF; + printf("UDR\n"); + } +} + /** * @brief The application entry point. * @retval int @@ -112,20 +147,6 @@ int main(void) MX_GPIO_Init(); /* USER CODE BEGIN 2 */ init_UART1(); - - printf("CR1 init: 0x%02lX\n", USART1->CR1 ); - printf("CR2 init: 0x%02lX\n", USART1->CR2 ); - printf("CR3 init: 0x%02lX\n", USART1->CR3 ); - printf("BRR init: 0x%02lX\n", USART1->BRR ); - printf("GTPR init: 0x%02lX\n", USART1->GTPR ); - printf("RTOR init: 0x%02lX\n", USART1->RTOR ); - printf("RQR init: 0x%02lX\n", USART1->RQR ); - printf("ISR init: 0x%02lX\n", USART1->ISR ); - printf("ICR init: 0x%02lX\n", USART1->ICR ); - printf("RDR init: 0x%02lX\n", USART1->RDR ); - printf("TDR init: 0x%02lX\n", USART1->TDR ); - printf("PRESC init: 0x%02lX\n", USART1->PRESC); - /* USER CODE END 2 */ /* Infinite loop */ @@ -133,8 +154,6 @@ int main(void) //HAL_UART_Receive_DMA(&huart1, rxBuffer, BUFFER_SIZE); while (1) { - if(USART1->ISR & USART_ISR_RXNE_RXFNE) - printf("char: '%c'\n", USART1->RDR); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */