اطلاعیه

Collapse
No announcement yet.

دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

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

    دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

    سلام به تمامی دوستان
    من به یه مشکل در برنامه نویسی خوردم .... من با کامپایلر keil کار میکنم
    هر کاری میکنم نمیتونم رشته رو از پورت سریال بخونم ،،،، من همین کارو با میکرو ی sam7x و lpc با کامپایلر keil انجام دادم ولی الان با stm32 جواب نمیده ،،، 3 روز دیونم کرده ...
    بهترین تابعی که من ازش برای گرفتن رشته از پورت سریال استفاده میکنم تابع gets در کتابخونه stdio است همجا جواب داده اما اینجا نه . . . دوستان کمممممک ... :angry:
    ARM....

    #2
    پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

    ما کلی پورت سریال داریم. کدوم؟(USART؟)
    از صحیح پیکربندی شدنش مطمئنی؟
    با CMSIS ؟ ریجسترهاش چی؟

    دیدگاه


      #3
      پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

      مگه فرقی هم میکنه از کدوم usart باشه .... من stm32 سری v استفاده میکنم و هر 3 usart هم راه انداختم .... هم ارسال کاراکتر دارم هم دریافت و همچنین ارسال رشته دارم ولی دریافت رشته مشکل داره ... از بابت پیکربندی ها و مقادیر رجیسترها مطمئنم ... فقط اگه این تابع gets درست کار کنه حله . . . خودم کاملا گیجمممممم :angry:
      ARM....

      دیدگاه


        #4
        پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

        نوشته اصلی توسط محمد صادقی فرد (MSF)
        مگه فرقی هم میکنه از کدوم usart باشه .... من stm32 سری v استفاده میکنم و هر 3 usart هم راه انداختم .... هم ارسال کاراکتر دارم هم دریافت و همچنین ارسال رشته دارم ولی دریافت رشته مشکل داره ... از بابت پیکربندی ها و مقادیر رجیسترها مطمئنم ... فقط اگه این تابع gets درست کار کنه حله . . . خودم کاملا گیجمممممم :angry:
        نگفتم کدوم USART! منظورم این بود که منظور شما USART هستش؟
        متاسفانه مدتی هستش که نه تنها شما بلکه خیلی ها به UART(USART) میگین سریال!
        مگه USB، SPI, I2C و ... باس ها و پروتکل ها و ارتباطات سریالی نیستن؟
        پس با این تفاسیر باید مشکل از تابع get باید باشه. می تونی خودت یه تابع واسه دریافت بنویسی؟
        با توابع دیگه می تونی رشتت رو بگیری؟

        دیدگاه


          #5
          پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

          کاملا حق با شماست ... میدونید این کلمات تقریبا عامیانه شده ... چه تو دانشگاه چه بین دوستان ...
          بگذریممم
          من از توابع زیادی استفاده کردم ... حتی اومدم کاراکتر به کاراکتر رشته رو دریافت کردم ولی بازم تو خوندنش مشکل داشتم .
          اینم تابعی که نوشتم البته کاملا مبتدیانه :icon_razz:
          void chek (void){


          while(1){
          i[j] = USART_ReceiveData(USART2);
          if(i[j-1]==10){
          j=0;
          break;
          }
          j=j+1;
          }
          if(i[1]=='m&#039{
          printf("ok"
          }

          if(i[2]=='a&#039{
          printf("ok"
          }
          }
          من میام رشته 'mohammad' رو به usart ارسال میکنم که همینجوری که در تابع بالا میبینی گفتم کاراکتر به کاراکتر چک کنه ، کلمه اول که همون "m" هستش رو به درستی دریافت میکنه و به من ok رو میده حالا وقتی میخوام کاراکترهای بعدی رو بدست بیارم مثلا "a" که کاراکتر دومی هستش اصلا درس جواب نمیده . . .
          ببینید من تو برنامه اشتباهی نکردم
          ARM....

          دیدگاه


            #6
            پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

            سلام
            دوست خوبم این روش شما در دریافت، چندتا مشکل برنامه ای داره
            1- شما بهتره به i و J مقدار اولیه بدین !
            فرض کنید مقدار J=0 باشه ، اونوقت مقدار آرایه ی در [j-1] به کجا اشاره داره ؟ این میتونه باعث ایجاد خطا بشه

            2- بهتره به جای استفاده از مقدار گذشته که به پورت وارد شدن از مقدار حال استفاده کنی

            3- آرایه ها در زبان C از شماره اندیس 0 شروع میشن ! برخلاف بیسیک !
            پس اگه رشته ی Mohammad رو وارد کنی در واقع M دراندیس شماره صفر قرار میگیره ! نه اندیس شماره یک ! و الی آخر
            البته این چیزا توی کار عادیه چون معمولا وقتی آدم زیاد کد می نویسه بعضی جاها اینجوری میشه ! :nice:

            دیدگاه


              #7
              پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

              ممنون دوست عزیز از راهنماییت
              اما . . . :angry:
              تمام راهایی که گفتی قبلا تست کردم ( در مورد j-1 کاملا حرفت درسته ولی چون همیشه مقدار j بالاتر از یک هست پس این احتمال کمه و چون حلقه یک بار میچرخه تا به شرط من برسه مجبورم j-1 بذارم )
              نمیتونم مقدار اولیه بذارم بجای i و j ( چون من که هر دفعه که میخوام یه رشته با طولی که نمیدونم بفرستم مشکل بر میخورم )
              حالا جالب اینجاست stm32 در سایت های چینی دارای بالاترین مثال های موجود که تا حالا نشده دنبال یه چیزی بگردم پیدا نکنم در موردش ( بهترین سایت http://en.pudn.com/ ) ولی تو هیچ سایتی و هیچ exampl نیومده رشته رو با stm32 بدست بیاره ( یعنی کار به این آسونی انقدر سخته oo: )
              ARM....

              دیدگاه


                #8
                پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                من با stm32 تا حالا کار نکردم ولی این نمی تونه ربطی به ماجرا داشته باشه ! خب بیا از اینجا شروع کنیم :
                1 - بُردی رو که ساختی به کامپیوتر وصل کن ( یا به هر چیزی که بتونی کنترل شده به هش کارکتر ارسال کنی )

                2- با فرض بر اینکه تمامی پیکربندی ها رو درست انجام دادی ! بیا داخل حلقه ی اصلی برنامت ، رجیستر دریافت داده ی پورت سریال رو بریز داخل یه متغیر دیگه
                و این حلقه همیشه تکرار بشه ( بقیه قسمت های برنامه تو رو فعلا کامنت کن )

                3- میکروتو پروگرام کن و با j-link میکرورو در حالت دیباگ run کن

                4 - از کامپیوتر توسط هر برنامه ای که دوست داری ! یک کارکتر به میکرو ارسال کن ( توجه کن بعضی از برنامه ها علاوه بر کارکتر مورد نظر کدهای کلید اینتر رو هم میفرستند ! یادت باشه اونارو غیر فعال کنی تا فقط کارکتر خودت ارسال بشه !)

                5- حالا بیا توی محیط کمپایلر میکرو و مقدار متغیری که داده ی پورت سریال رو توش ریخیتی رو بررسی کن ! ببین با کارکتری که خودت فرستادی یکی هست یا نه !
                6 - اگر تا اینجا همه چی خوب بود یعنی اینکه تو پیکربندی تو خوب انجام دادی و ارتباط سخت افزاریت هم خوبه و درسته ! در غیر این صورت مشکلت توی پیکربندی یا تو سخت افزاره

                7-اگه کارکترو درست دریافت کردی ! حالا بیا همون مراحلو انجام بده ولی ایندفعه سعی کن که یه آرایه رو از اندیس صفر پر کنی و از طرف کامپیوتر هم بجای یک کارکتر چند کارکتر پشت سر هم بفرست !

                8- دوباره بعد ارسال بیا توی کمپایلر ، آرایه دریافتی رو ببین ! اگه همه چی درست بود نتیجه میگیریم که مشکل نرم افزاری داری و میتونی راحت درستش کنی ولی اگه آرایه دریافتی به هم ریخته بود ! مشکلات دیگه ای داره

                حالا برو انجام بده ببینیم چی میشه

                دیدگاه


                  #9
                  پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                  سلام
                  من همانند 1768 پورت سریال stm را انجام دادم و مشکلی نداشتم. فکر کنم دلیل اینکه نتونستید دریافت رشته را انجام دهید این است که در میکروهای قبلی اصولی دریافت رشته را انجام نمی دادید و حالا گیر افتادید! این اتفاقی بود که برای من در 2378 افتاد که بر اساس سمپل های غیر اصولی موجود در اینترنت دریافت انجام می دادم ولی تا رفتم در 1768 گیر کرد.
                  برای دریافت رشته باید در یک تابع یکی یکی کاراکترها را با تابع دریافت کاراکترGetKey دریافت و در یک آرایه بریزید و تا اینتر اومد تموم کنه کار را و خارج بشه و یا اینتراپت سریال را فعال کنید که تا هر کاراکتر اومد بره در زیر روال و بگیره تا جایی که باز اینتر زدید تموم بشه.
                  فیلم آموزشی میکروکنترلر LPC1768
                  فیلم آموزشی تکمیلی و پیشرفته میکروکنترلر LPC1768
                  فیلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                  فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                  دیدگاه


                    #10
                    پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                    سلام دوست من
                    ممنون از جوابت . . . من از هدرهایی که از خود سایت st.com گرفتم استفاده کردم
                    میشه یه تیکه کوچیک از برنامه و هدرهایی که استفاده کردید رو بذارید . . . ممنون میشم
                    ARM....

                    دیدگاه


                      #11
                      پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                      سلام
                      برای دریافت رشته من سمپلی ندیدم که در این سمپل ها گذاشته باشند
                      ببینید برای مورد اول که گفتم یک آرایه تعریف می کنید و در یک حلقه while میذاریدش که یکی یکی بیاد کاراکتر بگیره بریزه تو این آرایه:
                      کد:
                      c[i] = GetChar();
                      تا زمانی این کار را انجام بده که اینتر اومد یعنی 0x0D تا اینتر اومد خارج میشه از while

                      فیلم آموزشی میکروکنترلر LPC1768
                      فیلم آموزشی تکمیلی و پیشرفته میکروکنترلر LPC1768
                      فیلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                      فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                      دیدگاه


                        #12
                        پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                        همچنین استفاده از DMA رو هم بهتون پیشنهاد می کنم، برای USART...
                        بنده هم برای دریافت رشته از این روش استفاده می کنم:
                        کد:
                        while (a != 13)
                        				{
                        				 	a = GetKey();
                        					str[i] = a;
                        					i++;
                        				}

                        «پشتکار» «پشتکار» «پشتکار»

                        دیدگاه


                          #13
                          پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                          نوشته اصلی توسط محمد صادقی فرد (MSF)
                          حالا جالب اینجاست stm32 در سایت های چینی دارای بالاترین مثال های موجود که تا حالا نشده دنبال یه چیزی بگردم پیدا نکنم در موردش ( بهترین سایت http://en.pudn.com/ )
                          میگم شما چطوری از این سایت http://en.pudn.com دانلود می کنید؟ دانلودش پولیه؟
                          فیلم آموزشی میکروکنترلر LPC1768
                          فیلم آموزشی تکمیلی و پیشرفته میکروکنترلر LPC1768
                          فیلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                          فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                          دیدگاه


                            #14
                            پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                            نه پولی نیست ،،، فقط باید عضو بشی ،،، عضو شدنشم خیلی راحته ...
                            ARM....

                            دیدگاه


                              #15
                              پاسخ : دریافت رشته از پورت سریال !!!! ؟؟؟؟ مشکل

                              پس چرا تا دانلود میزنم میگه:
                              Your VIP member account is not active now. Please [Pay first], or leave your words in [Guestbook].
                              !!؟؟؟
                              فیلم آموزشی میکروکنترلر LPC1768
                              فیلم آموزشی تکمیلی و پیشرفته میکروکنترلر LPC1768
                              فیلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                              فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                              دیدگاه

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