在STM8中,除了有8位的定时器外,还有16位的定时器。今天进行的实验就是针对16位定时器2来进行的。除了计数单元为16位的,其它设置与前面8位的定时器基本一样。下面的程序也是采样中断方式,由定时器2的中断服务程序来驱动LED的闪烁。 具体的程序代码如下,其它注意点见上一篇,另外要注意别忘了修改相应的中断向量。 // 程序描述:通过初始化定时器2,以中断方式驱动LED闪烁 // LED接在MCU的GPIO的PD3上 #include "STM8S207C_S.h" main() { // 首先初始化GPIO PD_DDR = 0x08; PD_CR1 = 0x08; // 将PD3设置成推挽输出 PD_CR2 = 0x00; // 然后初始化定时器4 TIM2_IER = 0x00; // 禁止中断 TIM2_EGR = 0x01; // 允许产生更新事件 TIM2_PSCR = 0x01; // 计数器时钟=主时钟/128=2MHZ/2 // 相当于计数器周期为1uS // 设定重装载时的寄存器值 // 注意必须保证先写入高8位,再写入低8位 TIM2_ARRH = 0xEA; // 设定重装载时的寄存器的高8位 TIM2_ARRL = 0x60; TIM2_CNTRH = 0xEA; // 设定计数器的初值 TIM2_CNTRL = 0x60; // 定时周期=1*60000=60000uS=60ms TIM2_CR1 = 0x01; // b0 = 1,允许计数器工作 // b1 = 0,允许更新 // 设置控制器,启动定时器 TIM2_IER = 0x01; // 允许更新中断 _asm("rim"); // 允许CPU全局中断 while(1) // 进入无限循环 { } } // 函数功能:定时器4的更新中断服务程序 // 输入参数:无 // 输出参数:无 // 返 回 值:无 @far @interrupt void TIM2_UPD_IRQHandler (void) { TIM2_SR1 = 0x00; // 清除更新标志 PD_ODR = PD_ODR ^ 0x08; // LED驱动信号取反 //LED闪烁频率=2MHZ/2/60000/2=8.3 } |
有没有实验过? |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】