NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3524 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 15 از 15

موضوع: آموزش راه اندازی spi در stm32f103

  1. #1
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض سوالاتی چند من باب stm32f103

    سلام
    پیرو زحمتام به بچه های انجمن ، برای پیدا کردن یک برنامه نمونه ساده از راه اندازی spi در stm32f103 و آموزش کاربردی توابع اون در cmsis در کیل 5 بسیار نیازمند یاری سبزتان هستیم
    از آموزش های کیل و اس تی پیز خاصی حالیم نشد . یک سمپل راه اندازی ساده و راه اندازی توابع اصلی خواندن و نوشتن بیشتر میتونه کمکم کنه
    و اینکه چرا برای استفاده از spi حتما باید سیستم عامل rtx رو اضافه کنیم ؟
    نمیشه بدون سیستم عامل ازش استفاده کرد ؟
    بی نهایت ممنون
    ویرایش توسط dizgah : 11-09-2014 در ساعت 19:58

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    اینم یه مثال برای راه اندازی spi
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar SPI.rar (1.35 مگابایت, 903 نمايش)
    _____________________________________
    _____________________________________

  5. کاربران : 2 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  6. #3
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    بسیار ممنون
    در مورد دو دستور زیر سوال داشتم
    xxx->yy
    این دستور کاربردش چیه ؟ کپی محتوی ؟
    -------
    #define CR_PLLON_Set ((u32)0x01000000)
    با دستورات پیش پردازنده آشنام،تو قسمت دوم چرا کد به اون صورت (دو پرانتزی) وارد شده ؟ آیا منظورش اینه که عبارت مورد نظر رو معادل فلان مقدار هگز که 32 بیتیه تعریف کن ؟ اگه نه u32 چی میگه ؟
    ----------------
    هنگام تعریف پروژه و انتخاب قابلیتهاش در ورژن 5 کیل مگه خود کیل کتابخونه های مورد نیاز رو ضمیمه پروژه نمیکنه ؟آیا بازم لازمه ازstm32 standard peripheral library قایلهای مورد نظرو کپی کنیم و قسمتهای مورد استفاده رو تو متن فعال کنیم ؟(با حذف // و خارج کردن از حالت توضیح ؟)
    ممنون
    ویرایش توسط dizgah : 04-09-2014 در ساعت 12:36

  7. تشکرها از این نوشته :


  8. #4
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام
    در مورد دستور SPI1->DR که منظورم رجیستر دیتای SPI1 هست. از دستورات CMSIS استفاده نکردم
    البته میتونستم از تابع SPI_I2S_ReceiveData که جزو دستورات CMSIS هست استفاده کنم.
    ---
    #define CR_PLLON_Set ((u32)0x01000000) کجا پیدا کردین؟
    _____________________________________
    _____________________________________

  9. کاربران : 2 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  10. #5
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    دستور اول همون کار کپی رو انجام میده ؟
    دستور دوم :

    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 10629652_1457044961247278_4682245524505131685_n.jpg
مشاهده: 24
حجم: 9.2 کیلو بایت

    در مورد بقیه سوالات هم ممنون میشم پاسخ بدین
    هم چنین تو کیل تو تب c++ تو قسما دستورات پیش پردازنده متنهایی که اضاقه میکنیم چی کار میکنن؟
    مثل :
    STM32F429_439xx,USE_STDPERIPH_DRIVER,STM32F4XX,__A SSEMBLY__,KEIL_IDE

  11. تشکرها از این نوشته :


  12. #6
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2011
    نوشته ها
    72
    تشکر
    80
    تشکر شده 34 بار در 26 پست

    پیش فرض

    اینم یه مثال دیگه از spi2.
    فايل هاي پيوست شده فايل هاي پيوست شده

  13. کاربران : 2 تشکر کرده اند از شما avr_1360 برای ارسال این پست سودمند:


  14. #7
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط avr_1360 نمایش پست ها
    اینم یه مثال دیگه از spi2.
    سلام
    ممنون مهندس ، اما فایلی که گذاشتی مشکل داره لطفا" دوباره قرار بده.
    _____________________________________
    _____________________________________

  15. کاربران : 2 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  16. #8
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2011
    نوشته ها
    72
    تشکر
    80
    تشکر شده 34 بار در 26 پست

    پیش فرض

    دوباره اپلود کردم.
    لطفا ببینین مشکلی نداره.
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar spi2.rar (231.7 کیلو بایت, 263 نمايش)

  17. تشکرها از این نوشته :


  18. #9
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    سلام بسیار ممنون
    در مورد دستورات زیر میشه راهنماییم کنید ؟
    RCC->APB1ENR=RCC_APB1ENR_SPI2EN;
    همونطور که قبلن هم پرسیدم کار عملگر
    ->
    چیه ؟
    و این دستور چی کار میکنه ؟
    #define CR_PLLON_Set
    ((u32)0x01000000)
    موقع ایجاد پروژه تو کیل دو تا هدر برای GPIO قابل انتخاب هستش یکیش فک کنم مال خود cmsis و اون یکی از کتابخونه های std-peripheral lib هستش درسته ؟ این دو تا هر دو مشابهن ؟
    آموزشهای بسیاری برای میکروهای nxp هستش ولی متاسفانه برای st آموزشها زیاد نیستش ،اکثرا هم از کتابخونه های شخصی خودشون استفاده میکنن
    دوستان آموزشی رو با استفاده از cmsis یا std_peripheral lib دارن که تک تک و بصورت ساده قسمتهای مختلف رو راه اندازی کرده باشه یا آموزشی بصورت ساده یاد بده ؟(فارسی یا انگلیسیش مهم نیس )
    خیلی ممنون از بپه های با معرفت

  19. تشکرها از این نوشته :


  20. #10
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2011
    نوشته ها
    72
    تشکر
    80
    تشکر شده 34 بار در 26 پست

    پیش فرض

    برای فعال کردن هر پریفرال میکرو اول باید کلاک اون فعال شه.
    این دستور RCC->APB1ENR=RCC_APB1ENR_SPI2EN برای فعال کردن کلاک spi2 هست.
    و اگر بخواهید کلاک پورت b رو فعال کنید از دستور RCC->APB2ENR=RCC_APB2ENR_IOPBEN استفاده میشه.
    این روش روش پایه ایه و از هدر خود کیل(stm32f10x.h) استفاده شده و از کتابخونه شخصی استفاده نشده.
    اگه این فایلو نگاه کنی این ریجیسترها رو توش میشه دید.

  21. تشکرها از این نوشته :


  22. #11
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    با تشکر از همه جواب یکی از سوالامو اینجا پیدا کردم توضیح کامل مولفشو میذارم تا شاید برای یکی دیگه هم سوال باشه :
    نقل قول نوشته اصلی توسط sigma-mx نمایش پست ها
    در مورد آخری هم بگم که همه این رجیستر ها اگر نوشتنی باشن به صورت GPIOB->ODR=0x0001 و اگه خوندنی باشن بصورت i = GPIOB->ODR نوشته میشند. این ظور نیست که هر کدام به یک صورت خاص باشه !
    این علامت <- هم که می بینید از علایم استاندارد زبان C هست . چون این رجیستر ها بصورت Structure نوشته شدن . برای دسترسی به Structure هم از این علامت استفاده میکنند . نظیر این علامت <- یا :: رو می تونید تو هر جا مثل برنامه های ویژوال C کامپیوتر ببینید . در مورد مقداردهی به رجیستر هم که بستگی به این که چند بیتی هست 16 یا 32 ... متفاوته . مثلا 0x0283 برای یک رجیستر 16 بیتی هست و 0x1c2304b3 برای یک رجیستر 32 بیتی .
    یا حق

  23. تشکرها از این نوشته :


  24. #12
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    سلام دوباره خدمت دوستان
    بنده با استفاده از کتابخونه ها و مثالهای بچه ها مثال زیر رو برای راه اندازی lcd کاراکتری نوشتم ،این مثال بدون ارور کامپایل میشه ولی متاسفانه بطور عملی کار نمیکنه
    آپلود میکنم لطفا اگه ممکنه بررسی کنید و اشتباهم رو بهم بگین
    راستی عنوان رو هم ویرایش کردم تا نیازی به تاپیک جدید نباشه
    ممنون از همگی
    char lcd.rar
    -----------------
    main.c
    کد:
    #include "stm32f10x.h"
    #include "delay.h"
    #include "lcd4bit.h"
    
    
    int main(void)
    {
            delay_init(72);
            lcd_init();
            lcd_cursor_on();
            lcd_cursor_blink();
            lcd_putsf("MHD");
            set_cursor(1,0);
            delay_ms(1000);
            lcd_putsf("is here");
        while(1)
        {
        }
        
        
    }
    ---------------------
    lcd4bit.h
    کد:
    
    #ifndef __lcd4bit_H
    #define __lcd4bit_H
    
    
     // Define LCD-16x2 PinIO Interface Mask Bit 
      #define  LCD_EN_PIN		           GPIO_Pin_2	
      #define  LCD_EN_PORT		           GPIOB
      #define  RCC_APB2Periph_GPIO_EN      RCC_APB2Periph_GPIOB
    
    
      #define  LCD_RW_PIN		           GPIO_Pin_1		
      #define  LCD_RW_PORT	               GPIOB
      #define  RCC_APB2Periph_GPIO_RW      RCC_APB2Periph_GPIOB
    
    
      #define  LCD_RS_PIN 		       	   GPIO_Pin_0		
      #define  LCD_RS_PORT		           GPIOB
      #define  RCC_APB2Periph_GPIO_RS      RCC_APB2Periph_GPIOB
    
    
      #define  LCD_D4_PIN 		       	   GPIO_Pin_4		
      #define  LCD_D5_PIN 		       	   GPIO_Pin_5		
      #define  LCD_D6_PIN 		       	   GPIO_Pin_6		
      #define  LCD_D7_PIN 		       	   GPIO_Pin_7		
      #define  LCD_DATA_PORT	           GPIOB
      #define  RCC_APB2Periph_GPIO_DATA    RCC_APB2Periph_GPIOB
    
    
      #define  LCD_EN_HI()    	           GPIO_WriteBit(LCD_EN_PORT,LCD_EN_PIN,Bit_SET)
      #define  LCD_EN_LO()		           GPIO_WriteBit(LCD_EN_PORT,LCD_EN_PIN,Bit_RESET)
    
    
      #define  LCD_RW_HI()    	           GPIO_WriteBit(LCD_RW_PORT,LCD_RW_PIN,Bit_SET)  
      #define  LCD_RW_LO() 		           GPIO_WriteBit(LCD_RW_PORT,LCD_RW_PIN,Bit_RESET)
    
    
      #define  LCD_RS_HI() 	               GPIO_WriteBit(LCD_RS_PORT,LCD_RS_PIN,Bit_SET)
      #define  LCD_RS_LO() 	               GPIO_WriteBit(LCD_RS_PORT,LCD_RS_PIN,Bit_RESET)
    
    
      #define  LCD_D4_HI() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D4_PIN,Bit_SET)
      #define  LCD_D4_LO() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D4_PIN,Bit_RESET)
    
    
      #define  LCD_D5_HI() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D5_PIN,Bit_SET)
      #define  LCD_D5_LO() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D5_PIN,Bit_RESET)
    
    
      #define  LCD_D6_HI() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D6_PIN,Bit_SET)
      #define  LCD_D6_LO() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D6_PIN,Bit_RESET)
    
    
      #define  LCD_D7_HI() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D7_PIN,Bit_SET)
      #define  LCD_D7_LO() 	               GPIO_WriteBit(LCD_DATA_PORT,LCD_D7_PIN,Bit_RESET)
    
    
      #define  lcd_clear()                 lcd_write_cmd(0x01)	// Clear Display
      #define  lcd_cursor_home()           lcd_write_cmd(0x02)	// Set Cursor = 0
      #define  lcd_display_on()            lcd_write_cmd(0x0E)	// LCD Display Enable
      #define  lcd_display_off()           lcd_write_cmd(0x08)	// LCD Display Disable
      #define  lcd_cursor_blink()          lcd_write_cmd(0x0F)	// Set Cursor = Blink
      #define  lcd_cursor_on()             lcd_write_cmd(0x0E)	// Enable LCD Cursor
      #define  lcd_cursor_off()            lcd_write_cmd(0x0C)	// Disable LCD Cursor
      #define  lcd_cursor_left()           lcd_write_cmd(0x10)	// Shift Left Cursor
      #define  lcd_cursor_right()          lcd_write_cmd(0x14)	// Shift Right Cursor
      #define  lcd_display_sleft()         lcd_write_cmd(0x18)	// Shift Left Display
      #define  lcd_display_sright()        lcd_write_cmd(0x1C)	// Shift Right Display
      
    /* Exported macro ------------------------------------------------------------*/
    /* Exported functions ------------------------------------------------------- */
    void lcd_out_data4(unsigned char val);
    void lcd_write_byte(unsigned char val);
    void lcd_write_cmd(unsigned char val);
    void lcd_putchar(unsigned char c);
    void lcd_init(void);
    void set_cursor(unsigned char column, unsigned char line);
    void lcd_putsf(char* str);
    void lcd_puts(int num);
    char busy_lcd(void);
    void enable_lcd(void);
    void lcd_bargraph (int value, int size);
    void lcd_bargraphXY (int pos_x, int pos_y, int value);
    
    
    #endif /* __lcd4bit_H */
    --------------------
    lcd4bit.c
    کد:
    #include "lcd4bit.h"
    #include "stm32f10x.h"
    #include "delay.h"
    
    
    #define DELAY_2N  0
    GPIO_InitTypeDef GPIO_InitStructure;
    void inita (void)
    {
        delay_init(72);
    }
    /* 8 user defined characters to be loaded into CGRAM (used for bargraph)      */
    const char UserFont[8][8] = 
    {
      { 0x11,0x0A,0x04,0x1B,0x11,0x11,0x11,0x0E },
      { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 },
      { 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18 },
      { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C },
      { 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E },
      { 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F },
      { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
      { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
    };
    
    
    /******************************************************************************/
    
    
    /****************************/
    /* Strobe 4-Bit Data to LCD */
    /****************************/
    void lcd_out_data4(unsigned char val)
    {   
      if((val&0x01)==0x01)    // Bit[0] 
      {
        LCD_D4_HI();  
      }  
      else
      {
        LCD_D4_LO();
      }
      
      if((val&0x02)==0x02)  // Bit[1] 
      {
        LCD_D5_HI();  
      }  
      else
      {
        LCD_D5_LO();
      }
      
      if((val&0x04)==0x04)  // Bit[2] 
      {
        LCD_D6_HI();  
      }  
      else
      {
        LCD_D6_LO();
      } 
      
      if((val&0x08)==0x08)  // Bit[3]
      {
        LCD_D7_HI();  
      }  
      else
      {
        LCD_D7_LO();
      } 
    
    
    }
    
    
    /****************************/
    /* Write Data 1 Byte to LCD */
    /****************************/
    void lcd_write_byte(unsigned char val)
    {  
      lcd_out_data4((val>>4)&0x0F);                            // Strobe 4-Bit High-Nibble to LCD
      enable_lcd();                                            // Enable Pulse
      
      lcd_out_data4(val&0x0F);                                  // Strobe 4-Bit Low-Nibble to LCD
      enable_lcd();                                            // Enable Pulse  
    
    
      while(busy_lcd());                                      // Wait LCD Execute Complete  
    }
    
    
    /****************************/
    /* Write Instruction to LCD */
    /****************************/
    void lcd_write_cmd(unsigned char val)
    { 
      LCD_RS_LO();                                            // RS = 0 = Instruction Select
      lcd_write_byte(val);                                    // Strobe Command Byte        
    }
    
    
    /****************************/
    /* Write Data(ASCII) to LCD */
    /****************************/
    void lcd_putchar(unsigned char c)
    {  
      LCD_RS_HI();                                            // RS = 1 = Data Select
      lcd_write_byte(c);                                       // Strobe 1 Byte to LCD    
    }
    
    
    /*******************************/
    /* Initial 4-Bit LCD Interface */
    /*******************************/
    
    
    void lcd_init(void)
    {
        int i;
      char const *p;
      /* Configure IO connected to LCD16X2 */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_EN, ENABLE);
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Pin = LCD_EN_PIN;
      GPIO_Init(LCD_EN_PORT, &GPIO_InitStructure);
    
    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_RW, ENABLE);
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Pin = LCD_RW_PIN;
      GPIO_Init(LCD_RW_PORT, &GPIO_InitStructure);
    
    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_RS, ENABLE);
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Pin = LCD_RS_PIN;
      GPIO_Init(LCD_RS_PORT, &GPIO_InitStructure);
    
    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DATA, ENABLE);
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Pin = LCD_D4_PIN |
                                    LCD_D5_PIN |
                                    LCD_D6_PIN |
                                    LCD_D7_PIN;
      GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);
        
        delay_init(72);
    
    
      LCD_D4_HI();
      LCD_D5_HI();
      LCD_D6_LO();
      LCD_D7_LO();
      delay_ms(15);                    // Power-On Delay (15 mS)
      
      LCD_D4_HI();
      LCD_D5_HI();
      LCD_D6_LO();
      LCD_D7_LO();
      enable_lcd();                    // Enable Pulse
      delay_us(4100);                    // Delay 4.1mS
      
      LCD_D4_HI();
      LCD_D5_HI();
      LCD_D6_LO();
      LCD_D7_LO();
      enable_lcd();                    // Enable Pulse
      delay_us(100);                    // delay 100uS
       
      LCD_D4_HI();
      LCD_D5_HI();
      LCD_D6_LO();
      LCD_D7_LO();
      enable_lcd();                    // Enable Pulse
      while(busy_lcd());              // Wait LCD Execute Complete
       
      LCD_D4_LO();
      LCD_D5_HI();
      LCD_D6_LO();
      LCD_D7_LO();
      enable_lcd();                    // Enable Pulse
      while(busy_lcd());              // Wait LCD Execute Complete
           
      lcd_write_cmd(0x28);                  // Function Set (DL=0 4-Bit,N=1 2 Line,F=0 5X7)
      lcd_write_cmd(0x0C);                  // Display on/off Control (Entry Display,Cursor off,Cursor not Blink)
      lcd_write_cmd(0x06);                  // Entry Mode Set (I/D=1 Increment,S=0 Cursor Shift)
      //lcd_write_control(0x01);                  // Clear Display  (Clear Display,Set DD RAM Address=0) 
      //delay(15000);                              // Wait Command Ready  
    
    
        /* Load user-specific characters into CGRAM                                 */
      lcd_write_cmd(0x40);                  /* Set CGRAM address counter to 0     */
      p = &UserFont[0][0];
      for (i = 0; i < sizeof(UserFont); i++, p++)
        lcd_putchar(*p);
    
    
      lcd_write_cmd(0x80);                  /* Set DDRAM address counter to 0     */
    }
    
    
    /*******************************************************************************
    * Set cursor position on LCD display                                           *
    *   Parameter:    column: column position                                      *
    *                 line:   line position                                        *
    *   Return:                                                                    *
    *******************************************************************************/
    
    
    void set_cursor(unsigned char line, unsigned char column)
    {
      unsigned char address;
      column--;line--;
      address = (line * 40) + column;
      address = 0x80 + (address & 0x7F);
      lcd_write_cmd(address);               /* Set DDRAM address counter to 0     */
    }
    
    
    /************************************/
    /* Print Display Data(ASCII) to LCD */
    /************************************/
    void lcd_putsf(char* str)
    {
      int i;
    
    
      for (i=0;i<16 && str[i]!=0;i++)                          // 16 Character Print
      {
        lcd_putchar(str[i]);                            // Print Byte to LCD
      }
    }
    
    
    ////////////////////////////////////////////////////
    void lcd_puts(int num)
    {
       int i,j;
       int p,f=0;
       char ch[5];
     for(i=0;i<5;i++)
       {
         p=1;
         for(j=4-i;j>0;j--)
           p = p*10;
         ch[i] = (num/p);
        if (num>=p && !f){
         f=1;
        }
         num =num - ch[i] *p ;
        ch[i] = ch[i] +48;
         if(f) lcd_putchar(ch[i]);
       }
    }
    /////////////////////////////////////////////////////
    /******************/
    /* Wait LCD Ready */
    /******************/
    
    
    char busy_lcd(void)
    {  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        // Config D7 = Read
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_InitStructure.GPIO_Pin = LCD_D7_PIN;
      GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);
    
    
      LCD_RS_LO();                                             // Instruction Select
      LCD_RW_HI();                                             // Read Direction
      LCD_EN_HI();                                            // Start Read Busy
    
    
      delay_us(100);                                              // Delay Before Read
      if (GPIO_ReadInputDataBit(LCD_DATA_PORT, LCD_D7_PIN) == Bit_SET)
      {
        LCD_EN_LO();                                          // Disable Read
          LCD_RW_LO();                                        // Default = Write Direction
          
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      // Config D7 = Write
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = LCD_D7_PIN;
        GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);
        return 1;                                            // LCD Busy Status
      }
      else
      {
        LCD_EN_LO();                                          // Disable Read
          LCD_RW_LO();                                        // Default = Write Direction
          
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    // Config D7 = Write
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = LCD_D7_PIN;
        GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);
        return 0;                                            // LCD Ready Status
      }  
    }
    
    
    
    
    /***********************/
    /* Enable Pulse to LCD */
    /***********************/
    void enable_lcd(void)                                     // Enable Pulse
    {  
      delay_init(72);
        LCD_EN_HI();                                          // Enable ON
      delay_us(50);  
      LCD_EN_LO();                                          // Enable OFF 
    }
    
    
    /*******************************************************************************
    * Print a bargraph to LCD display                                              *
    *   Parameter:     val:  value 0..100 %                                        *
    *                  size: size of bargraph 1..16                                *
    *   Return:                                                                    *
    *******************************************************************************/
    void lcd_bargraph (int value, int size) 
    {
       int i;
    
    
       value = value * size / 20;            /* Display matrix 5 x 8 pixels       */
       for (i = 0; i < size; i++) 
       {
          if (value > 5) {
             lcd_putchar (0x05);
             value -= 5;
          }
          else {
             lcd_putchar (value);
             break;
          }
       }
    }
    
    
    
    
    /*******************************************************************************
    * Display bargraph on LCD display                                              *
    *   Parameter:     pos_x: horizontal position of bargraph start                *
    *                  pos_y: vertical position of bargraph                        *
    *                  value: size of bargraph active field (in pixels)            *
    *   Return:                                                                    *
    *******************************************************************************/
    
    
    void lcd_bargraphXY (int pos_x, int pos_y, int value) 
    {
      int i;
    
    
      set_cursor(pos_x, pos_y);
      for (i = 0; i < 16; i++)  
      {
        if (value > 5) {
          lcd_putchar (0x05);
          value -= 5;
        } else {
          lcd_putchar (value);
          while (i++ < 16) lcd_putchar (0);
        }
      }
    }
    
    
    /******************************************************************************/
    --------------------
    delay.c
    کد:
    #include "stm32f10x.h"
    #include "delay.h"
     
    static u8  fac_us=0;
    static u16 fac_ms=0;
    
    
    void delay_init(u8 SYSCLK)
    {
        SysTick->CTRL&=0xfffffffb;
        fac_us=SYSCLK/8;            
        fac_ms=(u16)fac_us*1000;
    }                                    
     
    void delay_ms(u16 nms)
    {                     
        u32 temp;           
        SysTick->LOAD=(u32)nms*fac_ms;
        SysTick->VAL =0x00;           
        SysTick->CTRL=0x01 ;         
        do
        {
            temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));  
        SysTick->CTRL=0x00;       
        SysTick->VAL =0X00;                    
    }   
    //POORIA
    //http://electronics-tech.mihanblog.com/                                           
    void delay_us(u32 nus)
    {        
        u32 temp;             
        SysTick->LOAD=nus*fac_us;            
        SysTick->VAL=0x00;       
        SysTick->CTRL=0x01 ;            
        do
        {
            temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));  
        SysTick->CTRL=0x00;      
        SysTick->VAL =0X00;            
    }
    -------------------
    ویرایش توسط dizgah : 11-09-2014 در ساعت 20:14

  25. تشکرها از این نوشته :


  26. #13
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    سلام به همگی
    بنده با استفاده از کتابخونه ای که آقا پوریا باهاش تو iar کار کرده بودند تونستم ال سی دیو راه بندازم
    ممنون از همگی
    منتظر سوالات بعدی باشید

  27. تشکرها از این نوشته :


  28. #14
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    سلام مهندس
    اینم یه مثال برای راه اندازی spi
    سلام بنده وقتی این پروژه رو کامپایل میکنم بدون ارور کامپایل میشه ولی وقتی کتابخونه های اونو تو یه پروژه جدید استفاده میکنم عنوان میکنه که توابع
    spi-init و spi-i2s-deinit و spi-i2s-getflagstatus تعریف نشدن و این در صورتیه که توابع تعریف شدن ، آیا مشکل میتونه از تفاوت ورژنهای کتابخونه های std-perigh-driver باشه ؟
    و سوال دیگم هم اینه مگه کتابخونه های cmsis به عنوان واسطه ارتباط با رجیسترا نیستتن ؟ و توابع اون برای راحت تر کار کردن با رجیسترا در اختبار ما نیست ؟(مثل سایر قسمتا )پس چرا ما یه فایل کتابخونه ای دگه به نام Spi ایجادکریم و توابع کار با spi رو در اون قرار دادیم ؟ یعنی خود cmsis یه تابع نوشتن و خوندن روی spi رو نداره ؟ که خب بعید به نظر میاد اومده باشن کلی تابع مختلف براش تعریف کرده باشن تو cmsis و برا نقش اصلی ارتباط این کارو نکنن! اگه هم این تابع هست چرا ما تابع زیرو تعریف میکنیم؟
    unsigned char SPI1_SendByte(unsigned char data) {

    unsigned char tmp_SPI_RX=0;

    // Loop while DR register in not emplty
    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);


    // Send byte through the SPI1 peripheral
    SPI1->DR = data;


    // Wait to receive a byte
    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
    tmp_SPI_RX = SPI1->DR;

    // Return the byte read from the SPI bus
    return tmp_SPI_RX;
    }

    و توی این تابع مستقیم از رجیسترا استفاده میکنیم؟ پس اینجا cmsis به چه دردی میخوره ؟
    ممنون

  29. #15
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    سلام این مشکل هم حل شد که در نوع خود بسیار جالب و عجیب و غریب بود
    البته سوالاتی که بالا پرسیدم هنوز پا برجاست
    ممنون

موضوعات مشابه

  1. پاسخ: 1
    آخرين نوشته: 12-09-2014, 21:46
  2. [سوال] برد stm32f103
    توسط mahtab68 در انجمن stm32
    پاسخ: 10
    آخرين نوشته: 27-07-2014, 19:19
  3. اشکال در پروگرم stm32f103
    توسط mrezakhd در انجمن stm32
    پاسخ: 2
    آخرين نوشته: 25-05-2014, 11:26
  4. میکروهای arm stm32f103
    توسط hello در انجمن گفت و گوي آزاد
    پاسخ: 1
    آخرين نوشته: 18-06-2013, 15:58
  5. مشکل باstm32f103
    توسط kazem67sh در انجمن stm32
    پاسخ: 43
    آخرين نوشته: 25-04-2013, 01:56

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •