اطلاعیه

Collapse
No announcement yet.

راه اندازی ADC

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

    راه اندازی ADC

    سلام بر همگی. من میخوام به وسیله پتانسیومتر و ADC میکرو stm32f091 دو تا ال ای دی را کنترل کنم. کد زیرو نوشتم منتها جواب نمی گیرم. کسی میتونه ایرادات دستورات زیر را بگه؟

    پین PA1 پین ورودی آنالوگ (پتانسیومتر) پینهای B0 و B1 ال ای دی وصل شدن به طوریکه اگر ADC_Value کمتر از 2000 باشه B0 و در غیر اینصورت B1 روشن باید بشن.

    int main(int argc, char* argv[])
    {




    //(#) ADC pins (pA1) configuration --------------------------------------------------------------




    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
    GPIO_Init(GPIOA, &GPIO_InitStructure);




    //leds (pB0... pB3) configuration--------------------------------------------------------------








    GPIO_InitTypeDef GPIO_LEDs;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    GPIO_LEDs.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
    GPIO_LEDs.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_LEDs.GPIO_OType = GPIO_OType_PP;
    GPIO_LEDs.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_LEDs.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_LEDs);
    //ADC-------------------------------------------------------------------------------------------
    ADC_InitTypeDef ADC_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
    ADC_Init(ADC1, &ADC_InitStructure);




    ADC_GetCalibrationFactor(ADC1);
    ADC_Cmd(ADC1, ENABLE);
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN) == RESET);
    ADC_StartOfConversion(ADC1);
    uint16_t valueADC = ADC_GetConversionValue(ADC1);
    ADC_ChannelConfig(ADC1, ADC_Channel_1, ADC_SampleTime_1_5Cycles);




    //dma--------------------------------------------------------------------------------------
    DMA_InitTypeDef DMA_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);
    DMA_DeInit(DMA1_Channel1);
    DMA_InitStructure.DMA_PeripheralBaseAddr= (uint32_t)&ADC1->DR;
    DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&valueADC;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = 2;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);
    DMA_Cmd(DMA1_Channel1, ENABLE);
    ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);
    ADC_DMACmd(ADC1, ENABLE);








    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//Processing the conversion




    return ADC_GetConversionValue(ADC1); //Return the converted data
    ADC_StartOfConversion(ADC1);


    while (1)
    {
    if(valueADC<2000){
    GPIO_SetBits(GPIOB, GPIO_Pin_0);
    GPIO_ResetBits(GPIOB, GPIO_Pin_1);
    }
    else if(valueADC>2000){
    GPIO_SetBits(GPIOB, GPIO_Pin_1);
    GPIO_ResetBits(GPIOB, GPIO_Pin_0);


    }
    }
    }



    جدیدترین ویرایش توسط nm272; ۱۸:۵۶ ۱۳۹۹/۰۲/۲۲.

    #2
    پاسخ : راه اندازی ADC

    نوشته اصلی توسط nm272 نمایش پست ها
    سلام بر همگی. من میخوام به وسیله پتانسیومتر و ADC میکرو stm32f091 دو تا ال ای دی را کنترل کنم. کد زیرو نوشتم منتها جواب نمی گیرم. کسی میتونه ایرادات دستورات زیر را بگه؟

    پین PA1 پین ورودی آنالوگ (پتانسیومتر) پینهای B0 و B1 ال ای دی وصل شدن به طوریکه اگر ADC_Value کمتر از 2000 باشه B0 و در غیر اینصورت B1 روشن باید بشن.

    int main(int argc, char* argv[])
    {


    //(#) ADC pins (pA1) configuration --------------------------------------------------------------


    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
    GPIO_Init(GPIOA, &GPIO_InitStructure);


    //leds (pB0... pB3) configuration--------------------------------------------------------------




    GPIO_InitTypeDef GPIO_LEDs;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    GPIO_LEDs.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
    GPIO_LEDs.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_LEDs.GPIO_OType = GPIO_OType_PP;
    GPIO_LEDs.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_LEDs.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_LEDs);
    //ADC-------------------------------------------------------------------------------------------
    ADC_InitTypeDef ADC_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
    ADC_Init(ADC1, &ADC_InitStructure);


    ADC_GetCalibrationFactor(ADC1);
    ADC_Cmd(ADC1, ENABLE);
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN) == RESET);
    ADC_StartOfConversion(ADC1);
    uint16_t valueADC = ADC_GetConversionValue(ADC1);
    ADC_ChannelConfig(ADC1, ADC_Channel_1, ADC_SampleTime_1_5Cycles);


    //dma--------------------------------------------------------------------------------------
    DMA_InitTypeDef DMA_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);
    DMA_DeInit(DMA1_Channel1);
    DMA_InitStructure.DMA_PeripheralBaseAddr= (uint32_t)&ADC1->DR;
    DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&valueADC;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = 2;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);
    DMA_Cmd(DMA1_Channel1, ENABLE);
    ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);
    ADC_DMACmd(ADC1, ENABLE);




    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//Processing the conversion


    return ADC_GetConversionValue(ADC1); //Return the converted data
    ADC_StartOfConversion(ADC1);


    while (1)
    if(valueADC<2000){
    GPIO_SetBits(GPIOB, GPIO_Pin_0);
    }
    else if(valueADC>2000){
    GPIO_SetBits(GPIOB, GPIO_Pin_1);
    }
    }


    سلام.دوتا مشکل دیدم یکی اینکه شما dma چون دارید ۳۲ بیتی دریافت می کنید شما بجای طول Halfword از word استفاده کنید در این صورت طول دیتا بجا ۲ تبدیل به ۱ کنید(یعنی ۳۲ بیت کامل دریافت می کنید)

    دوم شما داخل حلقه وایل بعد بررسی شرط فقط ست کردید و ریست انجام ندادید
    در ضمن بهتر دیتا که از dma می گیرد با مقدار 0xfff رو با هاش AND کنید تا مقدار رجیستر ۱۲ بیت فقط توی خروجی بیاد
    جدیدترین ویرایش توسط MM320; ۱۸:۳۲ ۱۳۹۹/۰۲/۲۲.

    دیدگاه


      #3
      پاسخ : راه اندازی ADC

      نوشته اصلی توسط MM320 نمایش پست ها

      سلام.دوتا مشکل دیدم یکی اینکه شما dma چون دارید ۳۲ بیتی دریافت می کنید شما بجای طول Halfword از word استفاده کنید در این صورت طول دیتا بجا ۲ تبدیل به ۱ کنید(یعنی ۳۲ بیت کامل دریافت می کنید)

      دوم شما داخل حلقه وایل بعد بررسی شرط فقط ست کردید و ریست انجام ندادید
      در ضمن بهتر دیتا که از dma می گیرد با مقدار 0xfff رو با هاش AND کنید تا مقدار رجیستر ۱۲ بیت فقط توی خروجی بیاد
      ممنون برا راهنماییتون.
      دوتا ایراد اولی را برطرف کردم ولی هنوز جواب نداده. مورد سوم ولی متوجه نشدم. کدوم خطو AND کنم؟

      دیدگاه


        #4
        پاسخ : راه اندازی ADC

        نوشته اصلی توسط nm272 نمایش پست ها
        ممنون برا راهنماییتون. دوتا ایراد اولی را برطرف کردم ولی هنوز جواب نداده. مورد سوم ولی متوجه نشدم. کدوم خطو AND کنم؟
        شما موارد برای تنظیم dma انجام دادید شمارنده آدرس memory و prephoral غیر فعال کردید ؟ و همینطور مقدار adc از واحد dma دریافت کردید با مقدار Valueadc=valueadc & 0xfff بعدش مقدارشو به if بدید ببینید مشکلتون حل میشه

        الان که برنامه تون نگاه کردم متوجه شدم که شما بعد اینگه منتظر عملیات تبدیل شدید در خط بعد امدید return مقدار adc به تابع main طبیعتا باعث میشه تابع main تمام بشه و اصلا به حلقه while نرسه دستوارات اجرا نشه
        جدیدترین ویرایش توسط MM320; ۲۲:۵۳ ۱۳۹۹/۰۲/۲۲.

        دیدگاه


          #5
          پاسخ : راه اندازی ADC

          نوشته اصلی توسط MM320 نمایش پست ها
          شما موارد برای تنظیم dma انجام دادید شمارنده آدرس memory و prephoral غیر فعال کردید ؟ و همینطور مقدار adc از واحد dma دریافت کردید با مقدار Valueadc=valueadc & 0xfff بعدش مقدارشو به if بدید ببینید مشکلتون حل میشه

          الان که برنامه تون نگاه کردم متوجه شدم که شما بعد اینگه منتظر عملیات تبدیل شدید در خط بعد امدید return مقدار adc به تابع main طبیعتا باعث میشه تابع main تمام بشه و اصلا به حلقه while نرسه دستوارات اجرا نشه
          ممنون از وقتی که میذاری.
          برا memory و prephoral یکیش غیر فعال و یکیش فعاله
          DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
          DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

          سوال بعدیتون منظورتون این قسمته؟


          while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//Processing the conversion

          return ADC_GetConversionValue(ADC1); //Return the converted data
          حذف کردم این دو قسمتو منتها الان کلا پین B0 روشن میشه و با تغییر پتانسیومتر هیچ اتقافی نمیفته. در واقع باید با تغییر پتانسیومتر b1 روشن بشه که نمیشه.

          دیدگاه


            #6
            پاسخ : راه اندازی ADC

            شما تبدیل adc به چه صورت انجام می گیرد آیا تنظیمات adc تریگر بصورت پشت سر هم انجام می گیره مثلا توی میکروهای lpc1768 ما مد burst (پی در پی داره) داره پشت سرهم بخونید حالا شما می تونید برای تریگرش از تایمر هم استفاده کنید
            البته بصورت polling هم می تونید تبدیلadc استفاده کنید
            یه مثال هست برای میکروهای stm32f103 می تونید ازش استفاده کنید

            ******************************************************************************
            * @file ADC/TIMTrigger_AutoInjection/main.c
            * @[URL="https://www.eca.ir/forums/member.php?u=19064"]autho[/URL]r MCD Application Team
            * @version V3.5.0
            * @date 08-April-2011
            * @brief Main program body
            ******************************************************************************
            * @attention
            *
            * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
            * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
            * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
            * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
            * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
            * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
            *
            * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
            ******************************************************************************
            */

            /* Includes ------------------------------------------------------------------*/
            #include "stm32f10x.h"

            /** @addtogroup STM32F10x_StdPeriph_Examples
            * @{
            */

            /** @addtogroup ADC_TIMTrigger_AutoInjection
            * @{
            */

            /* Private typedef -----------------------------------------------------------*/
            /* Private define ------------------------------------------------------------*/
            #define ADC1_DR_Address ((uint32_t)0x4001244C)

            /* Private macro -------------------------------------------------------------*/
            /* Private variables ---------------------------------------------------------*/
            ADC_InitTypeDef ADC_InitStructure;
            DMA_InitTypeDef DMA_InitStructure;
            TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
            TIM_OCInitTypeDef TIM_OCInitStructure;
            __IO uint16_t ADC_RegularConvertedValueTab[32], ADC_InjectedConvertedValueTab[32];

            /* Private function prototypes -----------------------------------------------*/
            void RCC_Configuration(void);
            void GPIO_Configuration(void);
            void NVIC_Configuration(void);

            /* Private functions ---------------------------------------------------------*/

            /**
            * @brief Main program
            * @[URL="https://www.eca.ir/forums/member.php?u=17545"]para[/URL]m None
            * @retval None
            */
            int main(void)
            {
            /*!< At this stage the microcontroller clock setting is already configured,
            this is done through SystemInit() function which is called from startup
            file (startup_stm32f10x_xx.s) before to branch to application main.
            To reconfigure the default setting of SystemInit() function, refer to
            system_stm32f10x.c file
            */

            /* System clocks configuration ---------------------------------------------*/
            RCC_Configuration();

            /* NVIC configuration ------------------------------------------------------*/
            NVIC_Configuration();

            /* GPIO configuration ------------------------------------------------------*/
            GPIO_Configuration();

            /* TIM1 configuration ------------------------------------------------------*/
            /* Time Base configuration */
            TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
            TIM_TimeBaseStructure.TIM_Period = 0xFF;
            TIM_TimeBaseStructure.TIM_Prescaler = 0x4;
            TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
            TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
            TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
            /* TIM1 channel1 configuration in PWM mode */
            TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
            TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
            TIM_OCInitStructure.TIM_Pulse = 0x7F;
            TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
            TIM_OC1Init(TIM1, &TIM_OCInitStructure);

            /* DMA1 Channel1 Configuration ----------------------------------------------*/
            DMA_DeInit(DMA1_Channel1);
            DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
            DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_RegularConvertedValueTab;
            DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
            DMA_InitStructure.DMA_BufferSize = 32;
            DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
            DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
            DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
            DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
            DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
            DMA_InitStructure.DMA_Priority = DMA_Priority_High;
            DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
            DMA_Init(DMA1_Channel1, &DMA_InitStructure);

            /* Enable DMA1 channel1 */
            DMA_Cmd(DMA1_Channel1, ENABLE);

            /* ADC1 configuration ------------------------------------------------------*/
            ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
            ADC_InitStructure.ADC_ScanConvMode = DISABLE;
            ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
            ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
            ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
            ADC_InitStructure.ADC_NbrOfChannel = 1;
            ADC_Init(ADC1, &ADC_InitStructure);

            /* ADC1 regular channel14 configuration */
            ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_13Cycles5);

            /* Set injected sequencer length */
            ADC_InjectedSequencerLengthConfig(ADC1, 1);
            /* ADC1 injected channel Configuration */
            ADC_InjectedChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_71Cycles5);
            /* ADC1 injected external trigger configuration */
            ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);

            /* Enable automatic injected conversion start after regular one */
            ADC_AutoInjectedConvCmd(ADC1, ENABLE);

            /* Enable ADC1 DMA */
            ADC_DMACmd(ADC1, ENABLE);

            /* Enable ADC1 external trigger */
            ADC_ExternalTrigConvCmd(ADC1, ENABLE);

            /* Enable JEOC interrupt */
            ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE);

            /* Enable ADC1 */
            ADC_Cmd(ADC1, ENABLE);

            /* Enable ADC1 reset calibration register */
            ADC_ResetCalibration(ADC1);
            /* Check the end of ADC1 reset calibration register */
            while(ADC_GetResetCalibrationStatus(ADC1));

            /* Start ADC1 calibration */
            ADC_StartCalibration(ADC1);
            /* Check the end of ADC1 calibration */
            while(ADC_GetCalibrationStatus(ADC1));

            /* TIM1 counter enable */
            TIM_Cmd(TIM1, ENABLE);
            /* TIM1 main Output Enable */
            TIM_CtrlPWMOutputs(TIM1, ENABLE);

            /* Test on channel1 transfer complete flag */
            while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));
            /* Clear channel1 transfer complete flag */
            DMA_ClearFlag(DMA1_FLAG_TC1);

            /* TIM1 counter disable */
            TIM_Cmd(TIM1, DISABLE);

            while (1)
            {
            }
            }

            /**
            * @brief Configures the different system clocks.
            * @[URL="https://www.eca.ir/forums/member.php?u=17545"]para[/URL]m None
            * @retval None
            */
            void RCC_Configuration(void)
            {
            #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
            /* ADCCLK = PCLK2/2 */
            RCC_ADCCLKConfig(RCC_PCLK2_Div2);
            #else
            /* ADCCLK = PCLK2/4 */
            RCC_ADCCLKConfig(RCC_PCLK2_Div4);
            #endif
            /* Enable peripheral clocks ------------------------------------------------*/
            /* Enable DMA1 clock */
            RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

            /* Enable GPIOA, GPIOC, ADC1 and TIM1 clock */
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC |
            RCC_APB2Periph_ADC1 | RCC_APB2Periph_TIM1, ENABLE);
            }

            /**
            * @brief Configures the different GPIO ports.
            * @[URL="https://www.eca.ir/forums/member.php?u=17545"]para[/URL]m None
            * @retval None
            */
            void GPIO_Configuration(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;

            /* Configure TIM1_CH1 (PA8) as alternate function push-pull */
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
            GPIO_Init(GPIOA, &GPIO_InitStructure);

            /* Configure PC.06 as output push-pull */
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
            GPIO_Init(GPIOC, &GPIO_InitStructure);

            /* Configure PC.01 and PC.04 (ADC Channel11 and Channel14) as analog input */
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
            GPIO_Init(GPIOC, &GPIO_InitStructure);
            }

            /**
            * @brief Configures NVIC and Vector Table base location.
            * @[URL="https://www.eca.ir/forums/member.php?u=17545"]para[/URL]m None
            * @retval None
            */
            void NVIC_Configuration(void)
            {
            NVIC_InitTypeDef NVIC_InitStructure;

            /* Configure and enable ADC interrupt */
            #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
            NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;
            #else
            NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
            #endif
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure);
            }

            #ifdef USE_FULL_ASSERT

            /**
            * @brief Reports the name of the source file and the source line number
            * where the assert_param error has occurred.
            * @[URL="https://www.eca.ir/forums/member.php?u=17545"]para[/URL]m file: pointer to the source file name
            * @[URL="https://www.eca.ir/forums/member.php?u=17545"]para[/URL]m line: assert_param error line source number
            * @retval None
            */
            void assert_failed(uint8_t* file, uint32_t line)
            {
            /* User can add his own implementation to report the file name and line number,
            ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

            /* Infinite loop */
            while (1)
            {
            }
            }

            #endif

            /**
            * @}
            */

            /**
            * @}
            */

            /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

            جدیدترین ویرایش توسط MM320; ۰۵:۲۸ ۱۳۹۹/۰۲/۲۳.

            دیدگاه

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