×
嵌入式 > 技术百科 > 详情

STM8 定时计数器2

发布时间:2020-12-15 发布时间:
|

硬件平台:stm8s103 

编译环境:IAR for stm8


#include

#include


//

//  设置系统时钟使用内部振荡器为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();

    }

}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
iPhone将是质的飞跃:苹果A14处理器+高通X55基带