اطلاعیه

Collapse
No announcement yet.

خواندن چند کانال ADC در میکرو STM32F030K6

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

    خواندن چند کانال ADC در میکرو STM32F030K6

    سلام خدمت اساتید محترم
    چطوری میتونم از چند کانال ADC میکرو STM32F030K6 عمل تبدیل رو انجام بدم. من با CubeMX و توابع HAL دارم کد میزنم اما توی سری میکرو های f1 یه دستوری بود
    hadc1.Init.NbrOfConversion که با مشخص کردن Rank میشد کانال های مختلفو انتخاب کرد. اما توی f0 من همچین دستوری رو پیدا نکردم. من هر کدوم از کانال های میکروم به جاهای مختلف مدار وصل شدن و ربطی به هم ندارن، لطفا اگه کسی نمونه کد یا تجربه ای تو این زمینه داره کمک کنه.

    #2
    پاسخ : خواندن چند کانال ADC در میکرو STM32F030K6

    سلام دوستان

    منم همچین مشکلی دارم قبلا با میکرو stm32f100rbt6 و با تابع HALکار میکردم و الان میخوام میکرو stm32f051c8t6 رو پروگرم کنم اما بعضی توابع hal براش تعریف نشده

    دوستان ممنون میشم بفرمایید توسط دستورات رجیستری چطور میتونم ولتاژ یک کانال و مقدار دما رو توسط سنسور دمای داخلی بخونم؟

    ممنون

    دیدگاه


      #3
      پاسخ : خواندن چند کانال ADC در میکرو STM32F030K6

      سلام بنده هم همین مشکلو دارم دوستان بیایید کمک کنید این مشکل حل بشه

      دیدگاه


        #4
        پاسخ : خواندن چند کانال ADC در میکرو STM32F030K6

        از dma استفاده کنید و تنظیمات adc وdma رو به صورت گردشی انتخاب کنید
        و میدونید که dma خودش همه ی adc های فعال رو به ترتیب توی اون متغییر ارایه ای که گذاشتید پر میکنه
        * *

        دیدگاه


          #5
          پاسخ : خواندن چند کانال ADC در میکرو STM32F030K6

          نوشته اصلی توسط gh-m نمایش پست ها
          از dma استفاده کنید و تنظیمات adc وdma رو به صورت گردشی انتخاب کنید
          و میدونید که dma خودش همه ی adc های فعال رو به ترتیب توی اون متغییر ارایه ای که گذاشتید پر میکنه
          دستتون درد نکنه خودم هم با چرخیدن تو اینترنت به همین نتیجه رسیدم ولی یه لطفی بکنید و قسمت مربوط به کد نویسی و اون متغیر چند ارایه ای رو با یک مثال توضیح بدید تنظیمات dma رو به طور کامل میتونم انجام بدم. هزینه هم اگر داره بنده متقبل میشم.
          متشکرم

          دیدگاه


            #6
            پاسخ : خواندن چند کانال ADC در میکرو STM32F030K6

            من هم همین مشکلو داشتم و با dma مشکل رفع شد.
            یکم توضیح دادن dma پیچیدست البته کار سختی نیست ولی فهمش و توضیح دادنش سخته.
            تنها راهش dma هست در سری f0

            دیدگاه


              #7
              نوشته اصلی توسط nooranelect نمایش پست ها
              پاسخ : خواندن چند کانال ADC در میکرو STM32F030K6

              من هم همین مشکلو داشتم و با dma مشکل رفع شد.
              یکم توضیح دادن dma پیچیدست البته کار سختی نیست ولی فهمش و توضیح دادنش سخته.
              تنها راهش dma هست در سری f0
              کاش یه راهنمایی یا نمونه کد میزاشتید که یه راهنمایی حداقلی بشه.
              یه هفته هست که درگیرشم????

              دیدگاه


                #8
                نوشته اصلی توسط alimirpourian نمایش پست ها

                کاش یه راهنمایی یا نمونه کد میزاشتید که یه راهنمایی حداقلی بشه.
                یه هفته هست که درگیرشم????
                با سلام و درود و تبریک سال نو ،
                میتونید با این دو تا تابع و بافر ،که با استفده از DMA هست ، این کار رو به سادگی انجام بدید :

                کد:
                uint16_t ADC_Buffer [18];
                void ADC_PLUS_DMA_Init (void){
                    RCC->AHBENR |= RCC_AHBENR_DMA1EN;       // Enable DMA Clock
                    DMA1_Channel1->CPAR = (uint32_t)&(ADC1->DR);      // Register Address
                    DMA1_Channel1->CMAR = (uint32_t)ADC_Buffer;       // Buffer Address
                    DMA1_Channel1->CNDTR = 18;              // Number of Data for Transmition
                    DMA1_Channel1->CCR = DMA_CCR_MINC | DMA_CCR_PSIZE_0
                                        | DMA_CCR_MSIZE_0 | DMA_CCR_CIRC    // Circular DMA
                                        | DMA_CCR_DIR;
                    DMA1_Channel1->CCR |= DMA_CCR_EN;       // Enable DMA
                    RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;     // Enable ADC Clock
                    ADC1->CFGR1 = ADC_CFGR1_CONT |          // Continuous Conversion
                                  ADC_CFGR1_DMAEN |         // Enable ADC DMA
                                  ADC_CFGR1_DMACFG;         // ADC Circular DMA
                    ADC1->CHSELR = ADC_CHSELR_CHSEL0;       // Select ADC Channel 0 First
                    ADC1->SMPR = 0x00000000;                // Highest Sampling Rate (1.5 ADC Clock Cycle)
                    ADC1->CR |= ADC_CR_ADCAL;               // Start ADC Calibration
                    while (ADC1->CR & ADC_CR_ADCAL);        // Wait for End Calibration
                    ADC1->CR |= ADC_CR_ADEN;                // Enable ADC
                    while (!(ADC1->ISR & ADC_ISR_ADRDY));   // Wait for ADC Ready
                    ADC1->CR |= ADC_CR_ADSTART;             // Start ADC Conversion....
                }
                uint16_t ADC_Read (uint8_t Channel){
                    return ADC_Buffer[Channel];
                }​
                ر

                دیدگاه

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