我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 667|回复: 1

STM32F103 输入捕获

[复制链接]

该用户从未签到

34

主题

12

回帖

0

积分

二级逆天

积分
0

终身成就奖

发表于 2020-11-27 08:36:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#include "timer.h"
#include "led.h"


//定时器3中断服务程序     
void TIM3_IRQHandler(void)
{                                       
    if(TIM3->SR&0X0001)//溢出中断
    {
        LED1=!LED1;                                                                    
    }                  
    TIM3->SR&=~(1<<0);//清除中断标志位         
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
    RCC->APB1ENR|=1<<1;    //TIM3时钟使能   
     TIM3->ARR=arr;      //设定计数器自动重装值
    TIM3-&gtSC=psc;      //预分频器设置
    TIM3->DIER|=1<<0;   //允许更新中断               
    TIM3->CR1|=0x01;    //使能定时器3
      MY_NVIC_Init(1,3,TIM3_IRQn,2);//抢占1,子优先级3,组2                                    
}
//TIM1_CH1 PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM1_PWM_Init(u16 arr,u16 psc)
{                              
    //此部分需手动修改IO口设置
    RCC->APB2ENR|=1<<11;     //TIM1时钟使能   
    GPIOA->CRH&=0XFFFFFFF0;    //PA8清除之前的设置
    GPIOA->CRH|=0X0000000B;    //复用功能输出
   
    TIM1->ARR=arr;            //设定计数器自动重装值
    TIM1-&gtSC=psc;            //预分频器设置
  
    TIM1->CCMR1|=7<<4;      //CH1 PWM2模式         
    TIM1->CCMR1|=1<<3;         //CH1预装载使能     
     TIM1->CCER|=1<<0;       //OC1 输出使能      
    TIM1->BDTR|=1<<15;       //MOE 主输出使能      

    TIM1->CR1=0x0080;       //ARPE使能
    TIM1->CR1|=0x01;        //使能定时器1                                          
}  
//定时器2通道1输入捕获配置
//arr:自动重装值
//psc:时钟预分频数
void TIM2_Cap_Init(u16 arr,u16 psc)
{         
    RCC->APB1ENR|=1<<0;       //TIM2 时钟使能
    RCC->APB2ENR|=1<<2;        //使能PORTA时钟  
     
    GPIOA->CRL&=0XFFFFFFF0;    //PA0 清除之前设置  
    GPIOA->CRL|=0X00000008;    //PA0 输入   
    GPIOA->ODR|=0<<0;        //PA0 下拉
      
     TIM2->ARR=arr;          //设定计数器自动重装值   
    TIM2-&gtSC=psc;          //预分频器

    TIM2->CCMR1|=1<<0;        //CC1S=01     选择输入端 IC1映射到TI1上
     TIM2->CCMR1|=1<<4;         //IC1F=0001 配置输入滤波器 以Fck_int采样,2个事件后有效
     TIM2->CCMR1|=0<<10;     //IC2PS=00     配置输入分频,不分频

    TIM2->CCER|=0<<1;         //CC1P=0    上升沿捕获
    TIM2->CCER|=1<<0;         //CC1E=1     允许捕获计数器的值到捕获寄存器中

    TIM2->DIER|=1<<1;       //允许捕获中断               
    TIM2->DIER|=1<<0;       //允许更新中断   
    TIM2->CR1|=0x01;        //使能定时器2
    MY_NVIC_Init(2,0,TIM2_IRQn,2);//抢占2,子优先级0,组2      
}

//捕获状态
//[7]:0,没有成功的捕获;1,成功捕获到一次.
//[6]:0,还没捕获到高电平;1,已经捕获到高电平了.
//[5:0]:捕获高电平后溢出的次数
u8  TIM2CH1_CAPTURE_STA=0;    //输入捕获状态                           
u16    TIM2CH1_CAPTURE_VAL;    //输入捕获值
//定时器2中断服务程序     
void TIM2_IRQHandler(void)
{            
    u16 tsr;
    tsr=TIM2->SR;
     if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获   
    {
        if(tsr&0X01)//溢出
        {        
            if(TIM2CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
            {
                if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
                {
                    TIM2CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
                    TIM2CH1_CAPTURE_VAL=0XFFFF;
                }else TIM2CH1_CAPTURE_STA++;
            }     
        }
        if(tsr&0x02)//捕获1发生捕获事件
        {   
            if(TIM2CH1_CAPTURE_STA&0X40)        //捕获到一个下降沿         
            {                  
                TIM2CH1_CAPTURE_STA|=0X80;        //标记成功捕获到一次高电平脉宽
                TIM2CH1_CAPTURE_VAL=TIM2->CCR1;    //获取当前的捕获值.
                 TIM2->CCER&=~(1<<1);            //CC1P=0 设置为上升沿捕获
            }else                                  //还未开始,第一次捕获上升沿
            {
                TIM2CH1_CAPTURE_VAL=0;
                TIM2CH1_CAPTURE_STA=0X40;        //标记捕获到了上升沿
                TIM2->CNT=0;                    //计数器清空
                TIM2->CCER|=1<<1;                 //CC1P=1 设置为下降沿捕获
            }            
        }                                                
     }
    TIM2->SR=0;//清除中断标志位         
}
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-11-7 12:45
  • 签到天数: 135 天

    [LV.7]常住居民III

    6

    主题

    6778

    回帖

    1万

    积分

    三级逆天

    积分
    14290

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2020-11-27 08:58:57 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    公告:服务器刚移机,
    大家请不要下载东西。
    会下载失败


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表