历史上的今天

今天是:2024年09月30日(星期一)

正在发生

2021年09月30日 | stm8s 定时器1 延时_STM8S_库函数_定时器自动装载TIM1

发布者:名字太长了吗 来源: eefocus关键字:stm8s  定时器1  延时  库函数  定时器 手机看文章 扫描二维码
随时随地手机看文章

这里说下使用库函数方式控制STM8S103F3P6片上的定时器1,也就是TIM1,这是个高级定时器。


首先,咱们看一下STM8S103F3P6上有几个定时器,打开数据手册,可以看到如下内容:

791755fc4d3b1fbe0436548ce10e615b.png

可以看到,咱们使用的单片机,有三个定时器:TIM1、TIM2、TIM4。而TIM1是一个高级控制定时器。具体有多高级,咱们看下介绍。由于内容比较多,我这里直接放数据手册里的截图:

400fe7582ed0464aab03025336c9acf1.png

1e2cd262f2e79eb0f4dc369efc60585d.png

可以看到,TIM1的功能是非常丰富的,从基本的定时、自动装载、PWM输出、输入捕获、输出比较、单脉冲输出到各种事件的中断,都有相应的功能。


稍后的几节内容,会依次展示三个例程:


1、自动装载计时


2、测量输入信号的脉冲宽度


3、输出PWM


这一节主要说自动装载计时。 接下来,通过代码实现一个功能:


1秒的一个定时,时间到了以后,板上的LED闪烁,用到的功能:分频,向上计数,自动重装载,重复计数器。代码如下,首先看主函数:


/* Includes ------------------------------------------------------------------*/


#include "stm8s.h"


#include "timer1_config.h"


/* Private defines -----------------------------------------------------------*/


/* Private function prototypes -----------------------------------------------*/


/* Private functions ---------------------------------------------------------*/


void main(void)


{

GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_SLOW);


timer1_init();


while (1);


}


主函数里进行两个操作:PB4初始化、TIM1初始化。PB4不用说了,外接一个LED,低电平点亮,前面的内容里说过了。


TIM1初始化的代码我们看下:


/***************************************


* TIMER1初始化


* 1秒一次中断


***************************************/


void timer1_init(void)


{

disableInterrupts();


TIM1_DeInit();


TIM1_TimeBaseInit(0x0063, TIM1_COUNTERMODE_UP, 0x03e8, 0x13);


TIM1_Cmd(ENABLE);


TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);


enableInterrupts();


}


由于库函数的命名比较规范,所以可以从函数名字猜出每个函数的功能:


1、关闭全局中断


2、TIM1寄存器恢复默认设置


3、TIM1时基初始化,这个函数的具体内容下面说


4、TIM1使能,也就是开始计数


5、TIM1的向上计数溢出中断使能


6、全局中断使能


这里面相对复杂的是第三步,我们详细看下这个函数:


/**


* @brief Initializes the TIM1 Time Base Unit according to the specified parameters.


* @param TIM1_Prescaler specifies the Prescaler value.


* @param TIM1_CounterMode specifies the counter mode from @ref TIM1_CounterMode_TypeDef .


* @param TIM1_Period specifies the Period value.


* @param TIM1_RepetitionCounter specifies the Repetition counter value


* @retval None


*/


void TIM1_TimeBaseInit(uint16_t TIM1_Prescaler,


TIM1_CounterMode_TypeDef TIM1_CounterMode,


uint16_t TIM1_Period,


uint8_t TIM1_RepetitionCounter)


这是库函数里面的函数定义部分,我只取了注释部分和函数名称部分,具体的代码不需要看。


结合注释和括号里的参数名称,我们可以知道这几个参数的功能:


TIM1_Prescaler-分频系数


TIM1_CounterMode-计数模式


TIM1_Period-定时周期


TIM1_RepetitionCounter-重复定时次数


STM8S相比8051的定时器有两个突出的地方,一个是计数模式,我们可以选择向上计数、向下计数、中央对其模式。


另一个就是重复定时次数,51里面,要实现一个比较长的定时,需要自己定一个变量,每次定时结束,变量加一;STM8S这里不需要,有一个专门的寄存器完成这个功能。


所以,上面那个函数的功能就是:


TIM1_TimeBaseInit(0x0063, TIM1_COUNTERMODE_UP, 0x03e8, 0x13);


系统时钟做100(0x63=99)分频,向上计数模式,定时周期1000(分频后的时钟),重复计数20(0x13=19)次。


最后,在中断函数里,我们控制LED进行状态的翻转,代码如下:


INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)


{

/* In order to detect unexpected events during development,


it is recommended to set a breakpoint on the following instruction.


*/


TIM1_ClearITPendingBit(TIM1_IT_UPDATE);


GPIO_WriteReverse(GPIOB, GPIO_PIN_4);


}


内容很简单,清中断标志,然后PB4状态翻转。


编译、下载、上电,功能正常!很简单,打完收工!

关键字:stm8s  定时器1  延时  库函数  定时器 引用地址:stm8s 定时器1 延时_STM8S_库函数_定时器自动装载TIM1

上一篇:STM8S定时器概述及TIM1配置
下一篇:stm8s 定时器1 延时_STM8定时器实现精准延时(阻塞)

