STM8 定時計數器2

硬件平臺:stm8s103
編譯環境:IAR for stm8

#include <iostm8s103f3.h>
#include <intrinsics.h>

//
//  設置系統時鐘使用內部振盪器爲16MHz運行。
//
void InitialiseSystemClock()
{
    CLK_ICKR = 0;                       //  復位內部時鐘寄存器
    CLK_ICKR_HSIEN = 1;                 //  使能 HSI
    CLK_ECKR = 0;                       //  禁用外部時鐘
    while (CLK_ICKR_HSIRDY == 0);       //  等待HSI準備好
    CLK_CKDIVR = 0;                     //  確定時鐘全速運行
    CLK_PCKENR1 = 0xff;                 //  使能所有外設時鐘
    CLK_PCKENR2 = 0xff;                 //  同上
    CLK_CCOR = 0;                       //  關閉CCO Turn off CCO
    CLK_HSITRIMR = 0;                   //  關閉所有HSI trimming
    CLK_SWIMCCR = 0;                    //  設置SWIM分頻=系統時鐘/2
    CLK_SWR = 0xe1;                     //  使用HSI作爲時鐘源
    CLK_SWCR = 0;                       //  復位時鐘開關控制寄存器
    CLK_SWCR_SWEN = 1;                  //  開關使能
    while (CLK_SWCR_SWBSY != 0);        //  如果時鐘忙,繼續等待
}
//
//  定時器2溢出中斷
//
#pragma vector = TIM2_OVR_UIF_vector
__interrupt void TIM2_UPD_OVF_IRQHandler(void)
{
    PD_ODR_ODR4 = !PD_ODR_ODR4;     //  PD4翻轉
    TIM2_SR1_UIF = 0;               //  清除中斷溢出標誌位
}

//設置輸出端口

void SetupOutputPorts()
{
    PD_ODR = 0;             //  關閉所有PD腳電平
    PD_DDR_DDR4 = 1;        //  設置PD4爲輸出
    PD_CR1_C14 = 1;         //  設置PD4爲上拉
    PD_CR2_C24 = 1;         //  設置PD4翻轉速度爲2MHz
}

//
// 設置定時器2生成基於一個16 MHz的定時器20H中斷。
//
void SetupTimer2()
{
    TIM2_PSCR = 0x03;       // 8分頻  Prescaler = 8.
    TIM2_ARRH = 0xc3;       // 將50000高8位賦於自動重裝載寄存器高字節組
    TIM2_ARRL = 0x50;       // 將50000低8位賦於自動重裝載寄存器低字節組
    TIM2_IER_UIE = 1;       // 使能更新中斷
    TIM2_CR1_CEN = 1;       // 使能定時器
}


int main()
{
    __disable_interrupt();
    InitialiseSystemClock();
    SetupOutputPorts();
    SetupTimer2();
    __enable_interrupt();
    while (1)
    {
        __wait_for_interrupt();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章