اطلاعیه

Collapse
No announcement yet.

مشکل اجرای برنامه در STM32F103

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

    مشکل اجرای برنامه در STM32F103

    سلام
    من از هدر برد فروشگاه استفاده می کنم.
    با استفاده از کتابخانه CMSYS برخی از قسمت های میکرو را راه اندازی کردم. ولی جند مشکل برام پیش اومده:
    من برنامه رو کامپایل و در میکرو پروگرام می کنم و بدون مشکل برنامه اجرا می شه، اما گاهی اوقات که چند خط کد به برنامه اضافه می کنم، برنامه بدون خطا کامپایل می شه ولی اصلا اجرا نمی شه. به عنوان مثال به کد زیر نگاه کنید:
    کد:
    #include "stm32f10x.h"
    #include <string.h>
    #include <stdio.h>
    #include <math.h>
    #include "main.h"
    #define ADC_BUFFER_LEN 5000
    #define VREF 3.3
    uint8_t Buffer[] = "Hello word. This is me.";
    //uint16_t CCR1_Val = 1000;
    //uint16_t capture = 0;
    //uint8_t gDMAFlag = 0;
    uint16_t gADC1[ADC_BUFFER_LEN], gADC2[ADC_BUFFER_LEN];
    uint8_t gRDY = 0;
    
    int main (void)
    {
    	uint16_t i, frq;
    	//int32_t sum;
    	char str[65];
    	double flickerFrq, fsum, power, sum, avg;
    	int16_t d1, d2, df, ramp, lastramp;
    	double volt[ADC_BUFFER_LEN];
    
    	init_mcu();
    
    	print(UART4, "Start\r\n");
    	for (i = 0; i < 10; i++) gADC1[i] = gADC2[i] = 0;
    	/* TIM3 enable counter */
    	TIM_Cmd(TIM3, ENABLE);
    	avg = read_adc();
    	while(1)
    	{
    		if (gRDY)
    		{
    			gRDY = 0;
    			/* average of samples */
    			sum = 0.0;
    			for (i = 0; i < ADC_BUFFER_LEN; i++)
    			{
                    //volt[i] = (double)gADC2[i] * 3;
    				volt[i] = volt[i];
    				sum += volt[i];
    			}
    			/* ... */
    		}
    	}
    }
    وقتی در حلقه for خط
    کد:
    //volt[i] = (double)gADC2[i] * 3;
    اضافه می شود، برنامه دیگر اجرا نمی شود،یعنی پس از پزوگزام کزدن، دستور پرینت اول برنامه نیز اجرا نمی شود. اما با حذف این خط برنامه و پروگرام کردن میکرو، برنامه اجرا می شود. البته نا گفته نماند که دستورات دیگری نیز در برنامه وجود دارد که در اینجا ذکر نشده است. از وقفه DMA هم استفاده شده است.
    در یک حالت دیگر هم این مشکل را دیدم و این بود که در وقفه اتمام ترانسفر DMA ، برای دیباگ کردن از دستور چاپ کردم استفاده کردم و برنامه به درستی اجرا می شد. با پاک کردن دستور چاپ کردن، برنامه اجرا نشد و با کمی تغییرات و جابجا کردن کد در تابع main دوباره برنامه اجرا شد. مقدار stack و heap را هم در فایل startup به ترتیب از 400 , 100 به 800 , 200 افزایش دادم اما مشکل برطرف نشد. لطفا راهنمایی بفرمایید که مشکل از کجاست.
    مشکل دیگری که دارم در مورد ADC است. ADC را در حالت تریگر با تایمر 3 فعال کردم و نتیجه تبدیل را با استفاده از DMA در یک آرایه قرار می دهم. مشکل اینجاست که با فعال کردن تایمر، ADC تریگ نمی شود و حتما باید یک بار به صورت نرم افزاری (با استفاده از تابع زیر) مقدار ADC خوانده شود تا پس از آن با بایمر تریگ شود.
    کد:
    uint16_t read_adc (void)
    {
    	uint16_t adc;
    	/* Start ADC1 Software Conversion */
    	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    	/* wait for conversion complete */
    	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)){}
    	/* read ADC value */
    	adc=ADC_GetConversionValue(ADC1);
    	/* clear EOC flag */
    	ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
    	return adc;
    }
    با تشکر

    #2
    پاسخ : مشکل اجرای برنامه در STM32F103

    سلام
    مشکل شما در فضای پشته میکروتون هست
    داده ها و ارایه هاتون بیشتر از فضای پشته پیش فرض هست میتونید از تو فایل استارت اپ میکروتون مقدار استک و هیپ رو بیشتر کنید
    Stack_Size EQU 0x00000800

    AREA STACK, NOINIT, READWRITE, ALIGN=3
    Stack_Mem SPACE Stack_Size
    __initial_sp

    ; <h> Heap Configuration
    ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
    ; </h>

    Heap_Size EQU 0x00002000

    AREA HEAP, NOINIT, READWRITE, ALIGN=3
    __heap_base
    Heap_Mem SPACE Heap_Size
    __heap_limit

    دیدگاه


      #3
      پاسخ : مشکل اجرای برنامه در STM32F103

      http://www.eca.ir/forum2/index.php/topic,10159.0.html
      Engineering is the art of making what you want from things you can get.
      اموزش DSP ...........................
      http://www.eca.ir/forum2/index.php?topic=29824.0
      http://www.eca.ir/forum2/index.php?topic=32324.0

      دیدگاه


        #4
        پاسخ : مشکل اجرای برنامه در STM32F103

        نوشته اصلی توسط moein b
        سلام
        مشکل شما در فضای پشته میکروتون هست
        داده ها و ارایه هاتون بیشتر از فضای پشته پیش فرض هست میتونید از تو فایل استارت اپ میکروتون مقدار استک و هیپ رو بیشتر کنید
        سلام و با تشکر از شما. مشکل من دقیقا همین چیزی بود که شما فرمودید.تعداد متغیرهای سراسری برنامه خیلی زیاد بود.

        دیدگاه


          #5
          پاسخ : مشکل اجرای برنامه در stm32f103

          سلام خدمت دوستان

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

          Build target 'Target 1'
          compiling main.c...
          main.c: Error: C3065E: type of input file 'Liberary\CMSIS\CM3\CoreSupport' unknown
          main.c:
          main.c: Error: C3065E: type of input file 'Liberary\CMSIS\CM3\DeviceSupport\ST\STM32F10x' unknown
          main.c:
          main.c: Error: C3065E: type of input file 'Liberary\CMSIS\CM3\DeviceSupport\ST\STM32F10x\sta rtup' unknown
          main.c:
          Target not created





          دیدگاه


            #6
            پاسخ : مشکل اجرای برنامه در stm32f103

            سلام. کد خطا رو در گوگل سرچ کنید. به نظرم یه جایی تو نامگذاری فایل ها یا پوشه ها خطا دارید. تو لینک زیر نوشته که کامپایلرها ممکنه با کاراکتر فاصله در نام فایل ها یا پوشه ها مشکل داشته باشند. نام یکی از فایل های شما sta rtup است.
            In case of someone else like my face this problem it is interesting bug or so like in keil include path if path you just add include some space in folder name you


              I consistently receive the following error message when trying to compile LVE:   "Failed to Script uVision Build Tools"   Once I receive the error, I will get it every time until I quit LV and restart.   Bill F

            دیدگاه

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