1.ITC_GetCPUCC() //读取CC寄存器
u8 u8_value;
u8_value = ITC_GetCPUCC();
2.ITC_DeInit() //恢复ITC相关寄存器到默认值
3. ITC_GetSoftIntStatus() //返回CC寄存器中的软件中断优先级位(I1,I0)的值
u8 u8_value;
u8_value = ITC_GetSoftIntStatus();
4. ITC_SetSoftwarePriority(IrqNum,PriorityValue)
//设置指定中断源的软件优先级
其中IrqNum中断源定义:
其中PriorityValue定义:
5、ITC_GetSoftwarePriority(IrqNum)
2. EXTI_SetExtIntSensitivity(Port,SensitivityValue)
//设置指定端口的外部中断触发方式
其中SensitivityValue:
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA, EXTI_SENSITIVITY_RISE_FALL);
3.EXTI_SetTLISensitivity(SensitivityValue)
//设置高级中断触发方式
其中SensitivityValue:
4.EXTI_GetExtIntSensitivity(Port) //获取指定端口的外部中断触发方式
EXTI_Sensitivity_TypeDef sensitivity;
sensitivity = EXTI_GetExtIntSensitivity(EXTI_PORT_GPIOA);
5.EXTI_GetTLISensitivity() //获取高级中断触发方式
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
();
//
总中断禁止
STM8S 提供三种类型的TIM 定时器: 高级控制型(TIM1) 、通用型
(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)
TIM1 —16 位高级控制定时器
TIM2,TIM3 —16 位通用定时器
TIM4 —8 位基本定时器
1.TIM4_DeInit() //恢复TIM4寄存器到默认值
2.TIM4_TimeBaseInit(TIM4_Prescaler,TIM4_Period) //初始化TIM4时基单元
3. TIM4_Cmd(NewState) //启用或者关闭定时器4
NewState:状态(DISABLE或者ENABLE)
4.TIM4_ITConfig(TIM4_IT,NewState) //中断配置
其中TIM4_IT:只能传入TIM4_IT_UPDATE
TIM4_ITConfig
(
TIM4_IT_UPDATE
,
ENABLE
);
5. TIM4_UpdateDisableConfig(NewState) //允许或者禁止更新事件
6. TIM4_UpdateRequestConfig(TIM4_UpdateSource) //选择更新请求源
7. TIM4_SelectOnePulseMode(TIM4_OPMode)
//设置单脉冲模式(TIM4_CR1_OPM)
8.TIM4_PrescalerConfig(Prescaler,TIM4_PSCReloadMode)
//设置TIM4预分频值
9.TIM4_ARRPreloadConfig(NewState) //自动预装载允许位(TIM4_CR1_ARPE)
10. TIM4_GenerateEvent(TIM4_EventSource)
//由软件产生一个事件(TIM4->EGR)
TIM4_EventSource只能选择更新事件:TIM4_EVENTSOURCE_UPDATE
TIM4_GenerateEvent(TIM4_EVENTSOURCE_UPDATE);
11.TIM4_SetCounter(u8 Counter) //设置TIM4计数器寄存器的值(TIM4->CNTR)
12. TIM4_SetAutoreload(u8 Autoreload)
//设置TIM4自动重载寄存器的值(TIM4->ARR)
13. TIM4_GetCounter() //获取TIM4计数器的值
14. TIM4_GetPrescaler() //获取TIM4预分频值
15.TIM4_GetFlagStatus(TIM4_FLAG) //返回指定标志位置位状态
TIM4_FLAG可选值:
TIM4_FLAG_UPDATE 更新标志位
16. TIM4_ClearFlag(TIM4_FLAG) //清除指定标志位
TIM4_FLAG可选值:
TIM4_FLAG_UPDATE 更新标志位
17. TIM4_GetITStatus(TIM4_IT_TypeDef TIM4_IT)
//检测指定中断标志位置位状态
其中TIM4_IT:只能传入TIM4_IT_UPDATE
18. TIM4_ClearITPendingBit(TIM4_IT) //清除指定中断标志
其中TIM4_IT:只能传入TIM4_IT_UPDATE
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.在写中断服务函数
写中断服务函数要注意:一定要清标志位!!
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