×
嵌入式 > 技术百科 > 详情

STM8S 定时器1 输入捕获

发布时间:2020-06-15 发布时间:
|
输入捕捉的引脚要实现设定,使用stvp + stlink 就可以设置,否则无法进入中断。

然后下面是代码:

C语言: Codee#11818
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 实验平台: STM8S103F2P6 FM 接收实验核心板 
+ 硬件    : STM8S103F2P6
+ 开发平台: IAR For STM8 1.10
+ 仿真器 : ST-Link
+ 日期   : 2010-6-28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "stm8s.h"

u16 Get_time;

/*******************************************************************************
*                           ==启用外部晶振函数==
*******************************************************************************/
void HSE_CLK_INIT(void)
{
CLK_DeInit(); 
CLK_HSECmd(ENABLE);
while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY));
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
CLK_ClockSwitchCmd(ENABLE); 
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_ENABLE);
}
//==============================================================================
//                    ¤¤¤     定时器1初始化      ¤¤¤ 
//       --> 定时器1 输入捕获通道2 PortC 7 
//   TIM1_DeInit();                                   --> 定时器1 寄存器复位
//   TIM1_ICInit( TIM1_CHANNEL_2, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV8, 0x0);
//                                                    --> 输入捕获CH2 , 下降沿捕获 , 输入捕捉源为直接中断方式 , 输入捕捉预分频 , 输入捕捉滤波器值                                  
//   TIM1_ITConfig( TIM1_IT_CC2 , ENABLE);            --> 开启通道二输入捕获中断使能
//   TIM1_ClearFlag(TIM1_FLAG_CC2);                   --> 清除输入捕获中断标志位
//   TIM1_Cmd(ENABLE);                                --> 使能定时器1
//==============================================================================
void TIME1_INIT(void)
{
   TIM1_DeInit();
   TIM1_ICInit( TIM1_CHANNEL_2, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI ,TIM1_ICPSC_DIV8, 0x0);
   TIM1_ITConfig( TIM1_IT_CC2 , ENABLE); 
   TIM1_ClearFlag(TIM1_FLAG_CC2);
   TIM1_Cmd(ENABLE);
}
/*******************************************************************************
*                           ==Main函数==
*******************************************************************************/
void main(void)
{
HSE_CLK_INIT();      // 外部时钟初始化
TIME1_INIT();        // 定时器1 输入捕获初始化
enableInterrupts(); // 开总中断
while(1);
}
//==============================================================================
//                    ¤¤¤     中断服务函数      ¤¤¤ 
//       -->   定时器1 捕获/比较 中断向量                                   
//==============================================================================
#pragma vector=0xE
__interrupt void TIM1_CAP_COM_IRQHandler(void)

    Get_time = TIM1_GetCapture2(); // 获得捕获时间
    TIM1_ClearFlag(TIM1_FLAG_CC2); // 清标志位
}
 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
分拣机器人的工作原理是什么