اطلاعیه

Collapse
No announcement yet.

شروع کار با uart

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

    #16
    پاسخ : شروع کار با uart

    ممنون مشکل حل شد.
    ولی بازم برای من جایه تعجب داره چون این فایل رو من قبلا Add کرده بودم ولی با این فایلی که شما دادید جایگزین کردم مشکل حل شد.
    توی این هدری که شما دادید به من تعییری ایجاد کرده بودید؟

    دیدگاه


      #17
      پاسخ : شروع کار با uart

      مشکل رو کشف کردم. ورژن هدری که شما به من دادید 1.13 بود ولی اونی که من استفاده کرده بودم 1.1 بود :wow: :wow: :wow: :wow:

      دیدگاه


        #18
        پاسخ : شروع کار با uart

        با سلام
        uart 2,3 چه تفاوتی از نظر نرم افزاری با uart0,1 دارند من برای 0و1 هیچ مشکلی ندارم و کار می کند ولی برای 2 و3 اصلا به محض اینکه برنامه به مقدار دهی رجیسترها می رسد هنگ می کند و می ماند .

        دیدگاه


          #19
          پاسخ : شروع کار با uart

          UART2,3 بعد از ریست شدن میکرو کلاک و پاور اون ها خیر فعاله و باید فعال کنید تا کار کنه
          من یک برنامه برای راه اندازی UART3 با CMSIS نوشتم ولی کار نمیکنه ولی UART0,1 کار می کنن.
          اگر تونستید یک نگاه بندازید ببینبد مشکل کار من کجاست

          http://uplod.ir/qwf868bjhw8g/RS485_[1].rar.htm

          کد:
          #include <lpc17xx.h>
          #include <string.h>
          #include <ctype.h>
          #include "LPC17xx_pinsel.h"
          #include "LPC17xx_uart.h"
          #include "debug_frmwrk.h"
          
          char Buffer0[500];
          char Buffer1[500];
          char Buffer3[500];
          char lcd[20];
          uint8_t input0;
          uint8_t input1;
          uint8_t input3;
          
          void upper(char Buf[],int LeN){							// tabe tabdel horofef kochaak be bozorg
          	for(LeN=0;LeN<501;LeN++){
          		Buf[LeN]=toupper(Buf[LeN]);
          	}	
          }
          
          void C_buf(char Buf[]){											// Empty Buffer	
          	int LeN;
          	LeN=strlen(Buf);
          	for(LeN=0;LeN<501;LeN++){
          		Buf[LeN]=0;
          	}
          }
          //************************************************************************
          void UART0_IRQHandler(void)
          {	
          int A;	
          	input0 = UART_ReceiveByte(LPC_UART0);
          	if(input0>0x20 & input0<0x7f){
          			A=strlen(Buffer0);
          		 Buffer0[A]=input0;	
          			upper(Buffer0,500);
           		UARTPuts_(LPC_UART0,Buffer0);
          			//UARTPuts_(LPC_UART0,"HOMAYON");
          	}
          }
          //************************************************************************
          void UART1_IRQHandler(void)
          {	
          int A;	
          	input1 = UART_ReceiveByte((LPC_UART_TypeDef*)LPC_UART1);
          	if(input1>0x20 & input1<0x7f){
          			A=strlen(Buffer1);
          		 Buffer1[A]=input1;	
          			upper(Buffer1,500);
          		
           		UARTPuts_(LPC_UART0,Buffer1);
          			//UARTPuts_((LPC_UART_TypeDef *)LPC_UART1, Buffer1);
          	}
          }
          //************************************************************************
          void UART3_IRQHandler(void)
          {	
          int A;	
          	input3 = UART_ReceiveByte(LPC_UART3);
          	if(input3>0x20 & input3<0x7f){
          			A=strlen(Buffer3);
          		 Buffer3[A]=input3;	
          			upper(Buffer3,500);
          		
           		UARTPuts_(LPC_UART3,Buffer3);
          			//UARTPuts_((LPC_UART_TypeDef *)LPC_UART1, Buffer1);
          	}
          }
          
          int main(void){
          	int len;
          	UART_CFG_Type UART_InitStruct;
          	UART_FIFO_CFG_Type UARTFIFOConfigStruct;
          	PINSEL_CFG_Type PinCfg;
          	uint32_t CLKPWR_PCONP_PCUART3;
          	debug_frmwrk_init();
          //-------------------------  UART0  -----------------------------------------------------------	
          	
          	UARTFIFOConfigStruct.FIFO_DMAMode = DISABLE;
          	UARTFIFOConfigStruct.FIFO_Level = UART_FIFO_TRGLEV0;
          	UARTFIFOConfigStruct.FIFO_ResetRxBuf = ENABLE;	
          	UARTFIFOConfigStruct.FIFO_ResetTxBuf = ENABLE;
          	
          	UART_FIFOConfig(LPC_UART0, &UARTFIFOConfigStruct);
          	UART_IntConfig(LPC_UART0, UART_INTCFG_RBR, ENABLE);
          
          	NVIC_EnableIRQ(UART0_IRQn);
          	UART_TxCmd(LPC_UART0,ENABLE);	
          
          //-------------------------  UART1  -----------------------------------------------------------	
          	
          	PinCfg.Portnum=2;
          	PinCfg.Pinnum=0;
          	PinCfg.Funcnum=2;
          	PinCfg.OpenDrain=0;
          	PinCfg.Pinmode=0;
          	PINSEL_ConfigPin(&PinCfg);		//TXD1
          	PinCfg.Pinnum=1;
          	PINSEL_ConfigPin(&PinCfg);		//RXD1
          
          
          	UART_InitStruct.Baud_rate=9600;
          	UART_InitStruct.Databits = UART_DATABIT_8;
          	UART_InitStruct.Parity = UART_PARITY_NONE;
          	UART_InitStruct.Stopbits = UART_STOPBIT_1;
          	
          	
          	UART_Init((LPC_UART_TypeDef *)LPC_UART1, &UART_InitStruct);
          	UART_FIFOConfig((LPC_UART_TypeDef *)LPC_UART1, &UARTFIFOConfigStruct);
          	UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RBR, ENABLE);
          	
          	NVIC_EnableIRQ(UART1_IRQn);
          	UART_TxCmd((LPC_UART_TypeDef *)LPC_UART1, ENABLE);
          	
          //-------------------------  UART3  -----------------------------------------------------------	
          	
          	CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCUART3,ENABLE);
          	PinCfg.Portnum=4;
          	PinCfg.Pinnum=28;
          	PinCfg.Funcnum=3;
          	PinCfg.OpenDrain=0;
          	PinCfg.Pinmode=0;
          	PINSEL_ConfigPin(&PinCfg);		//TXD3
          	PinCfg.Pinnum=29;
          	PINSEL_ConfigPin(&PinCfg);		//RXD3
          	
          	UART_InitStruct.Baud_rate=115200;
          	UART_InitStruct.Databits = UART_DATABIT_8;
          	UART_InitStruct.Parity = UART_PARITY_NONE;
          	UART_InitStruct.Stopbits = UART_STOPBIT_1;
          	
          	
          	UART_Init(LPC_UART3, &UART_InitStruct);
          	UART_FIFOConfig(LPC_UART3, &UARTFIFOConfigStruct);
          	UART_IntConfig(LPC_UART3, UART_INTCFG_RBR, ENABLE);
          	
          	
          	NVIC_EnableIRQ(UART3_IRQn);
          	UART_TxCmd(LPC_UART3, ENABLE);
          		
          //---------------------------------------------------------------------------------------------	
          
          	
          	while(1){
          		UARTPuts_(LPC_UART3,"HOMAYON");
          		UART_Send(LPC_UART3,"HOMAYON",7,BLOCKING);
          		len=strlen(Buffer0);
          		if(len>200){
          			C_buf(Buffer0);
          		}
          		
          	}
          }

          دیدگاه


            #20
            پاسخ : شروع کار با uart

            بصورت نرم افزاری چطور میشه پاور کلاک مربوط به uart2,3 رو فعال کرد ؟

            دیدگاه


              #21
              پاسخ : شروع کار با uart

              با این دستور در CMSIS
              کد:
              CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCUART3,ENABLE);
              یا با این رجیستر

              کد:
              LPC_SC->PCONP

              دیدگاه


                #22
                پاسخ : شروع کار با uart

                دست شما درد نکنه راه افتاد

                دیدگاه


                  #23
                  پاسخ : شروع کار با uart

                  نوشته اصلی توسط arvin2009
                  اینم یک برنامه کاملی که باوقفه دریافت نوشتم.دوستان اگه فکر میکنند این پست خوب و مفید هست بگن هرقسمت رو به همین صورت بزارم
                  کد:
                  #include <LPC17xx.h>
                  #include <string.h>
                  
                  #define BUFSIZE 100
                  int j,i;
                  uint8_t rx_buffer[100];               // Reception buffer
                  uint32_t rev_cnt = 0;                 // Reception counter
                  void UARTInit( uint32_t SystemFrequency, uint32_t baudrate );
                  int UART0_SendByte (int ucData);
                  int UART0_GetChar (void); 
                  void UART0_SendString (unsigned char *s); 
                  /******************************************************************************
                           UART0 Interrupt service function
                  ******************************************************************************/
                  void UART0_IRQHandler(void)
                  {
                  	 uint8_t Dummy = Dummy;
                    
                  			LPC_GPIO2->FIOSET = 3<<4 ;
                  			for(j=0;j<4000;j++);
                  			LPC_GPIO2->FIOCLR = 3<<4 ;
                  		 for(j=0;j<4000;j++);
                     // if (LSRValue & LSR_RDR)	/* Receive Data Ready */			
                    
                     /* If no error on RLS, normal ready, save into the data buffer. */
                     /* Note: read RBR will clear the interrupt */
                     rx_buffer[rev_cnt++] = LPC_UART0->RBR;
                     if (rev_cnt == BUFSIZE)
                     {
                      rev_cnt = 0;		/* buffer overflow */
                     }
                  }
                  /*******************************************************************************/
                  
                  int main(void){
                  	void SystemInit ();
                   LPC_GPIO2->FIODIR1 = 0x00 ;
                  	LPC_GPIO2->FIODIR0 = 0xFF ;
                  	LPC_GPIO2->FIOCLR0 = 0xFF ;  
                   UARTInit(100e6,9600);  
                   while(1){
                  	
                  	     
                  	    	UART0_SendString("http://www.DIDBANSANAT.COM\r\n");
                  		    for(j=0;j<40000;j++);
                  	    UART0_SendString((unsigned char *)rx_buffer);
                  	    for(j=0;j<40000;j++);
                       }
                    
                   
                   
                    
                  }
                  
                  /***********************************************************************************/
                  void UARTInit( uint32_t SystemFrequency, uint32_t baudrate )
                  {
                   uint32_t Fdiv;
                   uint32_t pclkdiv, pclk;
                   
                    LPC_SC->PCONP |= (0x1<<3);
                    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|(0x2<<6);        /* Enable and reset TX and RX FIFO. */
                    NVIC_SetPriority(UART0_IRQn,0);     /* Default priority group 0, can be 0(highest) - 31(lowest) */
                    NVIC_EnableIRQ(UART0_IRQn);
                  
                  
                    LPC_UART0->IER = 0x01;    /* Enable UART0 interrupt */
                   
                  }
                  
                  /********************************************************************************************************/
                  int UART0_SendByte (int ucData)
                  {
                  	while (!(LPC_UART0->LSR & 0x20));
                    return (LPC_UART0->THR = ucData);
                  }
                  /*----------------------------------------------------------------------------
                   Read character from Serial Port  (blocking read)
                   *----------------------------------------------------------------------------*/
                  int UART0_GetChar (void) 
                  {
                   	while (!(LPC_UART0->LSR & 0x01));
                   	return (LPC_UART0->RBR);
                  }
                  
                  /*********************************************************************************************************/
                  void UART0_SendString (unsigned char *s) 
                  {
                   	while (*s != 0) 
                  	{
                    		UART0_SendByte(*s++);
                  	}
                  }
                  /***********************/


                  ضمن تشکر از توضیحات شما

                  وقتی که برنامه ی شما را کامپایل می کنم این ارور را به من میده:

                  UART.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
                  UART.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.

                  مشکل از کجاست؟
                  Reveng will surely come... Your hard time are ahead
                  // - - - - - - - - - -
                  برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                  // - - - - - - - - - -
                  اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                  // - - - - - - - - - -

                  دیدگاه

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