- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十三章 STM8S207 定时器模块及其应用实例
这一节,我们将向大家介绍如何使用 STM8 的定时器中的基本定时功能,STM8 的定时器功能十分强大,有 TIM1 高级定时器,也有 TIM2、TIM3 等通用定时器,还有 TIM4 基本定时器。在 STM8S 参考手册里面,定时器的介绍占了 1/3 的篇幅,足见其重要性。这一节,我们分别介绍 TIM1 到 TIM4 定时器中的基本定时功能。
例程一、16 位高级控制定时器(TIM1)
简介:
TIM1 由一个 16 位的自动装载计数器组成,它由一个可编程的预分频器驱动。 TIM1 有 4 个通道,分别是 1 到 4。分别对应于四个不同的捕获/比较通道。
高级控制定时器适用于许多不同的用途:
基本的定时
测量输入信号的脉冲宽度(输入捕获)
产生输出波形(输出比较,PWM 和单脉冲模式)
对应与不同事件(捕获,比较,溢出,刹车,触发)的中断
与 TIM5/TIM6 或者外部信号(外部时钟,复位信号,触发和使能信号)同步
高级控制定时器广泛的适用于各种控制应用中,包括那些需要中间对齐模式
PWM 的应用,该模式支持互补输出和死区时间控制。
高级控制定时器的时钟源可以是内部时钟,也可以是外部的信号,可以通过配置寄存器来进行选择。
这一节我们实现的功能是基本的定时,关于 PWM 的编程留下以后的章节中。还有建议大家研究更为深入的功能
TIM1 的时基单元包括,如下图所示:
● 16 位向上/向下计数器
● 16 位自动重载寄存器
● 重复计数器
● 预分频器
16 位计数器,预分频器,自动重载寄存器和重复计数器寄存器都可以通过软件
进行读写操作。
自动重载寄存器由预装载寄存器和影子寄存器组成。
可在在两种模式下写自动重载寄存器:
● 自动预装载已使能(TIM1_CR1 寄存器的 ARPE 位置位)。在此模式下,写入
自动重载寄存器的数据将被保存在预装载寄存器中,并在下一个更新事件(UEV)时传送到影子寄存器。
● 自动预装载已禁止(TIM1_CR1 寄存器的 ARPE 位清除)。在此模式下,写入自动重载寄存器的数据将立即写入影子寄存器。
更新事件的产生条件:
●计数器向上或向下溢出。
●软件置位了 TIM1_EGR 寄存器的 UG 位。
●时钟/触发控制器产生了触发事件。
在预装载使能时(ARPE=1),如果发生了更新事件,预装载寄存器中的数值(TIM1_ARR)将写入影子寄存器中,并且 TIM1_PSCR 寄存器中的值将写入预分频器中。
置位 TIM1_CR1 寄存器的 UDIS 位将禁止更新事件(UEV)。
计数器由预分频器的输出 CK_CNT 驱动,而 CK_CNT 仅在 IM1_CR1 寄存器的计数器使能位(CEN)被置位时才有效。
简要说明:
CK_PSC 的时钟来源于 f_master,我们使用 16M 内部时钟源 HIS
然后可以通过 PSCR 这个寄存器设置 CK_CNT,PSCR 是 2 个 8 位寄存器组成的16 位寄存器,可以在 0~65535 之间任务分频,分频后的频率提供给 CK_CNT
我们的实验为了方便计算,CK_CNT 为1K 的频率,所以PSCR = 16M/1K = 16000,换成 16 进制为 0x3E80
我们使用了默认的向上溢出,所以为了 500ms 溢出中断一次,需要设置 ARPE
这个定时器,而且设置为自动预装功能,这样就可以一直提供 2Hz 的频率中断
最后允许中断和计数器使能就可以实现我们的功能
有了以上的基础就可以进入到 TIM1 的基本定时器编程了,为了验证效果,我们采用了 LED0 作为判断依据。在 TIM1 的溢出中断服务程序中闪耀 LED0
程序代码如下:
#include iostm8s207rb.h
#define LED1_FLASH PD_ODR_ODR0 = !PD_ODR_ODR0
void CLK_Init(void);
void GPIO_Init(void);
void TIM1_Init(void);
void main( void )
{
CLK_Init();
GPIO_Init();
TIM1_Init();
asm(rim);
// 主循环里没有程序需要执行
while(1);
}
void CLK_Init(void)
{
CLK_CKDIVR = 0x00; // 16M内部RC直接输出
}
void GPIO_Init(void)
{
PD_DDR = 0x01; // 配置PD端口的方向寄存器PD0输出
PD_CR1 = 0x01; // 设置PD0为推挽输出
PD_ODR =
您可能关注的文档
最近下载
- 化工生产技术项目苯乙烯的生产.ppt VIP
- 九年级上册历史总复习知识点(可打印).pdf VIP
- 《红星照耀中国》第九章:同红军在一起(续)+带读课(课件)语文统编版2024八年级上册.pptx VIP
- 推拿治疗学不寐课件,十四五推拿治疗学课件.pptx VIP
- 《道德与法治》课程标准测试题含参考答案.pdf VIP
- 酒吧劳动用工合同范本7篇.docx VIP
- 是否应该禁止使用塑料袋和塑料吸管?辩论赛 正方辩词一辩、二辩、三辩、四辩发言稿.docx VIP
- 21年浙江6月卷高考地理真题解析.pptx VIP
- 药店动态质量管理知识(一)答案-2025年执业药师继续教育.docx VIP
- 【中学】【育人故事】唤醒你的“耳朵”.docx VIP
文档评论(0)