搜索
查看: 1674|回复: 3

[原创] 【STM8-SO8-DISCO】5定时器

[复制链接]

该用户从未签到

32

主题

1829

帖子

177

蝴蝶豆

论坛元老

最后登录
2021-5-11
发表于 2019-1-21 07:42:02 | 显示全部楼层 |阅读模式
定时器在单片机开发中是会被经常用到的,接下来我们一起在STM8中了解一下如何使用定时器。我们的目标是实现开发板出厂Demo程序功能,通过按键来控制LED闪烁的速度。
0001.png
通过查看STM8S的用户手册可以,STM8S内部有三类6个定时器,其中定时器4比较适合作为时基来使用,这里我们使用定时器4实现一个1ms的定时。
0002.png
根据STM8S的时钟树可以,定时器的时钟来源于单片机的主时钟,当单片机主频为16MHz是,定时器的时钟源也是16MHz。
0003.png
定时器4是一个8位自动装载自增定时器,提供可编程的预分频,定时器溢出可以产生中断。
0004.png
定时器4有3bit可编程预分频,可以实现1,2,4,8,16,32,64,128八种预分频值。
0005.png
首先在main函数中配置系统时钟,这里采用内部高速时钟,经过一分频,也就是16MHz主频。
0006.png
在main函数中配置定时器4,采用128分频,对于16MHz来说16 MHz / 128 = 125 000 Hz。
根据定时器计算公式TIM4_PERIOD = (0.001 * 125000 - 1) = 124 ,所以最终定时器重装载值TIM4_PERIOD为124。
接下来使能定时器4中断即可。经过以上配置,定时器就可以产生时间间隔为1ms的溢出中断了。
0007.png
在stm8s_it.c中修改定时器4的中断函数,调用TimingDelay_Decrement函数后清中断。
0008.png
在按键中断中调用SetDelayTime函数。
0009.png
在main.c中定义变量和函数原型。
0010.png
实现在终端中调用的几个函数,定时器中断产生时调用TimingDelay_Decrement函数,实现TimingDelay变量的递减。
Delay函数实现对递减变量TimingDelay进行赋值。
SetDelayTime函数则相应按键中断,改变延时的数值。
0011.png
最后在主函数中的主循环调用延时和LED翻转函数,实现LED灯的闪烁。
0012.gif
编译下载后,就可以实现开发板出厂程序的功能,通过按键改变定时器计时长短,达到改变LED闪烁速度改变的效果了。


总结,STM8的定时器有8位和16位两种,8位定时器配合预分频器,可以满足大部分情况下的计时功能了。定时器的使用也不复杂,只要掌握了时钟源和预分频器以及重装载值计算公式,就可以使用定时器的定时功能了。
工程代码:
STM8S_StdPeriph_Lib.zip (10.67 MB, 下载次数: 2)
回复

使用道具 举报

该用户从未签到

6

主题

1029

帖子

133

蝴蝶豆

金牌会员

最后登录
2021-4-24
发表于 2019-1-21 09:24:48 | 显示全部楼层
不错

点评

感谢支持  发表于 2019-1-22 13:10
回复

使用道具 举报

该用户从未签到

2

主题

5

帖子

0

蝴蝶豆

初级会员

最后登录
2022-3-9
发表于 2020-12-11 09:29:08 | 显示全部楼层
楼主你好,STM8L001J3定时器参考的找个配置,无法进入中断。请指教,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 17:11 , Processed in 0.173524 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表