STM32F4 কিউব HAL UART ART এটি কোনও বাগ বা আমি কিছু মিস করছি?


9

আমি বাধা ভিত্তিক ইউআরটি আইও ব্যবহার করছি (কোনও ডিএমএ নেই)।

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;
  }
}

এটি কিউব এইচএল-তে কোনও বাগ আছে?


সাড়ে তিন বছর পরে এবং এটি এখনও একটি সমস্যা
ব্যবহারকারী 8908459

উত্তর:


4

এটি একটি বাগ।

আমি এসটি ফোরামে একই প্রশ্নটি জিজ্ঞাসা করেছি: https://my.st.com/d5c15f59

তারা এটি নিশ্চিত করেছে।


"My.st.com" লিঙ্কটির জন্য একটি লগইন প্রয়োজন। আমি এই থ্রেডটি এসটি ফোরামে পেয়েছি , যা আমি মনে করি যে এই সমস্যার প্রতিবেদন করা, এবং লগইন ছাড়াই অ্যাক্সেসযোগ্য, যাতে পাঠকরা সেটিকে দরকারী মনে করতে পারেন।
স্যামজিবসন

0

আপনি কি আপনার এমসিইউর জন্য কিউব এইচএল এর সর্বশেষতম সংস্করণটি ডাউনলোড করার চেষ্টা করেছিলেন?

আমার এইচএল_উজিন্ট ট্রান্সমিট_আইটি () ফাংশনটি আপনার থেকে খুব আলাদা বলে মনে হচ্ছে। বাগ সহ আপনার পুরানো সংস্করণ থাকতে পারে।

St.com ব্যবহার করার চেষ্টা করুন এবং কিউব এইচএল এর সর্বশেষতম সংস্করণটি অনুসন্ধান করুন। সংরক্ষণাগারের অভ্যন্তরে আপনি USART এর সাথে কিছু উদাহরণ খুঁজে পাবেন find


HAL_UART_Transmit_ITএবং UART_Transmit_ITবিভিন্ন ফাংশন হয়। প্রথমে কেবলমাত্র বাধা সেট আপ করে, যখন দ্বিতীয়টি প্রকৃতপক্ষে ডেটা প্রেরণ করে
রুব্লাগ

হ্যাঁ, তবে আপনি কি জানেন যে দ্বিতীয় ফাংশনটি কেবলমাত্র অন্যান্য এইচএল ফাংশন দ্বারা কল করা যেতে পারে যা ব্যবহারকারী দ্বারা সরাসরি নয়? এবং আমি স্রেফ আমার এইএএএল উত্স ফাইলগুলি খুলি এবং আপনি উপরে উল্লিখিত অংশের তুলনায় ইউটিল্ট ট্রান্সমিট_আইটি এবং এর আলাদা দেখতে পাই। আপনি যদি এখনও মনে করেন যে কোনও বাগ আছে তবে অন্য বিকল্পটি হ'ল সেন্ট ফোরামে একই প্রশ্নটি লিখতে।
গ্যাব্রিয়েল রেজেন্ডে জার্মানভিক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.