单片机
返回首页

STM8S——8位基本定时器(TIM4)

2019-12-27 来源:eefocus

简介:该定时器由一个带可编程预分频器的8位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。


主要功能:


(1)8位向上计数的自动重载计数器;


(2)3位可编程的预分配器(可在运行中修改),提供1、2、4、8、16、32、64、128这8种分频比例;


(3)中断产生:更新中断(溢出,计数器初始化)。


代码实现:


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

 2 #include 'stm8s.h'

 3 

 4 /* Private define ------------------------------------------------------------*/

 5 #define TIM4_PERIOD       124

 6 /* Private variables ---------------------------------------------------------*/

 7 __IO uint32_t TimingDelay = 0;

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

 9 void Delay(__IO uint32_t nTime);

10 void TimingDelay_Decrement(void);

11 static void TIM4_Config(void);

12 

13 /**

14   * @brief  Main program.

15   * @param  None

16   * @retval None

17   */

18 void main(void)

19 {

20   /* TIM4 configuration -----------------------------------------*/

21   TIM4_Config();    

22   

23   /* Insert 50 ms delay */

24   Delay(50);

25   }

26 }

27 

28 /**

29   * @brief  Configure TIM4 to generate an update interrupt each 1ms 

30   * @param  None

31   * @retval None

32   */

33 static void TIM4_Config(void)

34 {

35   /* TIM4 configuration:

36    - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter

37    clock used is 16 MHz / 128 = 125 000 Hz

38   - With 125 000 Hz we can generate time base:

39       max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms

40       min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms

41   - In this example we need to generate a time base equal to 1 ms

42    so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */

43 

44   /* Time base configuration */

45   TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);

46   /* Clear TIM4 update flag */

47   TIM4_ClearFlag(TIM4_FLAG_UPDATE);

48   /* Enable update interrupt */

49   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);

50   

51   /* enable interrupts */

52   enableInterrupts();

53 

54   /* Enable TIM4 */

55   TIM4_Cmd(ENABLE);

56 }

57 

58 

59 /**

60   * @brief  Inserts a delay time.

61   * @param  nTime: specifies the delay time length, in milliseconds.

62   * @retval None

63   */

64 void Delay(__IO uint32_t nTime)

65 {

66   TimingDelay = nTime;

67 

68   while (TimingDelay != 0);

69 }

70 

71 /**

72   * @brief  Decrements the TimingDelay variable.

73   * @param  None

74   * @retval None

75   */

76 void TimingDelay_Decrement(void)

77 {

78   if (TimingDelay != 0x00)

79   {

80     TimingDelay--;

81   }

82 }


TIM4


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章