OpenEdv-开源电子网

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

输入捕获实验,没有实验现象

[复制链接]

40

主题

137

帖子

0

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2019-8-4
在线时间
187 小时
发表于 2019-10-16 08:59:46 | 显示全部楼层 |阅读模式
5金钱
仿写捕获实验,本实验利用TIM5_CH1来做输入捕获,捕获PA0上的高电平脉宽,预期的实验现象是将脉宽时间通过串        口打印出来,可以通过按WK_UP按键,模拟输入高电平。

捕获程序如下#include "timer.h"
#include "led.h"
#include "usart.h"
void TIM5_Cap_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        TIM_ICInitTypeDef TIM_ICInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;       
        GPIO_Init(GPIOE,&GPIO_InitStructure);
        GPIO_ResetBits(GPIOE,GPIO_Pin_5);//按键下拉输入
       
        NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);

    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseInitStructure.TIM_Period=arr;
        TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);
       
        TIM_ICInitStructure.TIM_Channel=TIM_Channel_1;
        TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;
        TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;
    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         
        TIM_ICInitStructure.TIM_ICFilter=0x00;
        TIM_ICInit(TIM5,&TIM_ICInitStructure);
       
        TIM_Cmd(TIM5,ENABLE);
        TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);
}
   u8 TIM5_STA=0;//第七位为1完成高电平捕获,即按键按下的时间,第六位为0,按键刚刚按下,低5为为定时器溢出的次数
        u16 TIM5_VAL=0;//高电平计时

void TIM5_IRQHandler()
{
       
        if((TIM5_STA&0x80)==0)//还未捕获高电平
        {
                if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)
                {       
                       
                        if(TIM5_STA&0x40)//按键已经按下
                        {
                                if((TIM5_STA&0x3F)==0x3F)
                                {
                                        TIM5_STA|=0x80;
                                        TIM5_VAL=0XFFFF;
                                }else TIM5_STA++;
                        }
                }
                if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=RESET)
                {
                        if(TIM5_STA&0x40)
                        {
                                TIM5_STA|=0x80;
                                TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);
                                TIM5_VAL=TIM_GetCapture1(TIM5);
                        }
                        else
                        {
                                TIM5_STA=0;
                                TIM5_VAL=0;
                                TIM5_STA|=0x40;
                                TIM_SetCounter(TIM5,0);
                                TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//按键刚刚按下,改为下降沿捕获
                        }
                }
        }
        TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1);
}
主函数如下

extern u8  TIM5_STA;                //输入捕获状态
extern u16 TIM5_VAL;        //输入捕获值
int main(void)
{
    u32 temp=0;
    delay_init();                     //延时函数初始化
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(115200);         //串口初始化为115200

    TIM5_Cap_Init(0XFFFF,72-1);        //以1Mhz的频率计数 ,arr=2^16=65536
    while(1)
    {
        delay_ms(10);
        if(TIM5_STA&0X80)//成功捕获到了一次上升沿
        {
            temp=TIM5_STA&0X3F;
            temp*=65536;//溢出时间总和
            temp=(temp+TIM5_VAL)/1000000;//得到总的高电平时间
            printf("HIGH:%d s\r\n",temp);//打印总的高点平时间
            TIM5_STA=0;//开启下一次捕获
        }
    }
}

没有任何实验现象,哪里错了
                       



                               
                       
                               
                       
               

最佳答案

查看完整内容[请看2#楼]

不好意思,我复制代码错了,我的是设置PA0下拉输入,不是这个的原因 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_setBits(GPIOA,GPIO_Pin_0);//按键下拉输入
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

40

主题

137

帖子

0

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2019-8-4
在线时间
187 小时
 楼主| 发表于 2019-10-16 08:59:47 | 显示全部楼层
不好意思,我复制代码错了,我的是设置PA0下拉输入,不是这个的原因
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;        
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_setBits(GPIOA,GPIO_Pin_0);//按键下拉输入
回复

使用道具 举报

6

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-7-25
在线时间
57 小时
发表于 2019-10-17 14:41:38 | 显示全部楼层
WK_UP是PA0,TIM5_CH1也是PA0,但是不知你设置PE5复用推挽输出是在做什么。
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;        
GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);//按键下拉输入
----------------肉粒多真好吃呀
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
922
金钱
922
注册时间
2018-7-18
在线时间
385 小时
发表于 2019-10-17 19:07:09 | 显示全部楼层
这个配置的PE5没什么用   你应该用根线把PE5连到PA0上就行了   不用配置PE5的!
回复

使用道具 举报

18

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2019-6-4
在线时间
75 小时
发表于 2019-10-18 16:51:55 | 显示全部楼层
你去查看一下芯片资料,PE5没有定时器通道
回复

使用道具 举报

40

主题

137

帖子

0

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2019-8-4
在线时间
187 小时
 楼主| 发表于 2019-10-20 08:06:49 | 显示全部楼层
我发现程序进入不了捕获中断,根据例程设置的是PA0下拉输入
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-6 20:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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