历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2021年10月08日 | STM8 定时器Time1使用

发布者:自由思想 来源: eefocus关键字:STM8  定时器  Time1 手机看文章 扫描二维码
随时随地手机看文章

1、定时器概述
STM8S提供三种类型的 TIM 定时器:高级控制型(TIM1)、通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)。它们虽有不同功能但都基于共同的架构。此共同的架构使得采用各个定时器来设计应用变得非常容易与方便(相同的寄存器映射,相同的基本功能)。

2、现在来介绍高级定时器1的配置和应用。


代码如下:
main.c

点击(此处)折叠或打开

  1. /* MAIN.C file

  2.  *

  3.  * Copyright (c) 2002-2005 STMicroelectronics

  4.  */

  5. #include "stm8s.h"

  6. #include "stm8s003f3p.h"

  7. #include "stm8s_conf.h"


  8. void GPIOInit(void);

  9. void Time1_Init(void);


  10. void main(void)

  11. {

  12.     

  13.     CLK_HSECmd(DISABLE); //关闭外部高速振荡器

  14.     CLK_HSICmd(ENABLE);     //启用内部高速时钟

  15.     CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //设置 内部 时钟16M 为主时钟(默认是8分配2MHz)

  16.     GPIOInit();

  17.     Time1_Init();

  18.     while (1){

  19.         

  20.     }

  21. }


  22. void GPIOInit(void)

  23. {

  24.         GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);

  25.         GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);

  26.         

  27. }


  28. void Time1_Init(void)

  29. {

  30.     TIM1_DeInit();                                                                //恢复为默认值

  31.     TIM1_TimeBaseInit(0x0000, TIM1_COUNTERMODE_UP, 0x3e80, 0x00); //不分频16MHz 计数值16000 1ms中断一次

  32.     TIM1_GenerateEvent(TIM1_EVENTSOURCE_UPDATE);    //手册里有说明,不设置的话就不会产生中断

  33.     TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);                //配置更新中断

  34.     TIM1_Cmd(ENABLE);                                                            //使能定时器

  35.     enableInterrupts();                                                        //开启总中断

  36. }

  37.     

  38.     

  39. @far @interrupt void Timer4_interrupt_handler_t(void) //1ms定时中断

  40. {

  41.         static unsigned int count = 0;

  42.         static unsigned char falg = 0;

  43.     

  44.     TIM1_ClearITPendingBit(TIM1_IT_UPDATE); //TIM1_SR = 0,清除中断标志    

  45.         

  46.         if(count<1000){

  47.                 

  48.                 GPIO_WriteHigh(GPIOC, GPIO_PIN_4);    

  49.                 GPIO_WriteLow(GPIOC, GPIO_PIN_3);

  50.         }

  51.         else if(count>=1000)

  52.         {

  53.             

  54.             GPIO_WriteHigh(GPIOC, GPIO_PIN_3);

  55.             GPIO_WriteLow(GPIOC, GPIO_PIN_4);

  56.         }

  57.     

  58.         if(count >=2000)count =0;

  59.         count++;

  60. }



然后还有一个很重要的地方,就是在stm8_interrupt_vector.c中注册中断服务函数。

stm8_interrupt_vector.c

点击(此处)折叠或打开

  1. /*    BASIC INTERRUPT VECTOR TABLE FOR STM8 devices

  2.  *    Copyright (c) 2007 STMicroelectronics

  3.  */


  4. typedef void @far (*interrupt_handler_t)(void);


  5. struct interrupt_vector {

  6.     unsigned char interrupt_instruction;

  7.     interrupt_handler_t interrupt_handler;

  8. };


  9. @far @interrupt void NonHandledInterrupt (void)

  10. {

  11.     /* in order to detect unexpected events during development,

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

  13.     */

  14.     return;

  15. }


  16. extern void _stext(); /* startup routine */

  17. extern @far @interrupt void Timer4_interrupt_handler_t(void);

  18. struct interrupt_vector const _vectab[] = {

  19.     {0x82, (interrupt_handler_t)_stext}, /* reset */

  20.     {0x82, NonHandledInterrupt}, /* trap */

  21.     {0x82, NonHandledInterrupt}, /* TLI */

  22.     {0x82, NonHandledInterrupt}, /* AWU */

  23.     {0x82, NonHandledInterrupt}, /* CLK */

  24.     {0x82, NonHandledInterrupt}, /* EXTI0 Port A */

  25.     {0x82, NonHandledInterrupt}, /* EXTI1 Port B */

  26.     {0x82, NonHandledInterrupt}, /* EXTI2 Port C */

  27.     {0x82, NonHandledInterrupt}, /* EXTI3 Port D */

  28.     {0x82, NonHandledInterrupt}, /* EXTI4 Port E */

  29.     {0x82, NonHandledInterrupt}, /* CAN RX */

  30.     {0x82, NonHandledInterrupt}, /* CAN TX */

  31.     {0x82, NonHandledInterrupt}, /* SPI (End of transfer) */

  32.     {0x82, (interrupt_handler_t)Timer4_interrupt_handler_t}, /* TIM1 update/ overflow/ underflow/trigger/ break */

  33.     {0x82, NonHandledInterrupt}, /* TIM1 capture/ compare */

  34.     {0x82, NonHandledInterrupt}, /* TIM2 update/ overflow */

  35.     {0x82, NonHandledInterrupt}, /* TIM2 capture/ compare */

  36.     {0x82, NonHandledInterrupt}, /* TIM3 update/ overflow */

  37.     {0x82, NonHandledInterrupt}, /* TIM3 capture/ compare */

  38.     {0x82, NonHandledInterrupt}, /* UART1 Tx complete */

  39.     {0x82, NonHandledInterrupt}, /* UART1 Receive register DATA FULL */

  40.     {0x82, NonHandledInterrupt}, /* I2C interrupt */

  41.     {0x82, NonHandledInterrupt}, /* UART2/3 Tx complete */

  42.     {0x82, NonHandledInterrupt}, /* UART2/3 Receive register DATA FULL */

  43.     {0x82, NonHandledInterrupt}, /* ADC1 end of conversion/ analog watchdog interrupt */

  44.     {0x82, NonHandledInterrupt}, /* TIM4 update/ overflow */

  45.     {0x82, NonHandledInterrupt}, /* Flash EOP/WR_PG_DIS */

  46.     {0x82, NonHandledInterrupt}, /* irq25 */

  47.     {0x82, NonHandledInterrupt}, /* irq26 */

  48.     {0x82, NonHandledInterrupt}, /* irq27 */

  49.     {0x82, NonHandledInterrupt}, /* irq28 */

  50.     {0x82, NonHandledInterrupt}, /* irq29 */

  51. };


