yanwei0433 发表于 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
      }
}

社区闲人 发表于 2022-12-15 14:36:17

24M频率,65536计数最大为2,x ms,200HZ5ms已经溢出2次了。

社区闲人 发表于 2022-12-15 15:22:51

楼主可以将频率设为6mhz,,再捕获200HZ的频率。

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

在中断函数增加 if(TIM1->SR1 & 0X01)        //清更新中断标记
页: 1 [2]
查看完整版本: PWM捕获问题