STM32F4 घन HAL UART। क्या यह बग है या मुझे कुछ याद आ रहा है?


9

मैं रुकावट आधारित UART IO (नो डीएमए) का उपयोग कर रहा हूं।

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बिट सेट हो गया है, तो यह UART स्थिति को रीसेट करता है, लेकिन बाधित करने योग्य बिट्स को रीसेट नहीं करता है, इसलिए 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;
  }
}

क्या यह घन एचएएल में एक बग है?


साढ़े तीन साल बाद और यह अभी भी एक समस्या है
user8908459

जवाबों:


4

यह एक बग है।

मैंने एसटी मंच पर एक ही सवाल पूछा: https://my.st.com/d5c15f59

उन्होंने इसकी पुष्टि की।


"My.st.com" लिंक के लिए लॉगिन आवश्यक है। मुझे एसटी मंच पर यह धागा मिला , जो मुझे लगता है कि इस समस्या की रिपोर्टिंग है, और बिना लॉगिन के सुलभ है, इसलिए पाठकों को यह उपयोगी लग सकता है।
सैमबिब्सन

0

क्या आपने अपने MCU के लिए Cube HAL का अंतिम संस्करण डाउनलोड करने का प्रयास किया?

मेरा HAL_UART_Transmit_IT () फ़ंक्शन आपसे बहुत भिन्न है। हो सकता है कि आपके पास बग्स के साथ एक पुराना संस्करण हो।

पहुँच st.com का प्रयास करें और क्यूब एचएएल के अंतिम संस्करण की खोज करें। संग्रह के अंदर आपको USART के साथ कुछ उदाहरण मिलेंगे।


HAL_UART_Transmit_ITऔर UART_Transmit_ITविभिन्न कार्य हैं। पहले केवल इंटरप्ट को सेट करता है, जबकि दूसरा वास्तव में डेटा को प्रसारित करता है
रुबलैग

हां, लेकिन आप जानते हैं कि दूसरा फ़ंक्शन केवल अन्य एचएएल फ़ंक्शन द्वारा कॉल किया जा सकता है जो उपयोगकर्ता द्वारा निर्देशित नहीं है? और मैं अभी अपनी HAL स्रोत फ़ाइलों को खोलता हूं और UART_Transmit_IT और इसके अलग-अलग हिस्से को पाऊंगा। अन्य विकल्प अगर आपको अभी भी लगता है कि बग है तो सेंट फोरम पर एक ही प्रश्न लिखना होगा।
गैब्रियल रेजेंडे जर्मनोविक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.