这里说下使用库函数方式控制STM8S103F3P6片上的定时器1,也就是TIM1,这是个高级定时器。
首先,咱们看一下STM8S103F3P6上有几个定时器,打开数据手册,可以看到如下内容:
可以看到,咱们使用的单片机,有三个定时器:TIM1、TIM2、TIM4。而TIM1是一个高级控制定时器。具体有多高级,咱们看下介绍。由于内容比较多,我这里直接放数据手册里的截图:
可以看到,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定时器概述及TIM1配置
下一篇:stm8s 定时器1 延时_STM8定时器实现精准延时(阻塞)
推荐阅读
史海拾趣
在电子行业的发展过程中,Abbatron公司也面临着各种挑战和危机。某年,由于原材料价格的大幅上涨和市场竞争的加剧,公司面临着巨大的经营压力。然而,Abbatron公司凭借其强大的研发实力和敏锐的市场洞察力,及时调整战略,通过优化生产流程和降低成本等措施,成功度过了危机。
Dearborn Electronics Inc.始终将品质放在首位,建立了严格的质量管理体系。公司从原材料采购到生产、检验、包装等各个环节都进行严格的质量控制,确保每一件产品都符合最高标准。此外,公司还不断引进先进的生产设备和技术,提高生产效率和产品质量。
Dearborn Electronics Inc.始终将品质放在首位,建立了严格的质量管理体系。公司从原材料采购到生产、检验、包装等各个环节都进行严格的质量控制,确保每一件产品都符合最高标准。此外,公司还不断引进先进的生产设备和技术,提高生产效率和产品质量。
在环保和可持续发展日益受到重视的今天,统宇电研积极响应国家号召,致力于环保和可持续发展。公司引进了先进的环保设备和技术手段,对生产过程中产生的废弃物和污染物进行有效处理。同时,统宇电研还注重资源节约和循环利用,通过优化生产流程和产品设计来降低能源消耗和材料浪费。这些努力使得统宇电研在环保和可持续发展方面取得了显著成效。
请注意,以上故事均为虚构,旨在展示统宇电研公司可能的发展故事和成就。如有需要,建议查阅相关公司资料或咨询公司内部人员以获取更准确的信息。
为了进一步扩大市场份额,磁联达(CND-tek)公司决定拓展海外市场。公司组建了一支专业的国际销售团队,积极参加国际电子展会和交流活动,与全球各地的客户建立了紧密的合作关系。同时,公司还加大了对海外市场的投入,设立了多个海外办事处和仓库,为客户提供更加便捷的服务。这些举措使得磁联达(CND-tek)的产品迅速走向全球,赢得了广泛的赞誉。
在电子行业的发展过程中,APTA Group Inc也遭遇了不少挑战。例如,原材料价格的波动、国际贸易环境的变化等都曾给公司带来不小的压力。然而,APTA并未被这些困难击垮,而是积极调整战略,优化生产流程,降低成本,提高产品质量。这种在挑战中展现出的韧性和应变能力,使得APTA能够在逆境中保持稳健的发展态势。
对于投身商海的人来说,创业是一个梦想。但创业又谈何容易?有关专家总结出创业的七大必备条件,可以与读者分享: 1、充分的资源(Resources),包括人力和财力,创业者要具备充足的经验、学历、流动资金、时间、精神和毅力; 2、可行 ...… 查看全部问答∨ |
|
摘 要]本文介绍的无线移动式多参数生理监护仪具有体积小、功耗低和硬件开销少等明显的优势。它能同时监护多个床位病人的心电、呼吸、体温等重要生理参数,并对多种心律失常进行报警提示。本文系统介绍了无线移动式多参数生理 监护仪的硬件基本结构 ...… 查看全部问答∨ |
如果网卡设置了静态IP,远程工具有时就连不上,这个奇怪的问题大家有没有遇到过? USB同步连接每次都能连接成功,但远程工具,例如看注册表的工具,和Zoom-IN的工具,有的时候能连上,有的时候连不上; 并且发现和CS8900的IP地址有关,如果设置为DHCP模式,就每次都可以连上了,这个问题大家有没有遇到过?应该怎么解决呢?… 查看全部问答∨ |
我打算用easyarm8962这个单片机做一个简单的实验。没有操作系统,就是想通过网线连接电脑网卡和arm板的以太网口,实现通讯。有一个设备驱动库Stellaris,这里面封装好了很多函数。比如EthernetPacketPut(ETH_BASE, pucMyTxPacket, ulMyTxPacketLen ...… 查看全部问答∨ |
quartusII 中定制fifo如何使用,第一次使用,不知道full,almost_full,empty,empty_full,prog_full,prog_empty如何控制 及它们有效时的电平,请高手赐教,谢谢啦… 查看全部问答∨ |
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 ...… 查看全部问答∨ |
|
$(\'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 ...… 查看全部问答∨ |
稳压电源的发展历史 稳压电源的历史可追溯到十九世纪,爱迪生发明电灯时,就曾考虑过稳压器,到二十世纪初,就有铁磁稳压器以及相应的技术文献,电子管问世不久,就有人设计了电子管直流稳压器。在四十年代后期,电子器件与磁饱和元件相结合,构成 ...… 查看全部问答∨ |