新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM8單片機PWM應用(IAR)

        STM8單片機PWM應用(IAR)

        作者: 時間:2016-11-23 來源:網絡 收藏
        PD3復用功能是TIM2_CC2,正好可以用來測試PWM功能。本例程通過電位器調整PWM脈寬來調整接在PD3的LED1亮度。

        #include

        void CLK_init(void)
        {
        CLK_CKDIVR = 0x08; // 16M內部RC經2分頻后系統時鐘為8M
        }

        void GPIO_init(void)
        {
        PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3輸出
        PD_CR1 = 0x08; // 設置PD3為推挽輸出
        }

        void TIM2_init(void)
        {
        TIM2_CCMR2 = 0x70; // PWM模式 2
        TIM2_CCER1 = 0x30; // CC2配置為輸出
        TIM2_ARRH = 0x03;// 配置PWM分辨率為10位,ARR=0x3FF
        TIM2_ARRL = 0xFF;// PWM頻率=8M/0x03FF=7820Hz
        TIM2_CR1 = 0x01; // 計數器使能,開始計數
        }

        本文引用地址:http://www.104case.com/article/201611/320481.htm

        void ADC_init(void)
        {
        ADC_CSR = 0x03; // ADC輸入引腳AIN3
        ADC_CR1 = 0x01; // ADC開啟
        }

        void Run(void)
        {
        unsigned int value;
        ADC_CSR &= ~0x80;//清除EOC轉換結束標志
        ADC_CR1 |= 0x01; //開始單次轉換
        while(!(ADC_CSR&0x80)); //等待單次轉換完成
        value = ((int)ADC_DRH<<2); // 先讀高8位,默認設置數據左對齊
        value |= ADC_DRL; // 再讀低8位
        TIM2_CCR2H = (unsigned char)(value>>8); // 更新CC2比較寄存器
        TIM2_CCR2L = (unsigned char)(value);
        }

        void init_devices(void)
        {
        asm("sim");//禁止中斷
        CLK_init();
        GPIO_init();
        TIM2_init();
        ADC_init();
        asm("rim"); //使能中斷
        }

        void main( void )
        {
        init_devices();

        while(1) Run();
        }



        關鍵詞: STM8單片機PWMIA

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 丹阳市| 班玛县| 莱州市| 株洲县| 满洲里市| 公主岭市| 永昌县| 通化市| 连城县| 福贡县| 阿坝| 孟村| 霍城县| 龙里县| 龙川县| 赣榆县| 双辽市| 彰化县| 岐山县| 长寿区| 东丰县| 湟源县| 临澧县| 苏州市| 江油市| 福鼎市| 宜州市| 宁晋县| 夏津县| 青海省| 光山县| 丹巴县| 吕梁市| 台前县| 南川市| 洛川县| 绥德县| 玉溪市| 民勤县| 铜川市| 克拉玛依市|