STM8库函数开发手册(2) //中断、定时器4

第一部分 中断控制器库 itc.c

STM8库函数开发手册(2) //中断、定时器4_第1张图片

1.ITC_GetCPUCC() //读取CC寄存器

STM8库函数开发手册(2) //中断、定时器4_第2张图片
        u8 u8_value;
u8_value = ITC_GetCPUCC();
      

2.ITC_DeInit() //恢复ITC相关寄存器到默认值

STM8库函数开发手册(2) //中断、定时器4_第3张图片


3. ITC_GetSoftIntStatus() //返回CC寄存器中的软件中断优先级位(I1,I0)的值

STM8库函数开发手册(2) //中断、定时器4_第4张图片
        u8 u8_value;
u8_value = ITC_GetSoftIntStatus();
      

4. ITC_SetSoftwarePriority(IrqNum,PriorityValue)

//设置指定中断源的软件优先级

STM8库函数开发手册(2) //中断、定时器4_第5张图片

其中IrqNum中断源定义:

STM8库函数开发手册(2) //中断、定时器4_第6张图片

其中PriorityValue定义:

v2-9b2b6ade900cfcfceb6e456a3cf9dac2_b.jpg

5、ITC_GetSoftwarePriority(IrqNum)

STM8库函数开发手册(2) //中断、定时器4_第7张图片

STM8库函数开发手册(2) //中断、定时器4_第8张图片

第二部分 外部中断管理

STM8库函数开发手册(2) //中断、定时器4_第9张图片
  1. EXTI_DeInit() //恢复默认值

STM8库函数开发手册(2) //中断、定时器4_第10张图片

2. EXTI_SetExtIntSensitivity(Port,SensitivityValue)

//设置指定端口的外部中断触发方式

STM8库函数开发手册(2) //中断、定时器4_第11张图片

其中SensitivityValue:

STM8库函数开发手册(2) //中断、定时器4_第12张图片
        EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA, EXTI_SENSITIVITY_RISE_FALL);
      

3.EXTI_SetTLISensitivity(SensitivityValue)

//设置高级中断触发方式

STM8库函数开发手册(2) //中断、定时器4_第13张图片

其中SensitivityValue:

STM8库函数开发手册(2) //中断、定时器4_第14张图片

4.EXTI_GetExtIntSensitivity(Port) //获取指定端口的外部中断触发方式

STM8库函数开发手册(2) //中断、定时器4_第15张图片

STM8库函数开发手册(2) //中断、定时器4_第16张图片
        EXTI_Sensitivity_TypeDef sensitivity;
sensitivity = EXTI_GetExtIntSensitivity(EXTI_PORT_GPIOA);
      

5.EXTI_GetTLISensitivity() //获取高级中断触发方式

STM8库函数开发手册(2) //中断、定时器4_第17张图片

STM8库函数开发手册(2) //中断、定时器4_第18张图片

第三部分,中断及中断服务函数该怎么写?

1、初始化中断

配置中断触发方式及软件优先级

        GPIO_Init(K1_PORT, K1_PIN, GPIO_MODE_IN_FL_IT);//初始化K1键盘管脚为浮动输入有中断功能
EXTI_SetExtIntSensitivity(K1_EXTI_PORT, EXTI_SENSITIVITY_FALL_ONLY);//配置中断触发方式为仅下降沿触发
ITC_SetSoftwarePriority(ITC_IRQ_PORTE,ITC_PRIORITYLEVEL_2 );//配置软件优先级为 2 
      

2、建立中断服务函数

中断和中断处理子程序建立关系必须在stm8s_it.c 文件中对应位置中建立。

首先在stm8s_it.c要#include "pbdata.h"

比如:键盘K1 物理连接到PE4 管脚,所以中断处理子程序入口地址必须放在PE 端

口中断处理中,在stm8s_it.c 中对应的中断服务函数中添加处理函数引用即可。

        INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7) //PE 端口的中断处理入口
{
    KEY_Demo();//调用键盘检测函数
}
      

3、main函数中中断使能

        
          rim
          ();
          //总中断使能

          
          sim
          ();
          //
          总中断禁止
        
      

第四部分 TIM4库函数

STM8S 提供三种类型的TIM 定时器: 高级控制型(TIM1) 、通用型

(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)

 TIM1 —16 位高级控制定时器

 TIM2,TIM3 —16 位通用定时器

 TIM4 —8 位基本定时器

STM8库函数开发手册(2) //中断、定时器4_第19张图片

STM8库函数开发手册(2) //中断、定时器4_第20张图片

1.TIM4_DeInit() //恢复TIM4寄存器到默认值

STM8库函数开发手册(2) //中断、定时器4_第21张图片

2.TIM4_TimeBaseInit(TIM4_Prescaler,TIM4_Period) //初始化TIM4时基单元

STM8库函数开发手册(2) //中断、定时器4_第22张图片

STM8库函数开发手册(2) //中断、定时器4_第23张图片

3. TIM4_Cmd(NewState) //启用或者关闭定时器4

STM8库函数开发手册(2) //中断、定时器4_第24张图片

NewState:状态(DISABLE或者ENABLE)

