求救关于独立PWM输出问题,没有输出怎么办?
求救关于独立PWM输出问题,没有输出?本人新手小白,芯片是STC8H1K08T,想使用P3.3的PWM4_N2独立输出PWM控制LED亮暗,参照ISP上面的示例做了修改,但是没有任何输出。。
望大师指点迷津。还有就是独立设置PWM输出需要怎么个流程?期待大师的指点!先在此感谢!
#include "stc8h.h"
#include "intrins.h"
#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWMA_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0)
void main()
{
//P3M0 |= 0x1c; P3M1 &= ~0x1c;
P3PU |= 0x0c;
P_SW2 = 0x80;
PWMA_CCER2 = 0x00; //写CCMRx前必须先清零CCERx关闭通道
PWMA_CCMR4 = 0x60; //设置CC4为PWMA输出模式
PWMA_CCER2 = 0xC0; //使能CC2通道
PWMA_CCR4 = 100; //设置占空比时间
PWMA_ARR = 500; //设置周期时间
PWMA_ENO = 0x80; //使能PWM4P端口输出
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1 = 0x01; //开始计时
//led=1;
while (1);
}
本帖最后由 乘风飞扬 于 2024-5-10 14:39 编辑
这颗芯片是P33对应的是PWM4N_4。
需要将设置:PWMA_PS |= 0xc0;
此外,PWMA_CCR4(占空比值)也要设置:
乘风飞扬 发表于 2024-5-10 14:37
这颗芯片是P33对应的是PWM4N_4。
需要将设置:PWMA_PS |= 0xc0;
非常大师您的指点,我这边又重新核实了下,做了些修改,好像还是不行。麻烦您再指导下哪里有问题?
#include "stc8h.h"
#include "intrins.h"
#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWMA_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0)
#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2)
void main()
{
//P3M0 |= 0x1c; P3M1 &= ~0x1c;
//P3PU |= 0x0c;
P_SW2 = 0x80;
PWMA_PS |= 0xc0;
PWMA_CCER2 = 0x00; //写CCMRx前必须先清零CCERx关闭通道
PWMA_CCMR4 = 0x60; //设置CC4为PWMA输出模式
PWMA_CCER2 = 0xC0; //使能CC2通道
PWMA_CCR4 = 500; //设置占空比时间
PWMA_ARR = 100; //设置周期时间
PWMA_ENO = 0x80; //使能PWM4P端口输出
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1 = 0x01; //开始计时
//led=1;
while (1);
}
Lkck8210 发表于 2024-5-10 14:34
我也不清楚开启PWM,对应的P3.3的IO脚位是否需要设置为上拉电阻模式,还是说开漏输出? zys0797 发表于 2024-5-10 14:43
非常大师您的指点,我这边又重新核实了下,做了些修改,好像还是不行。麻烦您再指导下哪里有问题?
#incl ...
占空比不能设置的比周期还大。
周期(PWMA_ARR)设置100,那么占空比(PWMA_CCR4)设置50试试。 乘风飞扬 发表于 2024-5-10 14:51
占空比不能设置的比周期还大。
周期(PWMA_ARR)设置100,那么占空比(PWMA_CCR4)设置50试试。 ...
谢谢您的指导,还是不行。不知道哪里没有设置到还是程序不对?需要对P3.3的IO设置输入输出的模式吗? STC8H1K08T系列PWM脚的IO口模式需要手动设置,初始化设置P33为准双向模式,或者推挽输出模式试试。
附件例程已经过测试,供参考。 本帖最后由 zys0797 于 2024-5-10 15:49 编辑
乘风飞扬 发表于 2024-5-10 15:29
STC8H1K08T系列PWM脚的IO口模式需要手动设置,初始化设置P33为准双向模式,或者推挽输出模式试试。
附件例 ...
非常感谢,现在成功输出PWM了。我这边对比了下程序,发现我就是P3口没有设置准准双向模式,设置为推挽输出的话直接就是相当于IO口置为1一样。
请教大师以下几点:
1、我需要如何控制PWM的输出频率?比如我要输出20KHZ
2、如果我要控制PWM的30%,60%这样的输出需要修改那个参数,如何计算而来?
非常感谢您的回复和指导!谢谢。
频率控制可以参考规格书计算公式:
百分比输出通过周期、占空比设置修改。
例如周期(PWMA_ARR)设置100,占空比(PWMA_CCR4)设置50,那么输出信号占空比就是50%。
页:
[1]
2