新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM8L探索套件學習筆記-綜合應用(十八)

        STM8L探索套件學習筆記-綜合應用(十八)

        作者: 時間:2016-11-24 來源:網絡 收藏
        今天使用到的外設比較多,有DMA,TIM1,ADC。使用ADC1的通道24即PF1采集電位器的電壓,由DMA1的通道0傳輸到Buffer。同時由DMA1的通道2將Buffer傳輸到TIM1外設上,也就是TIM1_CCR1H寄存器,能夠改變PWM波的占空比。我們將PWM輸出端連接到板上LED3上,這樣就實現了用電位器調節LED3的亮度的作用。我們轉了這么大彎,但能夠學到很多,下面是代碼:
        void main(void)
        {
        //1使能時鐘
        /* Enable ADC1 clock */
        CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);

        /* Enable TIM1 clock */
        CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE);

        /* Enable DMA1 clock */
        CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);
        //2設置ADC
        /* Initialise and configure ADC1 */
        ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);
        ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);

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

        /* Enable ADC1 Channels 24 */
        ADC_ChannelCmd(ADC1, ADC_Channel_24, ENABLE); /* connected to potentiometer */
        //3設置DMA通道0連接ADC1,通道2連接TIM1
        /* Connect ADC1 to DMA1 channel 0 */
        SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
        DMA_Init(DMA1_Channel0,
        BUFFER_ADDRESS,
        ADC1_DR_ADDRESS,
        BUFFER_SIZE,
        DMA_DIR_PeripheralToMemory,
        DMA_Mode_Circular,
        DMA_MemoryIncMode_Inc,
        DMA_Priority_High,
        DMA_MemoryDataSize_HalfWord);

        /* Connect DMA1 channel 2 to TIM1 */
        DMA_Init(DMA1_Channel2,
        BUFFER_ADDRESS,
        TIM1_CCR1_ADDRESS,
        BUFFER_SIZE,
        DMA_DIR_MemoryToPeripheral,
        DMA_Mode_Circular,
        DMA_MemoryIncMode_Inc,
        DMA_Priority_High,
        DMA_MemoryDataSize_HalfWord);

        /* DMA1 Channel0 enable */
        DMA_Cmd(DMA1_Channel0, ENABLE);

        /* DMA1 Channel2 enable */
        DMA_Cmd(DMA1_Channel2, ENABLE);

        /* DMA1 enable */
        DMA_GlobalCmd(ENABLE);
        //4設置TIM1 CH1輸出PWM波
        /* configure TIM1 channel 1 as PWM Output */
        TIM1_OC1Init(TIM1_OCMode_PWM1,
        TIM1_OutputState_Enable,
        TIM1_OutputNState_Disable,
        0x7FF/* TIM1_Pulse */,
        TIM1_OCPolarity_Low,
        TIM1_OCNPolarity_Low,
        TIM1_OCIdleState_Reset,
        TIM1_OCNIdleState_Reset);

        /* Set TIM1 Autoreload value*/
        TIM1_SetAutoreload(0xFFF);
        //2M/4095=488.4HZ
        /* Enable TIM1 */
        TIM1_Cmd(ENABLE);

        //5 PD2 TIM1 CH1設置
        /* GPIO configuration: TIM1 channel 1 (PD2)*/
        GPIO_Init(GPIOD, GPIO_Pin_2 , GPIO_Mode_Out_PP_Low_Fast);

        //6使能
        /* Enable TIM1 Outputs*/
        TIM1_CtrlPWMOutputs(ENABLE);

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

        /* Enable TIM1 DMA requests*/
        TIM1_DMACmd(TIM1_DMASource_Update, ENABLE);

        /* Start ADC1 Conversion using Software trigger*/
        ADC_SoftwareStartConv(ADC1);

        while (1)
        {}
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 府谷县| 都兰县| 婺源县| 惠水县| 抚州市| 遂川县| 调兵山市| 方正县| 灵台县| 莱西市| 博白县| 垣曲县| 北安市| 诏安县| 宾阳县| 乌鲁木齐县| 香港 | 莱芜市| 岳普湖县| 乌什县| 玉树县| 汉中市| 庄浪县| 济阳县| 嘉荫县| 宁陕县| 张家港市| 伊吾县| 察隅县| 中江县| 德州市| 綦江县| 报价| 垫江县| 嫩江县| 进贤县| 门头沟区| 莆田市| 琼海市| 阿坝县| 焉耆|