1、定时器概述
STM8S提供三种类型的 TIM 定时器:高级控制型(TIM1)、通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)。它们虽有不同功能但都基于共同的架构。此共同的架构使得采用各个定时器来设计应用变得非常容易与方便(相同的寄存器映射,相同的基本功能)。
2、现在来介绍高级定时器1的配置和应用。
代码如下:
main.c
点击(此处)折叠或打开
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "stm8s.h"
#include "stm8s003f3p.h"
#include "stm8s_conf.h"
void GPIOInit(void);
void Time1_Init(void);
void main(void)
{
CLK_HSECmd(DISABLE); //关闭外部高速振荡器
CLK_HSICmd(ENABLE); //启用内部高速时钟
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //设置 内部 时钟16M 为主时钟(默认是8分配2MHz)
GPIOInit();
Time1_Init();
while (1){
}
}
void GPIOInit(void)
{
GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
}
void Time1_Init(void)
{
TIM1_DeInit(); //恢复为默认值
TIM1_TimeBaseInit(0x0000, TIM1_COUNTERMODE_UP, 0x3e80, 0x00); //不分频16MHz 计数值16000 1ms中断一次
TIM1_GenerateEvent(TIM1_EVENTSOURCE_UPDATE); //手册里有说明,不设置的话就不会产生中断
TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE); //配置更新中断
TIM1_Cmd(ENABLE); //使能定时器
enableInterrupts(); //开启总中断
}
@far @interrupt void Timer4_interrupt_handler_t(void) //1ms定时中断
{
static unsigned int count = 0;
static unsigned char falg = 0;
TIM1_ClearITPendingBit(TIM1_IT_UPDATE); //TIM1_SR = 0,清除中断标志
if(count<1000){
GPIO_WriteHigh(GPIOC, GPIO_PIN_4);
GPIO_WriteLow(GPIOC, GPIO_PIN_3);
}
else if(count>=1000)
{
GPIO_WriteHigh(GPIOC, GPIO_PIN_3);
GPIO_WriteLow(GPIOC, GPIO_PIN_4);
}
if(count >=2000)count =0;
count++;
}
然后还有一个很重要的地方,就是在stm8_interrupt_vector.c中注册中断服务函数。
stm8_interrupt_vector.c
点击(此处)折叠或打开
/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices
* Copyright (c) 2007 STMicroelectronics
*/
typedef void @far (*interrupt_handler_t)(void);
struct interrupt_vector {
unsigned char interrupt_instruction;
interrupt_handler_t interrupt_handler;
};
@far @interrupt void NonHandledInterrupt (void)
{
/* in order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction
*/
return;
}
extern void _stext(); /* startup routine */
extern @far @interrupt void Timer4_interrupt_handler_t(void);
struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap */
{0x82, NonHandledInterrupt}, /* TLI */
{0x82, NonHandledInterrupt}, /* AWU */
{0x82, NonHandledInterrupt}, /* CLK */
{0x82, NonHandledInterrupt}, /* EXTI0 Port A */
{0x82, NonHandledInterrupt}, /* EXTI1 Port B */
{0x82, NonHandledInterrupt}, /* EXTI2 Port C */
{0x82, NonHandledInterrupt}, /* EXTI3 Port D */
{0x82, NonHandledInterrupt}, /* EXTI4 Port E */
{0x82, NonHandledInterrupt}, /* CAN RX */
{0x82, NonHandledInterrupt}, /* CAN TX */
{0x82, NonHandledInterrupt}, /* SPI (End of transfer) */
{0x82, (interrupt_handler_t)Timer4_interrupt_handler_t}, /* TIM1 update/ overflow/ underflow/trigger/ break */
{0x82, NonHandledInterrupt}, /* TIM1 capture/ compare */
{0x82, NonHandledInterrupt}, /* TIM2 update/ overflow */
{0x82, NonHandledInterrupt}, /* TIM2 capture/ compare */
{0x82, NonHandledInterrupt}, /* TIM3 update/ overflow */
{0x82, NonHandledInterrupt}, /* TIM3 capture/ compare */
{0x82, NonHandledInterrupt}, /* UART1 Tx complete */
{0x82, NonHandledInterrupt}, /* UART1 Receive register DATA FULL */
{0x82, NonHandledInterrupt}, /* I2C interrupt */
{0x82, NonHandledInterrupt}, /* UART2/3 Tx complete */
{0x82, NonHandledInterrupt}, /* UART2/3 Receive register DATA FULL */
{0x82, NonHandledInterrupt}, /* ADC1 end of conversion/ analog watchdog interrupt */
{0x82, NonHandledInterrupt}, /* TIM4 update/ overflow */
{0x82, NonHandledInterrupt}, /* Flash EOP/WR_PG_DIS */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};
通过上述的简单设置就可以使用高级定时器1了。
现象是一个LED以1s的间隔在亮灭间转换。
上一篇:STM8S CPU主时钟
下一篇:stm8s 定时器 延时 心得
推荐阅读
史海拾趣
为了进一步扩大市场覆盖和品牌影响力,福斯特半导体积极寻求战略合作。2023年2月,福斯特半导体与世强先进(深圳)科技股份有限公司签署授权代理协议,借助世强先进在技术分销和互联网推广方面的丰富经验,布局线上和线下功率器件渠道市场。这一合作不仅拓宽了福斯特半导体的产品应用领域,还提升了公司在新能源汽车、储能、照明等市场的知名度。通过世强硬创平台,福斯特半导体的功率MOS和二极管等产品得以快速覆盖目标市场,进一步降低了客户供应链成本。
Elma对产品质量的追求是显而易见的。通过对所有员工的培训以及遵循认证的ISO标准的系统程序,Elma达到了行业领先的质量水平。这种对质量的承诺不仅体现在产品制造过程中,更贯穿于整个公司的运营和管理中。
在Covid-19疫情期间,Elma展现了其应对挑战的能力。公司引入了良好的保护措施,并不断调整和改进以适应疫情带来的变化。同时,Elma还积极响应市场需求,为医疗领域提供了大量旋转开关等关键设备,为欧洲和东南亚的医院做出了重大贡献。此外,公司还为瑞士的客户开发和制造了消毒设备,帮助当地进行疫情防控。
以上5个故事涵盖了Elma Electronic Inc公司在电子行业发展的多个方面,展现了其强大的实力和应对挑战的能力。
在电子行业的激烈竞争中,台湾诚阳(BC)公司凭借其对技术的敏锐洞察和持续创新,成功研发出一款具有颠覆性的电子产品。这款产品不仅具有高性能和稳定性,还集成了多项前沿技术,满足了市场对于高效、便捷的需求。凭借这一创新产品,台湾诚阳迅速在市场中脱颖而出,赢得了众多客户的青睐。
在辰颐电子公司的发展过程中,他们意识到单打独斗很难在市场中取得优势。因此,公司开始注重产业链的整合和协同发展。他们与上游供应商建立了紧密的合作关系,确保原材料的稳定供应和质量保证;与下游客户建立了长期的合作伙伴关系,提供定制化的解决方案和优质的服务。此外,公司还积极参与行业协会和组织的活动,加强与同行业企业的交流与合作,共同推动整个电子行业的发展。
高速模数转换器动态参数的定义和测试 一、动态参数 高速模数转换器(adc)的参数定义和描述如表1所示。 表一、动态参数定义: 二、测试方案中的线路板布局和硬件需求 为合理测试高速adc的动态参数,最好选用制造商预先装配好的电 ...… 查看全部问答∨ |
|
请问做MP4的工程师,你们在做电源管理时,是把充电电路和DC/DC、LDO选用一个电路,还是分开选用好,或者是主芯片中包含有充电电路? 麻烦回复一下,多谢!… 查看全部问答∨ |
|
做项目时用到了STM32和语音芯片WM8974,STM32的I2S接口是标准的1、LRCLK 2、BCLK 3、SD 但WM8974的接口是1、LRCLK 2、BCLK 3、VIN 4、VOUT 如何实现两个芯片的连接?… 查看全部问答∨ |
各位见笑~~~ 问题1、现在的无线路由器一般采用何种无线技术 问题2、类似CISCO、华为、TPLINK、D-LINK等这些厂商的无线路由都用些什么CPU以及CPU上的OS。 这些东西我在网上找了好久,没找着,不知道从哪里去找了,希望知情的大大给些消息,或 ...… 查看全部问答∨ |
用户选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发成本。因此一套含有编辑软件、编译软件、汇编软件、链接软件、调 试软件、工程管理及函数库的集成开发环境(IDE)一般来说是必不可少的,至于嵌入式实时操作系 ...… 查看全部问答∨ |
|
如题,请问STM32F103ZET6的ADC是什么型号的啊 ? 我的课题需要做个fpga 外围需要1M转换速率的12位并行ADC 大家给个建议,给个型号我,谢谢了… 查看全部问答∨ |
用811开发板给的例程下载为什么出现:error flash download failed 'cortex- M3' 用811开发板给的例程下载为什么出现:error flash download failed \'cortex- M3\',用的是ICDI板子上自带的仿真器。 [ 本帖最后由 0212009623 于 2011-5-1 09:52 编辑 ]… 查看全部问答∨ |