اطلاعیه

Collapse
No announcement yet.

هنگ کردن stm32f103 هنگام جدا کردن پورت USB

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    هنگ کردن stm32f103 هنگام جدا کردن پورت USB

    سلام دوستان
    من به تازگی با میکرو stm32f103 و با استفاده از کتابخانه خود st پورت usb را در حالت دیوایس و در کلاس CDC راه اندازی کردم و ارسال و دریافت را به راحتی انجام میدهم.مشکل از آنجایی شروع می شود که پورت را از pc جدا می کنم.در بار اول مشکلی ایجاد نمیشود ولی دفعه بعد میکرو هنگ میکند و باید ریست شود.ممنون می شوم کسی برای من توضیح بده برای جدا کردن پورت باید چه مراحلی طی کرد؟در ضمن درایور سمت pc هم مال خود st است.

    #2
    پاسخ : هنگ کردن stm32f103 هنگام جدا کردن پورت USB

    دوستان کسی نظری نداره؟تا حالا کسی به این مشکل نخورده؟ :angry:

    دیدگاه


      #3
      پاسخ : هنگ کردن stm32f103 هنگام جدا کردن پورت USB

      وقت بخیر

      بنظرم اگر در برنامه شما hand shaking وجود دارد و بعد از قطع شدن ارتباط نرم افزار در یک حلقه بماند میکرو هنگ میشود .

      دیدگاه


        #4
        پاسخ : هنگ کردن stm32f103 هنگام جدا کردن پورت USB

        ممنون از پاسختون.
        در برنامه سیگنالهای handshaking پیاده نشده است و فکر نمیکنم از این مورد باشه.طبق عیبیابی که انجام دادم برنامه زمانی که برای بار دوم به تابع USBD_CDC_ DeInit وارد می شود (یعنی دفعه دوم که پورت را جدا می کنم) هنگ می کند.
        آنچه در این تابع موجب هنگ میشود این تابع است:
        USBD_free(pdev->pClassData);
        با حذف این خط برنامه به خوبی کار می کند و مشکلی هم وجود ندارد اما باعث میشه حافظه بلااستفاده درایور USB آزاد نشه که خوب نیست.
        به نظرتون چرا نمیتونه حافظه رو آزاد کنه؟

        دیدگاه


          #5
          پاسخ : هنگ کردن stm32f103 هنگام جدا کردن پورت USB

          وقت بخیر

          روی این مورد خاص خودم تجربه ندارم ولی پیشنها میکنم ، خودتون یک حلقه اضافه کنید ! در صورت ماندگاری بیش از اندازه در یک دستور ! یا عدم ارسال و دریافت سریال دستورات لازم برای خروج از برنامه و آزاد شدن حافظه یا پورت رو بدهد .

          دیدگاه


            #6
            پاسخ : هنگ کردن stm32f103 هنگام جدا کردن پورت USB

            بازم ممنون
            واقعیت اینه که من با حذف اون دستور در واقع در درایور دست بردم که کار غلطی است.چون درایور نوشته خود st است و احتمال 99 درصد درسته.(البته امیدوارم)
            الان سوال من در واقع اینه که چرا برنامه نمیتونه حافظه رو آزاد کنه به عبارت دیگه چه موقع دستور free باعث هنگ میشه .چرا تو بار اول این اتفاق نمی افته. گیج شدم حسابی

            دیدگاه

            لطفا صبر کنید...