اطلاعیه

Collapse
No announcement yet.

مشکل عجیب uart در lpc1768

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

    مشکل عجیب uart در lpc1768

    مشکل عجیبی که برام اتفاق افتاده و واقعا گیجم کرده یه برنامه ساده uart که یک رشته میفرسته به پورت سریال در میکرو lpc1768نوشته ام که این برنامه برای uart0 هست و خیلی خوب کار میکرد تا دیروز که هیچ چیزی رو در خروجی ترمینال uart نشون نمیده واز لحاظ سخت افزاری و نرم افزاری هم هیچ مشکلی نداره پورت uart0 میکرو هم سالمه چون باهاش میتونم device id میکرو رو بخونم و همین طور پروگرم کنم یا پاک کنم حافظه فلش رو برنامه هم تا قبل از این به خوبی جواب میداد و رشته رو تو خروجی نمایش میداد ولی الان هیچی نمایش نمیده این هم برنامه است که قسمت های اضافیش رو حذف کردم ممنون میشم کمکم کنید
    کد:
    #include "lpc17xx.h"
    #include "type.h"
    #include "uart.h"
    
    extern volatile uint32_t UART0Count;
    extern volatile uint8_t UART0Buffer[BUFSIZE];
    extern volatile uint32_t UART1Count;
    extern volatile uint8_t UART1Buffer[BUFSIZE];
    void Delay(void){
    	int i;
    	for(i=0;i<4000000;i++);
    }
    
    int main (void)
    {int a;
     
     SystemClockUpdate();
    
     UARTInit(0, 9600);	/* baud rate setting */
     UART_PrintStr ("salam4");
    	Delay();
     UART_PrintStr ("salam5");
     while (1);
    }

    #2
    پاسخ : مشکل عجیب uart در lpc1768

    ترمینالتون رو عوض کنید . ممکنه از ترمینال باشه .
    اگه ممکنه تابع راه اندازی uartinit() که نوشتین رو بذازین .
    چه زشت است کوچکي به هنگام نياز و سرکشي به هنگام بي نيازي ...

    دیدگاه


      #3
      پاسخ : مشکل عجیب uart در lpc1768

      ممنون که پاسخ دادین با ترمینال های دیگه هم تست کردم نشد تو برنامه هم مشکلی ندیدم میگم تا چند روز پیش کار میکرد ومشکلی نداشت از تابع خود keil هم استفاده کردم
      کد:
      uint32_t UARTInit( uint32_t PortNum, uint32_t baudrate )
      {
       uint32_t Fdiv;
       uint32_t pclkdiv, pclk;
      
       if ( PortNum == 0 )
       {
      	LPC_PINCON->PINSEL0 &= ~0x000000F0;
      	LPC_PINCON->PINSEL0 |= 0x00000050; /* RxD0 is P0.3 and TxD0 is P0.2 */
      	/* By default, the PCLKSELx value is zero, thus, the PCLK for
      	all the peripherals is 1/4 of the SystemFrequency. */
      	/* Bit 6~7 is for UART0 */
      	pclkdiv = (LPC_SC->PCLKSEL0 >> 6) & 0x03;
      	switch ( pclkdiv )
      	{
      	 case 0x00:
      	 default:
      		pclk = SystemFrequency/4;
      		break;
      	 case 0x01:
      		pclk = SystemFrequency;
      		break; 
      	 case 0x02:
      		pclk = SystemFrequency/2;
      		break; 
      	 case 0x03:
      		pclk = SystemFrequency/8;
      		break;
      	}
      
        LPC_UART0->LCR = 0x83;		/* 8 bits, no Parity, 1 Stop bit */
      	Fdiv = ( pclk / 16 ) / baudrate ;	/*baud rate */
        LPC_UART0->DLM = Fdiv / 256;							
        LPC_UART0->DLL = Fdiv % 256;
      	LPC_UART0->LCR = 0x03;		/* DLAB = 0 */
        LPC_UART0->FCR = 0x07;		/* Enable and reset TX and RX FIFO. */
      
        	NVIC_EnableIRQ(UART0_IRQn);
      
        LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS;	/* Enable UART0 interrupt */
        return (TRUE);
       }
       else if ( PortNum == 1 )
       {
      	LPC_PINCON->PINSEL4 &= ~0x0000000F;
      	LPC_PINCON->PINSEL4 |= 0x0000000A;	/* Enable RxD1 P2.1, TxD1 P2.0 */
      	
      	/* By default, the PCLKSELx value is zero, thus, the PCLK for
      	all the peripherals is 1/4 of the SystemFrequency. */
      	/* Bit 8,9 are for UART1 */
      	pclkdiv = (LPC_SC->PCLKSEL0 >> 8) & 0x03;
      	switch ( pclkdiv )
      	{
      	 case 0x00:
      	 default:
      		pclk = SystemFrequency/4;
      		break;
      	 case 0x01:
      		pclk = SystemFrequency;
      		break; 
      	 case 0x02:
      		pclk = SystemFrequency/2;
      		break; 
      	 case 0x03:
      		pclk = SystemFrequency/8;
      		break;
      	}
      
        LPC_UART1->LCR = 0x83;		/* 8 bits, no Parity, 1 Stop bit */
      	Fdiv = ( pclk / 16 ) / baudrate ;	/*baud rate */
        LPC_UART1->DLM = Fdiv / 256;							
        LPC_UART1->DLL = Fdiv % 256;
      	LPC_UART1->LCR = 0x03;		/* DLAB = 0 */
        LPC_UART1->FCR = 0x07;		/* Enable and reset TX and RX FIFO. */
      
        	NVIC_EnableIRQ(UART1_IRQn);
      
        LPC_UART1->IER = IER_RBR | IER_THRE | IER_RLS;	/* Enable UART1 interrupt */
        return (TRUE);
       }
       return( FALSE ); 
      }

      دیدگاه


        #4
        پاسخ : مشکل عجیب uart در lpc1768

        کدتون درسته . عجیبه .
        باز می خاین اینم تست کنین :
        [code=c]#define FOSC 12000000 /* Oscillator frequency */

        #define FCCLK (FOSC * 8) /* Master clock frequency <= 100Mhz */
        /* Multiples of FOSC */
        #define FCCO (FCCLK * 3) /* PLL frequency (275Mhz ~ 550Mhz) */
        /* And FCCLK the same or an even multiple of its */
        #define FPCLK (FCCLK / 4) /* Peripheral clock frequency, FCCLK 1 / 2, 1 / 4*/
        /* The same or FCCLK */

        #define UART0_BPS 9600 /* 0 Serial communication baud rate */
        #define UART2_BPS 9600 /* 2 serial communication baud rate */
        /************************************************** ************************************************** *****
        ** Function name: UART0_Init
        ** Descriptions: By default initialize the serial port 0 pins and communication parameters. Set to 8 data bits, 1 stop bit, no parity
        ** input parameters: No
        ** output parameters: No
        ** Returned value: No
        ************************************************** ************************************************** *****/
        void UART0_Init (void)
        {
        uint16_t usFdiv;
        /* UART0 */
        LPC_PINCON->PINSEL0 |= (1 << 4); /* Pin P0.2 used as TXD0 (Com0) */
        LPC_PINCON->PINSEL0 |= (1 << 6); /* Pin P0.3 used as RXD0 (Com0) */

        LPC_UART0->LCR = 0x83; /* Allows you to set the baud rate */
        usFdiv = (FPCLK / 16) / UART0_BPS; /* Set baud rate */
        LPC_UART0->DLM = usFdiv / 256;
        LPC_UART0->DLL = usFdiv % 256;
        LPC_UART0->LCR = 0x03; /* Locked baud rate */
        LPC_UART0->FCR = 0x06;
        }[/code]
        چه زشت است کوچکي به هنگام نياز و سرکشي به هنگام بي نيازي ...

        دیدگاه


          #5
          پاسخ : مشکل عجیب uart در lpc1768

          ممنون کد شمارو اجرا کردم ولی نشد :sad: فقط یه چیزی موقع پروگرم کردن میکرو برنامه ارور operation failed (faild to erase block0) داد که سرعت بادریتو روی عدد بیشتری تنظیم کردم و مشکل حل شد به نظر شما میتونه مربوط باشه به این مشکل ؟

          دیدگاه


            #6
            پاسخ : مشکل عجیب uart در lpc1768

            نوشته اصلی توسط amintanharpd
            ممنون کد شمارو اجرا کردم ولی نشد :sad: فقط یه چیزی موقع پروگرم کردن میکرو برنامه ارور operation failed (faild to erase block0) داد که سرعت بادریتو روی عدد بیشتری تنظیم کردم و مشکل حل شد به نظر شما میتونه مربوط باشه به این مشکل ؟
            باود ریت مناسب واسه پروگرام 9600 هست .من از بوت لودر استفاده می کردم ، این بلاک ها رو پاک نمی کنم . آدرس شروع رو 0x2000 میذارم .
            جالب شده .
            uart های دیگه چی ؟ جواب میده . از 1 2 3 استفاده کردین ؟
            چه زشت است کوچکي به هنگام نياز و سرکشي به هنگام بي نيازي ...

            دیدگاه


              #7
              پاسخ : مشکل عجیب uart در lpc1768

              نمیشه با uart 1 هم تست کردم نشد نمیدونم مشکلش از کجاست فکر میکنم سخت افزاری باید باشه ینی منظورم اینه که میکرو براش یه اتفاقی افتاده که اینجوری شده چون با buadrate کمتر از230400هم پروگرم نمیشه و همون اروری رو که گفتم بهم میده یه جای کار این میکرو ایراد پیدا کرده آخه قبل از این اتفاق بخاطر پروژه تاچ lcd و... خیلی پروگرامش کردم ینی هی پاک کردم بعد دوباره پروگرام کردم فکر کنم خسته شده بنده خدا :biggrin: ولی برام عجیبه نباید یه همچین مشکلی پیدا کنه

              دیدگاه


                #8
                پاسخ : مشکل عجیب uart در lpc1768

                این که دلیل نمیشه چقد پروگرام شده :rolleyes:
                این مشکل شما رو دیگه باید از نزدیک دید .
                باز باهاش کار کنین ، شاید درست شد .
                چه زشت است کوچکي به هنگام نياز و سرکشي به هنگام بي نيازي ...

                دیدگاه


                  #9
                  پاسخ : مشکل عجیب uart در lpc1768

                  نه اون که شوخی بود خسته چیه :biggrin: شما منظورت اینه که ممکنه سخت افزاری ممکنه مشکل داشته باشه؟ خوب شما نظرت چیه ینی مربوط به کدوم قسمت میشه reset میکرو ، کریستال یا چی ؟

                  دیدگاه


                    #10
                    پاسخ : مشکل عجیب uart در lpc1768

                    آره همه چی ممکنه . ولی سخت افزاری خیلی بعیده .
                    من خودم اولین بار خیلی اذیتم کرد که تا uart راه افتاد .
                    کریستال توی uart خیلی مهمه . واس در آوردن باودریت دقیق
                    از هدربرد استفاده می کنین ؟
                    چه زشت است کوچکي به هنگام نياز و سرکشي به هنگام بي نيازي ...

                    دیدگاه


                      #11
                      پاسخ : مشکل عجیب uart در lpc1768

                      والا این بورد طراحی و پیاده سازیش ازطراحی pcb و لحیم کاری کار خودم بوده ینی پروژه پایانیم بوداون موقع یادمه همه چیش جواب میداد الان بعد از 1.5 سال که دارم دوباره ازش استفاده میکنم این uartش بازی درآورده حتی تا چند هفته پیش هم درست بود و کار میکرد از لحاظ کهنه قلع شدن قطعات و... هم بررسی کردم و بعضی قسمتها رو دوباره قلع کاری کردم که مشکل پیش نیاد ولی اینجوری شده کلی هم بررسی کردم بخش سخت افزاریه uart رو هیچ مشکلی نداره و حتی برنامه lcd و ... رو ریختم روی چیپ و امتحانش کردم خلاصه ازش کار زیاد کشیدم ولی فقط این قسمت کار مورد داره دیگه متاسفانه :cry2:

                      دیدگاه


                        #12
                        پاسخ : مشکل عجیب uart در lpc1768

                        مشکل عجیب حل شد با راه حل عجیب من موندم فقط این چجوری پروگرام میشد :biggrin: والا مشکل از پایه های سوکت com بود ینی برام خیلی عجیبه بر اثر چی یه همچین اتفاقی افتاد پایه هایی که از سوکت میان بیرون در نقطه اتصال از روی بورد دچار کهنگی قلع شده بودن ینی اینجوری که من فکر میکنم پایه ها dip هستن و از لایه زیرین (پشت بورد) لحیم شدن و از لایه رویی دسترستی ندارن فقط پایه های 1 تا 5 رو میشه دید از پشت سوکت مادگیه com حالا اتفاقی که افتاده این بوده که چون بورد دولایه و دورو هست از این طرف ینی روی بورد در تماس گرد و غبار و... قرار گرفته البته این هنوز حدس منه چون دلیله دیگه ای به ذهنم نمیرسه چون دوتا از پایه ها که دسترسی داریم و به سختی میشه دید از رو سوکت رو کمی قلع لحیم کردم به سختی در اون قسمت و کاملا درست شد ولی هنوز برام علامت سواله باز اگه کسی دلیل محکم تری به ذهنش میرسه ممنون میشم بگم

                        دیدگاه

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