4.TIM4_ITConfig(TIM4_IT,NewState) //中断配置

STM8库函数开发手册(2) //中断、定时器4_第25张图片

其中TIM4_IT:只能传入TIM4_IT_UPDATE

        
          TIM4_ITConfig
          (
          TIM4_IT_UPDATE
          ,
          ENABLE
          );
        
      

5. TIM4_UpdateDisableConfig(NewState) //允许或者禁止更新事件

STM8库函数开发手册(2) //中断、定时器4_第26张图片

6. TIM4_UpdateRequestConfig(TIM4_UpdateSource) //选择更新请求源

STM8库函数开发手册(2) //中断、定时器4_第27张图片

v2-abf1d8608fcadaed242163efeffac331_b.png

7. TIM4_SelectOnePulseMode(TIM4_OPMode)

//设置单脉冲模式(TIM4_CR1_OPM)

STM8库函数开发手册(2) //中断、定时器4_第28张图片

v2-60d265072e1d4f28ab2ac14e5aeb22da_b.png

8.TIM4_PrescalerConfig(Prescaler,TIM4_PSCReloadMode)

//设置TIM4预分频值

STM8库函数开发手册(2) //中断、定时器4_第29张图片

STM8库函数开发手册(2) //中断、定时器4_第30张图片

v2-a3f832113eaf1612b0e4bc622faf8cde_b.png

9.TIM4_ARRPreloadConfig(NewState) //自动预装载允许位(TIM4_CR1_ARPE)

STM8库函数开发手册(2) //中断、定时器4_第31张图片

10. TIM4_GenerateEvent(TIM4_EventSource)

//由软件产生一个事件(TIM4->EGR)

STM8库函数开发手册(2) //中断、定时器4_第32张图片

TIM4_EventSource只能选择更新事件:TIM4_EVENTSOURCE_UPDATE

        TIM4_GenerateEvent(TIM4_EVENTSOURCE_UPDATE);
      

11.TIM4_SetCounter(u8 Counter) //设置TIM4计数器寄存器的值(TIM4->CNTR)

STM8库函数开发手册(2) //中断、定时器4_第33张图片

12. TIM4_SetAutoreload(u8 Autoreload)

//设置TIM4自动重载寄存器的值(TIM4->ARR)

STM8库函数开发手册(2) //中断、定时器4_第34张图片

13. TIM4_GetCounter() //获取TIM4计数器的值

STM8库函数开发手册(2) //中断、定时器4_第35张图片

14. TIM4_GetPrescaler() //获取TIM4预分频值

STM8库函数开发手册(2) //中断、定时器4_第36张图片

15.TIM4_GetFlagStatus(TIM4_FLAG) //返回指定标志位置位状态

STM8库函数开发手册(2) //中断、定时器4_第37张图片

TIM4_FLAG可选值:

TIM4_FLAG_UPDATE 更新标志位

16. TIM4_ClearFlag(TIM4_FLAG) //清除指定标志位

STM8库函数开发手册(2) //中断、定时器4_第38张图片

TIM4_FLAG可选值:

TIM4_FLAG_UPDATE 更新标志位

17. TIM4_GetITStatus(TIM4_IT_TypeDef TIM4_IT)

//检测指定中断标志位置位状态

STM8库函数开发手册(2) //中断、定时器4_第39张图片

其中TIM4_IT:只能传入TIM4_IT_UPDATE

18. TIM4_ClearITPendingBit(TIM4_IT) //清除指定中断标志

STM8库函数开发手册(2) //中断、定时器4_第40张图片

其中TIM4_IT:只能传入TIM4_IT_UPDATE


第五部分 如何使用TIM4

1.先初始化

        void TIM4_Init(void)
{
    TIM4_TimeBaseInit(TIM4_PRESCALER_16,100);//初始化定时器4
    TIM4_ARRPreloadConfig(ENABLE);//使能自动重装
    TIM4_ITConfig(TIM4_IT_UPDATE , ENABLE);//数据更新中断
    TIM4_Cmd(ENABLE);//开定时器
} 
      

2.创建一个计数变量,和递减函数

        void Tim4_Upd(void)   //TIM4每次中断调用此函数更新计数参数
{
    if(Tim4_Upd_n!=0)
    {
        Tim4_Upd_n--;
    }
}
      

3.在写中断服务函数

写中断服务函数要注意:一定要清标志位!!

STM8库函数开发手册(2) //中断、定时器4_第41张图片
         INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
 {
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
   Tim4_Upd();  
   TIM4_ClearITPendingBit(TIM4_IT_UPDATE);//清除更新标志位
 }
      

附:TIM4 16Mhz下 16分频实现精确1ms函数

        void TIM4_ms(u32 nTime)
{
    Tim4_Upd_n=nTime*10;//输入参数扩大10 
    while(Tim4_Upd_n!=0);//延时等待  当Tim4_Upd_n=0时退出while循环
}
      

写完这些函数 我们就可以通过定时器来实现精确的时间的事件控制了。TIM4 是一个很弱的定时器,使用过程中请大家注意:预装载值不要选择太小,最好的取值范围是50~255

你可能感兴趣的:(STM8库函数开发手册(2) //中断、定时器4)