通过上述的简单设置就可以使用高级定时器1了。

现象是一个LED以1s的间隔在亮灭间转换。


关键字:STM8  定时器  Time1 引用地址:STM8 定时器Time1使用

上一篇:STM8S CPU主时钟
下一篇:stm8s 定时器 延时 心得

推荐阅读

         近日,有朋友向我咨询一个问题:能不能推荐一些1000元左右、适合送给老妈的智能手机?我想了一下还真是,国庆节是祖国的节日、也是人们一年中除春节之外最长的假期,在外面的都会回家一趟见见爸妈,然后送个手机给爸妈,挺好的!个人推荐:适合送给长辈的千元手机大汇总!_新浪众测        于是就罗列了一些看上去比较适合长辈...
本文旨在帮助指导系统设计人员了解不同类型的电气过载(EOS)及其对系统的影响。虽然本文针对系统中产生的特定类型电应力,但是这些信息也适用于各种场景。 这个问题很重要,因为如果不加以适当保护,即使是最好的电路也会性能下降,或因电气过载受损。 何谓EOS? EOS是一个通用术语,表示因为过多的电子通过相应路径试图进入电路,导致系统承受过大压力。有...
据发那科官网信息显示,发那科创始人稻叶清右卫门于2020年10月2日(星期五)逝世,享年95岁。稻叶清右卫门,1925年3月出生于日本茨城县,1946年毕业于东京大学第二工学部精密工学科,后进入富士通,1972年创办发那科,带领公司成为世界最大的数控系统制造商。图片来源:OFweek维科网上世纪70年代后期,日本机床工业大发展,一家传奇公司功不可没——发那科...
在STM 32 的串口实验中,往往需要把内容打印输出在串口调试助手中,这时就需要重定向c库中的printf()函数,重定向后可使用。注意下面的FILE的定义在头文件stdio.h中,所以在写程序时需要包含此头文件。例:int fputc(int ch,FILE *f){ USART_SendData(USART_TypeDef* USARTx, uint8_t Data); //发送一个字节数到串口 while(USART_Ge...

史海拾趣

问答坊 | AI 解惑

高速模数转换器动态参数的定义和测试

高速模数转换器动态参数的定义和测试 一、动态参数 高速模数转换器(adc)的参数定义和描述如表1所示。  表一、动态参数定义: 二、测试方案中的线路板布局和硬件需求 为合理测试高速adc的动态参数,最好选用制造商预先装配好的电 ...…

查看全部问答∨

求毕业设计——基于单片机的(DS18B20)温度自动控制系统

急啊。16号就要交初稿了。麻烦各位XDJM帮帮忙。…

查看全部问答∨

有没有做MP4的,请教下问题

请问做MP4的工程师,你们在做电源管理时,是把充电电路和DC/DC、LDO选用一个电路,还是分开选用好,或者是主芯片中包含有充电电路? 麻烦回复一下,多谢!…

查看全部问答∨

求助用过美信MAX5231的大侠

希望大家能给我提供一个简单的MAX5231D/A转换程序,最好是C语言的,谢谢。…

查看全部问答∨

如何连接3线I2S和4线I2S?

做项目时用到了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。 这些东西我在网上找了好久,没找着,不知道从哪里去找了,希望知情的大大给些消息,或 ...…

查看全部问答∨

求助:时间等待函数

我在evc下编程,想在do{}while()函数中用一个时间函数等待一段时间,但在此函数执行期间又不影响别的线程的执行。 所以sleep函数看来是不行了,不知道那位高手知道这种函数?还请帮忙指点一下。谢谢!…

查看全部问答∨

ARM开发的调试方法概述

用户选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发成本。因此一套含有编辑软件、编译软件、汇编软件、链接软件、调 试软件、工程管理及函数库的集成开发环境(IDE)一般来说是必不可少的,至于嵌入式实时操作系 ...…

查看全部问答∨

关于stm32F103ZET6的ADC

如题,请问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 编辑 ]…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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