简介:最近开始使用stm8s103k单片机,今天记录一下它的定时器2的使用。首先需要说明一下,stm8s的中午手册里面写着TIM2 16位向上计数,这个是错误的。
stm8s定时易于使用,首先设定定时器的时钟频率,知道了定时器的时钟周期T,那么定时时间Tn就确定了,即 Tn = T * ARR(自动装载数据)。
程序如下:
1、单片机时钟设定:
//fmaster=fcpu=2MHz
CLK_ECKR=0x00;
CLK_ICKR=0x01;
CLK_CMSR=0xe1;
CLK_SWR=0xe1;
CLK_CKDIVR=0x18;
2、定时器TIM2初始化
//定时器2初始化fmaster/分频=2M/2=1M,1us计数一次,50us 中断一次
void TIM2_Init(void)
{
_asm("sim"); //sim是禁止中断
TIM2_IER = 0x00; //禁止中断
TIM2_EGR =0x01; //允许产生更新标志
TIM2_PSCR =0x01; //设置时钟分频 2M/2=1MHz---1us
TIM2_ARRH = 0x00; //0x32=50; 周期=50次,每50us复位一次定时器2
TIM2_ARRL = 0x32; //ARR自动装载值,每1us递减1
TIM2_CNTRH=0x00; //初值
TIM2_CNTRL=0x00;
TIM2_CR1 |= 0x81; //开启定时器
TIM2_IER |= 0x01; //允许中断
_asm("rim"); //rim使能中断
}
3、中断执行程序
@far @interrupt void TIM2_UPD_IRQHandler(void)
{
TIM2_SR1 &=~(0x01);//=0x0e;//清楚中断标志位
PC_ODR=~PC_ODR;//需要先配置pc,pb为输出口
PB_ODR=~PB_ODR;
}
4、修改中断向量表
打开stm8_interrupt_vector.c文件,添加如下内容:
extern @far @interrupt void TIM2_UPD_IRQHandler(void);
修改下面一行:
{0x82, NonHandledInterrupt},
为:
{0x82,(interrupt_handler_t)TIM2_UPD_IRQHandler},
到此OK了,可以试试。
在我操作过程中,遇到一个很头疼的问题,就是下载器常常不好用,错误号30006,30003.
这两种情况下,首先确认你的stlink接线是否正确,其次量一下4根下载针电压,正确为:5V,Gnd,NRST-5V,SWIM-0v,(大致如此)。如果没有上面的问题,就可能是下载器和电脑没有连接好。需要重新软件连接和确认(Target-setting)。
上一篇:STM8学习之nRF24L01
下一篇:TIMER2定时器不能进入中断的问题
推荐阅读最新更新时间:2024-11-11 14:49
设计资源 培训 开发板 精华推荐
- LSM6DS3H适配器板,标准DIL24插座
- 2020电赛D题-绕障飞行器(重庆理工大学)
- CS51221增强型电压模式PWM控制器典型应用电路
- TC78H621FNG 低压驱动有刷直流电机驱动器评估板
- LT1038、AC-DC 电源在 10A 时提供 0-35V 输出电压
- LTC6261IDC 音频耳机桥式驱动器运算放大器的典型应用
- Si4122GM-EVB,Si4122G-BM PLL 频率合成器评估板
- 使用 Semtech 的 SC1714 的参考设计
- LT3420 闪光灯电路的高充电率典型应用电路
- LTC3127EDD 演示板、具有可编程输入电流限制的 1A 降压-升压型 DC/DC 转换器