OpenEdv-开源电子网

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

PWM 输入捕获问题求助

[复制链接]

14

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2014-10-27
在线时间
23 小时
发表于 2015-8-10 15:36:19 | 显示全部楼层 |阅读模式
5金钱
原子哥的教程里,pwm输出呼吸灯, 用wk_up做了输入捕获,   我想把pwm的输出PA8,直接用线连到PA0捕获输入TIM2_CH1,   串口打应出高平电的时间,
            想想挺美的
但就实现不了呢?,求大哥帮忙看看

#include "capture.h"
#include "led.h"
#include "sys.h"

void TIM1_PWM_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<11;
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X0000000B;

TIM1->ARR=arr;
TIM1->SC=psc;

TIM1->CCMR1|=7<<4;
TIM1->CCMR1|=1<<3;

TIM1->CCER|=1<<0;
TIM1->BDTR|=1<<15;

TIM1->CR1|=1<<7;
TIM1->CR1|=1<<0;
}

void TIM2_Cap_Init(u16 arr, u16 psc)
{
RCC->APB1ENR|=1<<0; //使能TIM2时钟
RCC->APB2ENR|=1<<2; //使能PORTA时钟

GPIOA->CRL&=0XFFFFFFF0;
GPIOA->CRL|=0X00000008;

TIM2->ARR=arr;
TIM2->SC=psc;

TIM2->CCMR1|=1<<0; //CC1S=01  IC1映射到TI1上
TIM2->CCMR1|=0<<2; //IC1PSC=0  不分频
TIM2->CCMR1|=1<<4; //IC1F=0001  配置输入滤波器,Fsampling=Fck_int N=2两个事件后,产生一个输出跳变

TIM2->CCER|=1<<0; //允许捕获
TIM2->CCER|=0<<1; //上升沿捕获

TIM2->DIER|=1<<0; //使能更新中断
TIM2->DIER|=1<<1; //使能捕获中断

TIM2->CR1|=1<<0; //使能计数器

MY_NVIC_Init(2,2,TIM2_IRQn,2);
}

u8  TIM2CH1_CAPTURE_STA=0;
u16 TIM2CH1_CAPTURE_VAL;

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) //发生捕获中断
{
if(TIM2CH1_CAPTURE_STA&0X40) //捕获到上升沿
{
TIM2CH1_CAPTURE_VAL=TIM2->CCR1;
TIM2CH1_CAPTURE_STA|=0X80; //标记成功捕获一次
TIM2->CCER|=~(1<<1); //设置上升沿捕获
}else
{
TIM2CH1_CAPTURE_VAL=0;
TIM2CH1_CAPTURE_STA|=0X40; //标记上升沿
TIM2->CNT=0;
TIM2->CCER|=1<<1; //设置下降沿捕获
}
}
}
TIM2->SR=0;//清除中断标志位

}


#include "sys.h"
#include "capture.h"
#include "usart.h"
#include "led.h"
#include "delay.h"

extern u8 TIM2CH1_CAPTURE_STA;
extern u16 TIM2CH1_CAPTURE_VAL;

int main(void)
{
u32 temp=0;
Stm32_Clock_Init(9);
uart_init(72,9600);
delay_init(72);
LED_Init();
TIM1_PWM_Init(7199,0);
TIM2_Cap_Init(0XFFFF,72-1);
while(1)
{

if(TIM2CH1_CAPTURE_STA&0X80)
{
temp=TIM2CH1_CAPTURE_STA&0X3F;
temp*=65536;
temp+=TIM2CH1_CAPTURE_VAL;
printf("HIGH:%d us \r\n",temp);
TIM2CH1_CAPTURE_STA=0;
}
}
}



程序和原子哥的是一样的
































最佳答案

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

直接用我们的输入捕获实验,即可测试啊。
问渠哪得清如许 为有源头活水来
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-10 15:36:20 | 显示全部楼层
直接用我们的输入捕获实验,即可测试啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-8-10 20:35:57 | 显示全部楼层
TIM1的 CCR1设置了么    你用示波器看看TIM1有没有PWM输出
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 19:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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