worked on test board

This commit is contained in:
Guriy
2026-07-02 14:12:45 +03:00
parent 30cc41dc38
commit a2c5d882c2
2 changed files with 96 additions and 37 deletions

View File

@ -218,16 +218,38 @@ int main(void)
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) while (1)
{ {
if ((HAL_GPIO_ReadPin(USB_FLAG_GPIO_Port, USB_FLAG_Pin)==GPIO_PIN_SET)&&(u_rx_flg == 0)) if ((HAL_GPIO_ReadPin(USB_FLAG_GPIO_Port, USB_FLAG_Pin)==GPIO_PIN_SET)&&(u_rx_flg == 0))
{ {
//NVIC_DisableIRQ(USART1_IRQn); /* USB только что подключили: выкинуть весь мусор, накопленный в USART,
пока RX болтался без драйвера, — ДО включения прерываний */
LL_USART_ClearFlag_ORE(USART1);
LL_USART_ClearFlag_FE(USART1);
LL_USART_ClearFlag_NE(USART1);
LL_USART_ClearFlag_PE(USART1);
LL_USART_RequestRxDataFlush(USART1); // выкинуть байт из RDR, снять RXNE
UART_rec_incr = 0; // сбросить недособранный пакет
flg_tmt = 0;
LL_USART_EnableIT_PE(USART1); LL_USART_EnableIT_PE(USART1);
LL_USART_EnableIT_RXNE(USART1); LL_USART_EnableIT_RXNE(USART1);
LL_USART_EnableIT_ERROR(USART1); LL_USART_EnableIT_ERROR(USART1);
NVIC_SetPriority(USART1_IRQn, 0); NVIC_SetPriority(USART1_IRQn, 0);
NVIC_EnableIRQ(USART1_IRQn);//In other case you have FE error flag... NVIC_EnableIRQ(USART1_IRQn);
u_rx_flg = 1; u_rx_flg = 1;
} }
// if ((HAL_GPIO_ReadPin(USB_FLAG_GPIO_Port, USB_FLAG_Pin)==GPIO_PIN_SET)&&(u_rx_flg == 0))
// {
// //NVIC_DisableIRQ(USART1_IRQn);
// LL_USART_EnableIT_PE(USART1);
// LL_USART_EnableIT_RXNE(USART1);
// LL_USART_EnableIT_ERROR(USART1);
// NVIC_SetPriority(USART1_IRQn, 0);
// NVIC_EnableIRQ(USART1_IRQn);//In other case you have FE error flag...
// u_rx_flg = 1;
// }
// else // else
// { // {
// //NVIC_DisableIRQ(USART1_IRQn); // //NVIC_DisableIRQ(USART1_IRQn);

View File

@ -276,45 +276,82 @@ void TIM2_IRQHandler(void)
void USART1_IRQHandler(void) void USART1_IRQHandler(void)
{ {
/* USER CODE BEGIN USART1_IRQn 0 */ /* USER CODE BEGIN USART1_IRQn 0 */
volatile uint8_t temp;
//----
// volatile uint8_t temp;
// if(LL_USART_IsActiveFlag_RXNE(USART1) && LL_USART_IsEnabledIT_RXNE(USART1))
// {
// UART_RxCpltCallback();
// }
// else
// {
// if(LL_USART_IsActiveFlag_ORE(USART1))
// {
// //temp = USART1->RDR;
// LL_USART_ClearFlag_ORE(USART1);
// temp+= LL_USART_ReceiveData8(USART1);
// }
// else if(LL_USART_IsActiveFlag_FE(USART1))
// {
// //(void) USART1->RDR;
// //LL_USART_ClearFlag_FE(USART1);
// temp+= LL_USART_ReceiveData8(USART1);
// }
// else if(LL_USART_IsActiveFlag_NE(USART1))
// {
// //(void) USART1->RDR;
// LL_USART_ClearFlag_NE(USART1);
// temp+= LL_USART_ReceiveData8(USART1);
// }
// else if(LL_USART_IsActiveFlag_PE(USART1))
// {
// //(void) USART1->RDR;
// LL_USART_ClearFlag_PE(USART1);
// temp+= LL_USART_ReceiveData8(USART1);
// }
// else
// {
// if(LL_USART_IsActiveFlag_TC(USART6) && LL_USART_IsEnabledIT_TC(USART6))
// {
// LL_USART_ClearFlag_TC(USART1);
// //test_counter += 1;
// //if(UART_transmission_busy == 1){
// LL_USART_DisableIT_TC(USART1);
// //UART_transmission_busy = 0;
// }
// }
// }
//----
/* Любая ошибка приёма: снять ВСЕ флаги, выбросить битый байт, в парсер не пускать */
if (LL_USART_IsActiveFlag_ORE(USART1) ||
LL_USART_IsActiveFlag_FE(USART1) ||
LL_USART_IsActiveFlag_NE(USART1) ||
LL_USART_IsActiveFlag_PE(USART1))
{
LL_USART_ClearFlag_ORE(USART1);
LL_USART_ClearFlag_FE(USART1);
LL_USART_ClearFlag_NE(USART1);
LL_USART_ClearFlag_PE(USART1);
LL_USART_RequestRxDataFlush(USART1); // RXFRQ: сбросить RXNE, выкинуть байт из RDR
UART_rec_incr = 0; // сбросить недособранную команду от глитча
flg_tmt = 0;
//temp = temp; // подавить warning
return;
}
/* Нормальный приём — только чистые байты */
if (LL_USART_IsActiveFlag_RXNE(USART1) && LL_USART_IsEnabledIT_RXNE(USART1)) if (LL_USART_IsActiveFlag_RXNE(USART1) && LL_USART_IsEnabledIT_RXNE(USART1))
{ {
UART_RxCpltCallback(); UART_RxCpltCallback();
} }
else else if (LL_USART_IsActiveFlag_TC(USART1) && LL_USART_IsEnabledIT_TC(USART1))
{
if(LL_USART_IsActiveFlag_ORE(USART1))
{
//temp = USART1->RDR;
temp+= LL_USART_ReceiveData8(USART1);
}
else if(LL_USART_IsActiveFlag_FE(USART1))
{
//(void) USART1->RDR;
temp+= LL_USART_ReceiveData8(USART1);
}
else if(LL_USART_IsActiveFlag_NE(USART1))
{
//(void) USART1->RDR;
temp+= LL_USART_ReceiveData8(USART1);
}
else if(LL_USART_IsActiveFlag_PE(USART1))
{
//(void) USART1->RDR;
temp+= LL_USART_ReceiveData8(USART1);
}
else
{
if(LL_USART_IsActiveFlag_TC(USART6) && LL_USART_IsEnabledIT_TC(USART6))
{ {
LL_USART_ClearFlag_TC(USART1); LL_USART_ClearFlag_TC(USART1);
//test_counter += 1;
//if(UART_transmission_busy == 1){
LL_USART_DisableIT_TC(USART1); LL_USART_DisableIT_TC(USART1);
//UART_transmission_busy = 0;
}
}
} }
//---
/* USER CODE END USART1_IRQn 0 */ /* USER CODE END USART1_IRQn 0 */
/* USER CODE BEGIN USART1_IRQn 1 */ /* USER CODE BEGIN USART1_IRQn 1 */