找回密码
 立即注册
楼主: yanwei0433

PWM捕获问题

[复制链接]

3

主题

14

回帖

71

积分

注册会员

积分
71
发表于 2022-12-15 13:30:09 | 显示全部楼层
本帖最后由 yanwei0433 于 2022-12-15 13:54 编辑

这是我单独弄的pwm捕捉测试  时钟24m 波特率9600,加了让PWM中断处理完才能再处理的标志 得到的计数器值为负数


分频之后就不是负数了 和测试的一样了

main.t3.txt="-10868"\xFF\xFF\xFF
main.t5.txt="-17088"\xFF\xFF\xFF

#include <STC32G.H>
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#include <UART.h>

unsigned int cnt1,cnt2,a,b;


//====================  主函数  ===========================
void main()
{
        
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口

  
                PWMA_CCER1=0x00;
                PWMA_CCMR1=0x01;    //CC1为输入模式,且映射到TI1FP1上
                PWMA_CCMR2=0x02;    //CC2为输入模式,且映射到TI1FP2上
                PWMA_CCER1=0x11;    //使能CC1/CC2上的捕获功能
                PWMA_CCER1|=0x00;   //设置捕获极性为CC1的上升沿
                PWMA_CCER1|=0x20;   //设置捕获极性为CC2的下降沿
                PWMA_SMCR=0x54;     //TS=TI1FP1,SMS=TI1上升沿复位模式
                PWMA_CR1=0x01;      //开启计数器
                PWMA_IER=0x06;                        //使能CC1/CC2捕获中断        
                UART_Init();
    EA = 1;                 //打开总中断

               
    while(1);
}

void PWMA_ISR() interrupt 26    //PWM中断 P10脚
{

        if (PWMA_SR1 & 0x02)
        {
               
                if(a==0)
                {
                a=1;
                PWMA_SR1 &= ~0x02;
                cnt1=(PWMA_CCR1H<<8)+PWMA_CCR1L;  //CC1捕捉周期
                printf("main.t3.txt=\"%d\"",cnt1);
                UART_Send_END();
                a=0;
                }
        }
        if (PWMA_SR1 & 0x04)
        {
        
                if(b==0)
                {
                b=1;
                PWMA_SR1 &= ~0x04;
                cnt2=(PWMA_CCR2H<<8)+PWMA_CCR2L;                //CC2捕捉占空比
                printf("main.t5.txt=\"%d\"",cnt2);
                UART_Send_END();
                b=0;
                }
        }
}

void XQD() interrupt 4
{

        if(TI)                                                         //TI=1,判断是否发送完成
        {
                        TI = 0;                //软件清零发送中断标志位TI
        }
}

微信截图_20221215132917.png
  • 打卡等级:以坛为家II
  • 打卡总天数:515
  • 最近打卡:2025-05-03 05:51:43

24

主题

515

回帖

994

积分

荣誉版主

积分
994
发表于 2022-12-15 14:36:17 | 显示全部楼层
24M频率,65536计数最大为2,x ms,200HZ5ms已经溢出2次了。
  • 打卡等级:以坛为家II
  • 打卡总天数:515
  • 最近打卡:2025-05-03 05:51:43

24

主题

515

回帖

994

积分

荣誉版主

积分
994
发表于 2022-12-15 15:22:51 | 显示全部楼层
楼主可以将频率设为6mhz,,再捕获200HZ的频率。

完善代码,可以TIM1-> IER = 0x07;  // 使能CC1/CC2捕获中断, 更新中断

在中断函数增加 if(TIM1->SR1 & 0X01)        //清更新中断标记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:01 , Processed in 0.109142 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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