اطلاعیه

Collapse
No announcement yet.

خواندن 4 کانال ADC با DMA در STM32

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

    خواندن 4 کانال ADC با DMA در STM32

    سلام و خسته نباشید خدمت دوستان و اساتید که بی دریغ راهنمایی میکنند.
    من 4 کانال adc رو میخام بخونم که بدون DMA و با سرعت پایین مجزا میخونم ولی وقتی از DMA استفاده میکنم 4 تا عدد خوانده شده فقط کانال یک هست
    نمونه برنامه بدون استفاده از DMA
    uint16_t R,W1,W2,W3,W4;
    HAL_ADCEx_InjectedStart(&hadc1);
    HAL_ADC_PollForConversion(&hadc1,10);
    W1=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_1);
    W2=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_2);
    W3=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_3);
    W4=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_4);
    HAL_ADCEx_InjectedStop(&hadc1);
    نمونه برنامه با DMA که 4 تا w فقط کانال 1 رو میخونن و مشکل دارم (کانالهای من 1و2و3و4 هستن )
    uint16_t M[4];
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){W1=M[0];W2=M[1];W3=M[2];W4=M[3];}
    [IMG]D:/HAlp.jpg[/IMG]
    static void MX_DMA_Init(void) {
    __HAL_RCC_DMA1_CLK_ENABLE();
    HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);}
    [IMG]D:/HAlp.jpg[/IMG]

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    [IMG]D:/HAlp.jpg[/IMG]

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    چکار کنم 4 تا ADC رو با سرعت بالا بخونم ؟؟ DMA سرعت خوبی داره ولی یک کانال رو بیشتر نمیخونه -دوستان راهنمایی میخام

    #2
    پاسخ : خواندن 4 کانال ADC با DMA در STM32

    DMA کاری نداره که شما داری چه کانالی رو میخونی. اون فقط یه آدرس میخواد و یه تریگر. که آدرس، همیشه آدرس رجیستر DR واحد ADC ه و تریگر هم ایونت پایان تبدیل.
    شما باید ADC تون رو طوری تنظیم کنید که به ترتیب کانال ها رو جلو بره (کانال ها تو کانفیگ رنک انتخاب میشن که کدوما باشن) و هر کانالو که تبدیل کرد بندازه تو ADCDR و ایونت بده به DMA.
    Si vis pacem, para bellum

    دیدگاه


      #3
      پاسخ : خواندن 4 کانال ADC با DMA در STM32

      نوشته اصلی توسط saeidjannati نمایش پست ها
      سلام و خسته نباشید خدمت دوستان و اساتید که بی دریغ راهنمایی میکنند.
      من 4 کانال adc رو میخام بخونم که بدون DMA و با سرعت پایین مجزا میخونم ولی وقتی از DMA استفاده میکنم 4 تا عدد خوانده شده فقط کانال یک هست
      نمونه برنامه بدون استفاده از DMA
      uint16_t R,W1,W2,W3,W4;
      HAL_ADCEx_InjectedStart(&hadc1);
      HAL_ADC_PollForConversion(&hadc1,10);
      W1=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_1);
      W2=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_2);
      W3=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_3);
      W4=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_ RANK_4);
      HAL_ADCEx_InjectedStop(&hadc1);
      نمونه برنامه با DMA که 4 تا w فقط کانال 1 رو میخونن و مشکل دارم (کانالهای من 1و2و3و4 هستن )
      uint16_t M[4];
      void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){W1=M[0];W2=M[1];W3=M[2];W4=M[3];}
      [IMG]D:/HAlp.jpg[/IMG]
      static void MX_DMA_Init(void) {
      __HAL_RCC_DMA1_CLK_ENABLE();
      HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
      HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);}
      [IMG]D:/HAlp.jpg[/IMG]

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      [IMG]D:/HAlp.jpg[/IMG]

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      چکار کنم 4 تا ADC رو با سرعت بالا بخونم ؟؟ DMA سرعت خوبی داره ولی یک کانال رو بیشتر نمیخونه -دوستان راهنمایی میخام
      سلام دوست عزیز
      تنظیمات DMA را توی مد Circular گذاشتید؟
      زندگي را تو بساز ،
      نه بدان ساز که سازند و پذيري بي حرف ،
      زندگي يعني جنگ ، تو بجنگ ،
      زندگي يعني عشق ، تو بدان عشق بورز.

      دیدگاه

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