OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3704|回复: 4

STM32 第16章TPAD实验为什么初始化不用使能中断

[复制链接]

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2017-7-25
在线时间
26 小时
发表于 2017-11-1 14:10:26 | 显示全部楼层 |阅读模式
//定时器 2 通道 2 输入捕获配置
void TIM5_CH2_Cap_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef    GPIO_InitStructure;   
        TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
        TIM_ICInitTypeDef    TIM5_ICInitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);     //使能 TIM5 时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //使能 PA 时钟
        //设置 GPIOA.1 为浮空输入
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                         //PA1  端口配置
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                      //速度 50MHz
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;           //浮空输入
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                              //初始化 GPIOA.1

        //初始化 TIM5     
        TIM_TimeBaseStructure.TIM_Period = arr;                                  //设定计数器自动重装值      
        TIM_TimeBaseStructure.TIM_Prescaler =psc;                             //预分频器            
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    //向上计数模式
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);              //根据参数初始化 TIMx
        //初始化 TIM5 通道 2   
        TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2; //选择输入端  IC2 映射到 TI5 上
        TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
        TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   
        TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;    //配置输入分频,不分频   
        TIM5_ICInitStructure.TIM_ICFilter = 0x03;//配置输入滤波器  8 个定时器时钟周期滤波
        TIM_ICInit(TIM5, &TIM5_ICInitStructure);//初始化 I5 IC2

        TIM_Cmd(TIM5,ENABLE );                        //使能定时器 5
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2017-7-25
在线时间
26 小时
 楼主| 发表于 2017-11-1 15:21:21 | 显示全部楼层
没人回答吗,还是说大家都懂,坛主可以帮我解答一下吗
回复 支持 反对

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5136
金钱
5136
注册时间
2014-8-26
在线时间
1316 小时
发表于 2017-11-1 16:30:28 | 显示全部楼层
没有用到中断
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2017-7-25
在线时间
26 小时
 楼主| 发表于 2017-11-6 16:05:19 | 显示全部楼层

用到了啊,
//得到定时器捕获值
//如果超时,则直接返回定时器的计数值.
u16 TPAD_Get_Val(void)
{     
        TPAD_Reset();
        while(TIM_GetITStatus(TIM5, TIM_IT_CC2)== RESET)      //等待溢出
        {
                if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)
                return TIM_GetCounter(TIM5);        //超时了,直接返回 CNT 的值
        };      
        return TIM_GetCapture2(TIM5);      
}   
这个函数不是查询了中断标志吗,说明用了中断啊!                           
回复 支持 反对

使用道具 举报

10

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
486
金钱
486
注册时间
2019-12-6
在线时间
151 小时
发表于 2023-9-7 14:02:51 | 显示全部楼层
非常感 发表于 2017-11-6 16:05
用到了啊,
//得到定时器捕获值
//如果超时,则直接返回定时器的计数值.

这里不是中断,这个是标志位,也就是相应的事件发生了(比如发生了溢出事件),他这个位就是表示事件有没有产生,产生了置一,没有就是0,我们读取它的位就可以知道这个事件有没有发生,
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 18:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表