আমি বাধা ভিত্তিক ইউআরটি আইও ব্যবহার করছি (কোনও ডিএমএ নেই)।
HAL_UART_Transmit_IT
ফাংশন রেজিস্টার EIE
বিট সেট CR3
। STM32F407 ডেটাশিট অনুসারে (এবং বাস্তব আচরণ), এটি কেবলমাত্র মাল্টি বাফার মোডে বিঘ্ন ঘটায় (যখন DMAR
বিট সেট করা থাকে)। EIE
ফ্রেম ত্রুটি ( FE
), ওভাররন ত্রুটি ( ORE
), শোনার ত্রুটি ( ) এর জন্য বাধা প্রজন্মকে সক্ষম করে NE
। এই ত্রুটিটি, যেমনটি আমি বুঝতে পারি, কেবল প্রাপ্তির জন্য।
HAL_UART_IRQHandler
ফাংশনের অংশ :
tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE);
tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR);
/* UART Over-Run interrupt occurred ----------------------------------------*/
if((tmp1 != RESET) && (tmp2 != RESET))
{
__HAL_UART_CLEAR_OREFLAG(huart);
huart->ErrorCode |= HAL_UART_ERROR_ORE;
}
if(huart->ErrorCode != HAL_UART_ERROR_NONE)
{
/* Set the UART state ready to be able to start again the process */
huart->State = HAL_UART_STATE_READY;
HAL_UART_ErrorCallback(huart);
}
HAL_UART_IRQHandler
প্রতিটি ত্রুটির জন্য পরীক্ষা করে। যদি ত্রুটি দেখা দেয় এবং EIE
বিট সেট করা থাকে তবে এটি ইউআরটি অবস্থা পুনরায় সেট করে, তবে বিঘ্ন সক্ষম সক্ষম বিটগুলি পুনরায় সেট করে না, তাই TXE
বাধা সর্বদা উত্পন্ন হবে, তবে UART_Transmit_IT
ফাংশনটি রাষ্ট্রকে HAL_UART_STATE_READY
অবৈধ হিসাবে বিবেচনা করে এবং কিছুই করে না। অগণিত চক্র.
UART_Transmit_IT
ফাংশনের অংশ :
static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart)
{
uint16_t* tmp;
uint32_t tmp1 = 0;
tmp1 = huart->State;
if((tmp1 == HAL_UART_STATE_BUSY_TX) || (tmp1 == HAL_UART_STATE_BUSY_TX_RX))
{
}
else
{
return HAL_BUSY;
}
}
এটি কিউব এইচএল-তে কোনও বাগ আছে?