اطلاعیه

Collapse
No announcement yet.

STM32F103RET6 USART2

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

    STM32F103RET6 USART2

    با سلام

    در خصوص راه اندازی USART2 در میکروکنترلر STM32F103 راهنمایی میخواستم . هدر برد سایت رو خریداری کردم و نمونه برنامه USART رو در کیل دیدم ولی اولین باره با این میکروکنترلر و محیط برنامه نویسی کیل کار میکنم راهنمایی بفرمایید ممنون میشم .

    Header Board : STM32F103RET6


    کد:
    void USART1_Init (void) {
     int i;
    
     RCC->APB2ENR |= (  1UL << 0);    /* enable clock Alternate Function */
     AFIO->MAPR  &= ~(  1UL << 2);    /* clear USART1 remap        */
    
     RCC->APB2ENR |= (  1UL << 2);    /* enable GPIOA clock        */
     GPIOA->CRH  &= ~(0xFFUL << 4);    /* clear PA9, PA10         */
     GPIOA->CRH  |= (0x0BUL << 4);    /* USART1 Tx (PA9) output push-pull */
     GPIOA->CRH  |= (0x04UL << 8);    /* USART1 Rx (PA10) input floating */
    
     RCC->APB2ENR |= (  1UL << 14);    /* enable USART#1 clock       */
    
     USART1->BRR  = 0x0271;         /* 115200 baud @ PCLK2 72MHz    */
     USART1->CR1  = ((  1UL << 2) |    /* enable RX            */
              (  1UL << 3) |    /* enable TX            */
              (  1UL << 5) |    /* enable RXNE Interrupt      */
              (  1UL << 7) |    /* enable TXE Interrupt       */
              (  0UL << 12) );   /* 1 start bit, 8 data bits     */
     USART1->CR2  = 0x0000;         /* 1 stop bit            */
     USART1->CR3  = 0x0000;         /* no flow control         */
     for (i = 0; i < 0x1000; i++) __NOP();  /* avoid unwanted output      */
    
     NVIC_EnableIRQ(USART1_IRQn);
     USART1->CR1 |= ((  1UL << 13) );   /* enable USART           */
    }
    
    void USART1_IRQHandler (void) {
     volatile unsigned int IIR;
     struct buf_st *p;
    
      IIR = USART1->SR;
      if (IIR & USART_SR_RXNE) {      /* read interrupt          */
       USART1->SR &= ~USART_SR_RXNE;	   /* clear interrupt         */
    
       p = &rbuf;
    
       if (((p->in - p->out) & ~(RBUF_SIZE-1)) == 0) {
        p->buf [p->in & (RBUF_SIZE-1)] = (USART1->DR & 0x1FF);
        p->in++;
       }
      }
    
      if (IIR & USART_SR_TXE) {
       USART1->SR &= ~USART_SR_TXE;	   /* clear interrupt          */
    
       p = &tbuf;
    
       if (p->in != p->out) {
        USART1->DR = (p->buf [p->out & (TBUF_SIZE-1)] & 0x1FF);
        p->out++;
        tx_restart = 0;
       }
       else {
        tx_restart = 1;
        USART1->CR1 &= ~USART_SR_TXE;   /* disable TX IRQ if nothing to send */
    
       }
      }
    }
    
    /*------------------------------------------------------------------------------
     buffer_Init
     initialize the buffers
     *------------------------------------------------------------------------------*/
    void buffer_Init (void) {
    
     tbuf.in = 0;              /* Clear com buffer indexes      */
     tbuf.out = 0;
     tx_restart = 1;
    
     rbuf.in = 0;
     rbuf.out = 0;
    }
    همین کد رو میخوام برای USART2 بنویسم
    با تشکر

    #2
    پاسخ : STM32F106RET6 USART2

    سلام فروشگاه میکرو F106 نداره احتمالا منظورتون همون STM32F103RET6 هست. اگر همه تعاریف USART1 رو به USART2 تغییر بدی و همچنین پینهای USART2 رو جایگذین کنی این کد جواب میده.
    پیشنهاد میکنم همین ابتدای کار زیاد خودتو درگیر کار کردن مستقیم با رجیسترها بخاطر اینکه سرعت انجام پروژه رو پایین میاره نکنی و از کتابخانه های CMSIS یا HAL استفاده کنی.
    در صورتی که کتابخانه های CMSIS رو روی KEIL نصب کرده باشی میتونی از این نمونه کد استفاده کنی.

    کد:
    ///////////////////////////////USART DECLARION////////////////////////////////
    /*USAGE: 1-AZ MANAGE RUN-TIME ENVIROMENT LIBRARY USART RA EZAFE MI****M
    	 2-IN GHETE COD RA BE EBTEDA FILE MAIN EZAFE KON
    	 3- MATN TAVABE RA BE ENTEHA EZAFE KON. */
    				 
    #define USART_PORT		GPIOA
    #define USART_TX_PIN	GPIO_Pin_9
    #define USART_RX_PIN	GPIO_Pin_10
    #define USARTx  		USART1
    void USART_Configuration(void);
    void USART1_Send_Byte(u16 Data);
    void USART_Send_Str(const char* data);
    void USART_Send_Enter(void);
    void USART_Put_Num(u32 dat);
    void USART_Put_Inf(char *inf,u32 dat);
    void u32tostr(u32 dat,char *str) ;
    ////////////////////////////////////////////////////////////////////
    
    
    
    
    int main(void)
    {
    	USART_Configuration();
    
    	USART1_Send_Byte('a');	
    	USART1_Send_Byte('=');
    	USART_Put_Num(sss);	
    	USART1_Send_Byte('\t');
    	USART_Send_Str("SALAM");
    	USART1_Send_Byte('\t');
    	USART_Put_Inf("data=",123456789);
    }
    
    
    
    
    
    //////////////////////////////////////////USART FUNCTION///////////////////////////////////////
    void USART_Configuration(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	USART_InitTypeDef USART_InitStructure;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
    
      /*-----------------PA9 TX ?????? PA10 RX ????---------------------------*/
    	GPIO_InitStructure.GPIO_Pin  = USART_TX_PIN ;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(USART_PORT, &GPIO_InitStructure); 
    
    	GPIO_InitStructure.GPIO_Pin  = USART_RX_PIN ;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    	GPIO_Init(USART_PORT, &GPIO_InitStructure);
       	
    
    	/* USARTx configured as follow:
    		- BaudRate = 115200 baud 
    	- Word Length = 8 Bits
    	- One Stop Bit
    	- No parity
    	- Hardware flow control disabled (RTS and CTS signals)
    	- Receive and transmit enabled
    	*/
    	USART_InitStructure.USART_BaudRate = 115200;
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
    	USART_InitStructure.USART_Parity = USART_Parity_No;
    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    	USART_Init(USARTx, &USART_InitStructure);
    	USART_Cmd(USARTx, ENABLE);	
    }
    
    void USART1_Send_Byte(u16 Data)
    { 
      	while (!(USART1->SR & USART_FLAG_TXE));
      	USART1->DR = (Data & (uint16_t)0x01FF);	  
    }
    
    void USART_Send_Str(const char* data)
    {
    	u16 i;
    	u16 len = strlen(data)-1;
    	for (i=0; i<len; i++)
    	{
    		USART1_Send_Byte(data[i]);
    	}
    	if(data[i]=='\n') 
    	{
    		USART_Send_Enter();
    	}
    	else
    	{
    		USART1_Send_Byte(data[i]);
    	}		
    }
    
    void USART_Send_Enter(void)
    {
    	USART1_Send_Byte(0x0d);
    	USART1_Send_Byte(0x0a);
    }
    
    void USART_Put_Num(u32 dat)
    {
     	char temp[20];
     	u32tostr(dat,temp);
     	USART_Send_Str(temp);
    }
    
    void USART_Put_Inf(char *inf,u32 dat)
    {
     	USART_Send_Str(inf);
     	USART_Put_Num(dat);
     	USART_Send_Str("\n"); 
    }
    
    void u32tostr(u32 dat,char *str) 
    {
     	char temp[20];
     	u8 i=0,j=0;
     	i=0;
     	while(dat)
     	{
     		temp[i]=dat%10+0x30;
     		i++;
     		dat/=10;
     	}
     	j=i;
     	for(i=0;i<j;i++)
     	{
     		str[i]=temp[j-i-1];
     	}
     	if(!i) {str[i++]='0';}
     	str[i]=0;
    }
    //////////////////////////////////////////USART FUNCTION END///////////////////////////////////////

    دیدگاه


      #3
      پاسخ : STM32F106RET6 USART2

      با سلام و تشکر بابت پاسختون

      از کجا میتونم این کتابخونه رو دانلود کنم ؟

      دیدگاه


        #4
        پاسخ : STM32F106RET6 USART2

        وقت بخیر

        http://www.st.com/web/catalog/tools/...S1743/PF257890

        توی سایت stm پیدا میشه !!!

        دیدگاه


          #5
          پاسخ : STM32F106RET6 USART2

          ارسال سریال به سادترین صورت این دنگو فنگ ها را نداره. نیازی به USART1_IRQHandler و ... نیست.
          حتی از cmsis هم ساده تر است.
          یک اینیشیالیز و ارسال یک کاراکتر و سپس ارسال یک رشته. همین
          فيلم آموزشي ميکروکنترلر LPC1768
          فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
          فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
          فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

          دیدگاه


            #6
            پاسخ : STM32F103RET6 USART2

            با سلام

            برای ایجاد یک پروژه جدید در CMSIS راهنمایی لازم دارم .

            در پنجره Select Device For Target برای انتخاب پردازنده مورد نظرم که STM32F103RET6 هستش کدام گزینه رو انتخاب کنم ؟ چطوری باید مطمئن بشم پردازنده درست رو انتخاب کردم ؟

            با تشکر

            دیدگاه


              #7
              پاسخ : STM32F103RET6 USART2

              با سلام

              بالاخره CMSIS راه اندازی شد و خطایی هم نداره ، فقط توی نمونه برنامه ای که جناب mohammad poorkhalili لطف کردند ، از GPIO_InitTypeDef ایراد میگیره ، لطفا راهنمایی بفرمایید .

              سپاسگزارم .

              دیدگاه


                #8
                پاسخ : STM32F103RET6 USART2

                تعریف ساختار GPIO و USART باید در ابتدای برنامه و قبل از کدهای اجرایی صورت بگیره، اگه تعریف این دو ساختار پشت سر همه اما فقط به GPIO گیر میده به این معنیه که هدر فایل مربوط به GPIO رو داخل برنامه اینکلود نکردی یا اینکه تیکشو در قسمت مدیریت کتابخانه های پروژه نزدی.

                دیدگاه


                  #9
                  پاسخ : STM32F103RET6 USART2

                  با سلام و تشکر از پاسختون

                  اون مشکل هم حل شد ، ممنون از راهنمایی شما .

                  الان 79 خطا میگیره همه با موضوع تکراری بودن تعریف بعضی چیزها .

                  مثلا :
                  کد:
                   .\Objects\Test4_USART.axf: Error: L6200E: Symbol GPIO_Init multiply defined (by stm32f10x_gpio_1.o and stm32f10x_gpio.o).
                  ممنون میشم راهنمایی کنید .

                  دیدگاه


                    #10
                    پاسخ : STM32F103RET6 USART2

                    با سلام

                    مشکل حل شد ولی خروجی ندارم روی یوزارت 1 ، لطف میکنید راهنمایی کنید .

                    متشکرم

                    دیدگاه


                      #11
                      پاسخ : STM32F103RET6 USART2

                      سلام پوشه پروژه رو زیپ کن بفرست تا ببینم چ کردی.

                      دیدگاه


                        #12
                        پاسخ : STM32F103RET6 USART2

                        http://s000.tinyupload.com/index.php...40953549478887

                        با سلام

                        توی این سایت نتونستم فایل اتچ کنم . لطفا از آدرس بالا دانلود بفرمایید .

                        سپاسگزارم

                        دیدگاه


                          #13
                          پاسخ : STM32F103RET6 USART2

                          سلام برنامه رو تست کردم بدون مشکل جواب داد و عبارت test رو پشت سر هم ارسال میکنه، برای تغییر به usart2 هم فقط کافیه اون 4 تا define اول برنامه رو تغییر بدی.

                          دیدگاه


                            #14
                            پاسخ : STM32F103RET6 USART2

                            سلام

                            ممنون از زحمتتون ، ولی متاسفانه برای من جواب نمیده ، آیا تنظیماتی لازمه که توی کیل انجام بدم ؟ مطمئن نیستم تنظیمات رو درست انجام داده باشم . میشه مرحله به مرحله ایجاد یک پروژه با استفاده از CMSIS رو توی کیل برای پردازنده STM32F103RET6 توضیح بدید . راه اندازی این دیوانه کرده منو ، میدونم سادست ولی کار نمیکنه !

                            ممنونم از راهنماییتون .

                            دیدگاه


                              #15
                              پاسخ : STM32F103RET6 USART2

                              اگر بدون خطا کامپایل میشه پس مشکل از کیل نیست، سیمهای مبدل رو تست کن ببین RX مبدل به TX میکرو که پایه A9 هست به درستی متصل شده.

                              دیدگاه

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