在PWM波形的上升沿进入PWM中断 | 已解决
以前做项目用STC8G1K08A,用PWM的上升沿中断,在中断函数内对数据进行处理,现在想用STC32G单片机升级这个项目,在开发板上测试,不能在PWM波形的上升沿进入PWM中断。
请高手指导一下,感谢!
/*
1.在P20引脚输出PWM波形;
2.在PWM波形的上升沿进入PWM中断,在PWM中断中操作P27电平信号,并在示波器上显示P27波形,
检测PWM中断发生的时间
3.时钟频率35MHZ
*/
#include"STC32G.h"
#include"delay.h"
#include "pwm.h"
#include"timer.h"
/*************************************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
**************************************************************/
void delay_ms(uint16 x)
{
uint16 i;
do{
i = 705;
while(--i);
}while(--x);
}
#define delay_us(x) 35*x // 35M时钟,延时的时间
/**************************************************************************************
功能描述:对PWM5进行初始化
入口参数:无
返回值:无
**************************************************************************************/
void PWM_Configuration(void)
{
P_SW2 |= 0x80; //将EAXFR位置1,以访问在XDATA区域的扩展SFR
PWMA_CCER1= 0;
PWMA_CCER2= 0;
PWMA_SR1 = 0;
PWMA_SR2 = 0;
PWMA_ENO = 0;
PWMA_PS = 0;
PWMA_IER = 0;
PWMA_PS = 0x00; //高级 PWM 通道输出脚选择位
PWMA_PS |= 0x01; //选择 P0.0 通道
PWMA_PSCRH = 0;
PWMA_PSCRL = 0; //计数时钟不分频
PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道,会不会是这里的问题?
PWMA_CCMR1 = 0x60; //通道模式配置
PWMA_CCER1 = 0x01; //配置通道输出使能和极性,CC1P通道使能,输出不反向
PWMA_ARRH =delay_us(10)>>8; //周期10us
PWMA_ARRL =delay_us(10);
PWMA_CCR1H=delay_us(2)>>8; //占空比2us
PWMA_CCR1L=delay_us(2);
PWMA_ENO = 0x01; //使能 PWM1P 输出
PWMA_BKR = 0x80; //使能主输出
PWMA_IER=0X01; //测试
PWMA_CR1 |= 0x01; //将CENA位置1,开始计时
P_SW2 &= 0x7F; //将EAXFR位置0,恢复访问XRAM
}
void PWMA_ISR(void) interrupt PWMA_VECTOR
{
PWMA_SR1 =0;
PWMA_SR2 =0;
P27 =1;
NOP(5);
P27 =0;
}
/***************************************************************************
* 描述 : 主函数
* 入参 : 无
* 返回值 : 无
**************************************************************************/
int main(void)
{
P0M1 =0;
P0M0 =1;
P2M1 =0X7F;
P2M0 =0XFF; //P27推挽
PWM5_Configuration(); //初始化PWM5口
EA = 1; //允许总中断
P20=0;
while(1)
{
P00 =!P00;
delay_ms(300);
}
}
波形图片上传不了
任意沿
使用STC32G12K128单片机,测试不成功,输出没有PWM形,能进入PWMA的中断程序,但是奇怪PWMA_SR1寄存器没有一个状态位为1,是不是这颗单片机坏了,要不要换一颗? 本帖最后由 zealot 于 2023-9-5 19:18 编辑
cr1里面除了cenA=1之外,还要设置一个URSA=1,才会有sr1里面的UIFA,
pdf里面有说我记得是那样的,
ydy2023 发表于 2023-9-5 18:00
使用STC32G12K128单片机,测试不成功,输出没有PWM形,能进入PWMA的中断程序,但是奇怪PWMA_SR1寄存器没有 ...
芯片哪有那么容易坏,是没有初始化好。
先用STC的官方例程,观察PWM输出正常,然后允许匹配中断(上升沿还是下降沿),增加中断函数,OK! 这个问题已解决,初始化的问题,感谢! 请教一下,能不能在PWM发生更新事件后,设定一个延时时间(2us左右)触发ADC转换? ydy2023 发表于 2023-9-6 12:03
请教一下,能不能在PWM发生更新事件后,设定一个延时时间(2us左右)触发ADC转换? ...
没法直接设置,2us的时间可以软件延时一下。 好的
页:
[1]