原创 那一年在学STM8的定时器

2013-4-11 15:13 1710 19 19 分类: MCU/ 嵌入式 文集: MCU

年年岁岁花相似,岁岁年年人不同。一样定时,不一样的处理器(STM8)…

时钟可以用默认的2Mz,当然可以和下文一样,设置成为外部晶振(我搭载的是8M).

不说了,贴一代码,留作纪念,不做学习用,因为没什么好学的,呵呵…

#include "stm8s003f3.h"
#include "sys.h"

_Bool LED @PA_ODR:3;

void SCLK_INIT(void);
void TimerInit(void);

main()
{
 SCLK_INIT();
 PortInit();
 TimerInit();
 while (1);
}

void SCLK_INIT(void)     //系统时钟配置,外部时钟8MHZ
{
 CLK_ECKR = 0x01;                    // 使能外部高速晶振
 while((CLK_ECKR & 0x02) == 0x00); // 等待外部晶振稳定
 CLK_SWCR |=0x02;        // SWEN <- 1
 CLK_SWR = 0xB4;      // 外部时钟为主时钟
 while((CLK_SWCR & 0x08) == 0);   // 等待切换成功
 CLK_SWCR &= 0xFD;        // 清除切换标志
 CLK_CKDIVR = 0x00;     // CPU不分频
}

void TimerInit(void)
{
 TIM4_PSCR = 0x07;    // 计数器时钟=主时钟/(2^7)128 = 8MHZ/128
 TIM4_ARR  = 0xff;    // 设定重装载时的寄存器值255
 TIM4_CR1 |= 0x01;    // 允许计数器工作
 TIM4_IER |= 0x01;    // 允许更新中断
 _asm("rim");         // 允许CPU全局中断 
}

@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
 unsigned char i_Count;
 TIM4_SR &= 0xFE;
 i_Count++;
 if(15 == i_Count)
 {
  i_Count = 0;
  LED =~ LED;
 }
}

下面在附上简单的要死的端口配置子程序:

void PortInit(void)
{
 /* 设置PA3为推挽输出模式 */
 PA_DDR |= 0x08;  
 PA_CR1 |= 0x08;
}

老大,我还有退路吗???

文章评论0条评论)

登录后参与讨论
我要评论
0
19
关闭 站长推荐上一条 /2 下一条