本帖最后由 toofree 于 2019-2-26 02:32 编辑 8 V2 I2 Y8 N2 J1 [8 J! t / {- c$ A& T( q, a5 E5 R 【STM8-SO8-DISCO】——6、TIM4时基测试 " E6 W3 \, ^7 e/ D$ w: h定时器的时基用法,是定时器的最基本功能。* k2 n5 w: Q1 x* f& ]1 L% I 本实验基于样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\TIM4\TIM4_TimeBase”,复制全部文件。 ' V) V: K+ P9 k8 | 将之前创建的工程模板改名为“STM8S_StdPeriph_TIM4_TimeBase”,将上一步复制的5个文件,粘贴到本文件夹下。! N, d2 O$ Q/ m- \ ! I* o* o8 ]3 {! x% N 添加宏定义按键和LED1。(已删除不必要的头文件包含。注意,TIM4_PERIOD的宏定义在之后会用到) & E' Y0 d. d2 z# O 主程序中,初始化时钟、IO、定时器。在主循环中,按键B1按键时,LD1常亮;当B1没按下时,LD1翻转闪灯;通过时基延时100mS。 : ~& @# N$ u! l 从用户参考手册中得到,上电默认为HSI时钟8分频,即2MHz。 0 y3 A) x! a' p4 |( D5 v% e 通过“CLK_Config()”函数,将系统时钟设置为16MHz。 “TIM4_Config()”函数,实现TIM4初始化。16MHz首先通过定时器预分频128,得到计时时钟125KHz;设置定时器循环周期为125,即寄存器TIM4->ARR设置为124;并使能开启TIM4中断。2 s5 K* j+ W. ~! W- T TIM4_TimeBaseInit()函数原型在“stm8s_tim4.c”文件中。 初始化按键B1、LD1;延时函数实现。 4 f" R: p1 B: v4 o# v 定时器4中断服务函数中,执行TimingDelay_Decrement()使用延时变量TimingDelay自减,并清除中断位。 ' W9 {* Q5 A1 L) q2 v0 Y 编译,下载程序,并全速运行。 实验现象为,按键B1按键时,LD1常亮;当B1没按下时,LD1翻转闪灯。 用逻辑分析仪抓取LD1时序,频率为5Hz,与预期一致。 ! | Q9 A4 T' B) Z" {& { 本贴测试工程附上:8 u8 q" p; h! X4 e3 f9 A7 x6 G" _) t |