OpenEdv-开源电子网

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

改了输入捕获例程的端口,但是输出的数据全都是0

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-10-4
在线时间
0 小时
发表于 2022-9-14 16:41:13 | 显示全部楼层 |阅读模式
1金钱
#include "time.h"

void TIM14_PWM_Init(u32 arr,u32 psc)
{
        GPIO_InitTypeDef         GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef        TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);          //TIM14时钟使能   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
       
    GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GPIOF9复用位定时器14
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIOA9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
        GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化PF9
       
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);
       
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
        TIM_OCInitStructure.TIM_Pulse=0;
       
        TIM_OC1Init(TIM14, &TIM_OCInitStructure);
       
        TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
        TIM_ARRPreloadConfig(TIM14,ENABLE);
       
        TIM_Cmd(TIM14, ENABLE);  //使能TIM14
       
}
void TIM5_CH1_Cap_Init(u32 arr,u16 psc)
{
        GPIO_InitTypeDef         GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_ICInitTypeDef       TIM_ICInitStruct;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);          //TIM14时钟使能   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //GPIOA0
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
        GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0

        GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM3);
       
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
       
        TIM_ICInitStruct.TIM_Channel=TIM_Channel_2;
        TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
        TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
        TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
        TIM_ICInitStruct.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
    TIM_ICInit(TIM3, &TIM_ICInitStruct);
       
        TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC2,ENABLE);//允许更新中断 ,允许CC1IE捕获中断

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


        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、
}

u8  TIM5CH1_CAPTURE_STA=0;//输入捕获状态
u32 TIM5CH1_CAPTURE_VAL;

void TIM3_IRQHandler(void)
{
        if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获       
        {
                if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)//溢出
                {
                        if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
                                {
                                        if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
                                        {
                                                TIM5CH1_CAPTURE_STA|=0X80;                //标记成功捕获了一次
                                                TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;
                                        }else TIM5CH1_CAPTURE_STA++;
                                }         
                }
                if(TIM_GetITStatus(TIM3,TIM_IT_CC2)!=RESET)//捕获1发生捕获事件
                {
                        if(TIM5CH1_CAPTURE_STA&0X40)//捕获到一个下降沿
                        {
                                TIM5CH1_CAPTURE_STA|=0x80;
                                TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM3);//捕获当前的捕获值
                                TIM_OC2PolarityConfig(TIM3,TIM_ICPolarity_Rising);//CC1P 设置为上升沿捕获
                        }
                        else        //第一次捕获高电平
                        {
                               
                                        TIM5CH1_CAPTURE_STA=0;                        //清空
                                        TIM5CH1_CAPTURE_VAL=0;
                                        TIM5CH1_CAPTURE_STA|=0X40;                //标记捕获到了上升沿
                                        TIM_Cmd(TIM3,DISABLE );         //关闭定时器5
                                        TIM_SetCounter(TIM3,0);
                                        TIM_OC2PolarityConfig(TIM3,TIM_ICPolarity_Falling);                //CC1P=1 设置为下降沿捕获
                                        TIM_Cmd(TIM3,ENABLE );         //使能定时器5
                        }
                }
        }
        TIM_ClearITPendingBit(TIM3, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
}

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

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10560
金钱
10560
注册时间
2017-2-18
在线时间
1911 小时
发表于 2022-9-14 21:55:14 | 显示全部楼层
没有看出代码有啥配置的错误,贴一下板子PWM输出与输入捕获的连线图,看下是否连错了
回复

使用道具 举报

17

主题

161

帖子

0

精华

高级会员

Rank: 4

积分
955
金钱
955
注册时间
2022-7-21
在线时间
446 小时
发表于 2022-9-15 17:41:34 | 显示全部楼层
改了引脚之后输入引脚有接上信号源吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 05:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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