推荐阅读

国内服务机器人、教育机器人以及工业机器人并驾齐驱,智能化发展正普遍落地于各行各业。其中,最受民众关注的一类机器人产业便是教育机器人,而教育类机器人对孩子的健康成长将会起着积极地引导启蒙作用,教育机器人的发展现状与行业趋势同样是每个家庭都关心的问题。 目前,在市场上,功能低端的学习机每年都还有几百万台的出产量。面对如此庞大的一...
5G呼啸而来,新一代Wi-Fi技术也正加速实现落地。近期,Wi-Fi联盟(Wi-Fi Alliance)宣布启动Wi-Fi 6(802.11ax)认证计划,商讨相关技术规范,预计会在2019年底完成标准制定。 实际上,不少终端厂家为了抢跑市场,早已提前推出了多款支持Wi-Fi 6技术标准的通信设备。其中大众最熟悉的有三星电子的Galaxy S10系列以及苹果的iPhone 11系列,它们通过搭...
集微网9月29日报道近日,5G广播中国战略及前景展望研讨会在线上召开,高通中国区技术标准负责人李俨在研讨会上表示,5G广播具有非常大的应用潜力。李俨指出,数字经济发展中很重要的环节是信息数据的流通,5G广播使用户能够以更低的成本享受各种服务,将会改变人们的生活甚至生产的方式。就像3G、4G带动移动互联网的迅猛发展一样,5G广播的成熟,将再次调...
工业设备市场的许多企业都希望采用人工智能和技术帮助他们最大程度减少意外的服务中断,防止其产品、产线和服务受到影响。这种想法的缘由显而易见:减少意外停机时间能够提升运营效率,实现效益最大化。市场分析公司Aberdeen在2016年发布的一份研究报告表明,企业停摆一小时的平均成本高达26万美元1。OEM可以通过为工业系统增加测量和分析性能数据的智能...

史海拾趣

问答坊 | AI 解惑

创业的七大必备条件--你具备了么

对于投身商海的人来说,创业是一个梦想。但创业又谈何容易?有关专家总结出创业的七大必备条件,可以与读者分享:   1、充分的资源(Resources),包括人力和财力,创业者要具备充足的经验、学历、流动资金、时间、精神和毅力;   2、可行 ...…

查看全部问答∨

学Verilog的进来看看

小弟刚开始学Verilog,希望各位大虾多多指点,有好的资料一起分享哦…

查看全部问答∨

无线移动式多参数生理监护仪的硬件结构设计

摘 要]本文介绍的无线移动式多参数生理监护仪具有体积小、功耗低和硬件开销少等明显的优势。它能同时监护多个床位病人的心电、呼吸、体温等重要生理参数,并对多种心律失常进行报警提示。本文系统介绍了无线移动式多参数生理 监护仪的硬件基本结构 ...…

查看全部问答∨

如果网卡设置了静态IP,远程工具有时就连不上,这个奇怪的问题大家有没有遇到过?

USB同步连接每次都能连接成功,但远程工具,例如看注册表的工具,和Zoom-IN的工具,有的时候能连上,有的时候连不上; 并且发现和CS8900的IP地址有关,如果设置为DHCP模式,就每次都可以连上了,这个问题大家有没有遇到过?应该怎么解决呢?…

查看全部问答∨

easyarm9862以太网口实验的问题

我打算用easyarm8962这个单片机做一个简单的实验。没有操作系统,就是想通过网线连接电脑网卡和arm板的以太网口,实现通讯。有一个设备驱动库Stellaris,这里面封装好了很多函数。比如EthernetPacketPut(ETH_BASE, pucMyTxPacket, ulMyTxPacketLen ...…

查看全部问答∨

quartusII 中定制fifo如何使用

         quartusII 中定制fifo如何使用,第一次使用,不知道full,almost_full,empty,empty_full,prog_full,prog_empty如何控制   及它们有效时的电平,请高手赐教,谢谢啦…

查看全部问答∨

ARM-Linux驱动--DM9000网卡驱动分析(三)

ARM-Linux驱动--DM9000网卡驱动分析(三) 硬件平台:FL2440(s3c2440) 内核版本:2.6.35 主机平台:Ubuntu11.04 内核版本:2.6.39 交叉编译器:arm-linuc-gcc4.3.2 原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/deta ...…

查看全部问答∨

最经典的51教程

不一样的教学方式,可以试试阅读、理解一下:   http://www.isjtag.com/list.asp?id=30         [ 本帖最后由 paulhyde 于 2012-4-28 13:35 编辑 ]…

查看全部问答∨

牛B人做的牛B机器人玩魔方

$(\'flv_YE9\').innerHTML=(AC_FL_RunContent(\'width\', \'500\', \'height\', \'375\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \'http://player.youku.com/player.php/sid/XMTY1MTI3NzUy/v.swf\', \'qu ...…

查看全部问答∨

转 稳压电源的发展史

稳压电源的发展历史 稳压电源的历史可追溯到十九世纪,爱迪生发明电灯时,就曾考虑过稳压器,到二十世纪初,就有铁磁稳压器以及相应的技术文献,电子管问世不久,就有人设计了电子管直流稳压器。在四十年代后期,电子器件与磁饱和元件相结合,构成 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved