worked on test board
This commit is contained in:
26
Src/main.c
26
Src/main.c
@ -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);
|
||||||
|
|||||||
@ -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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user