su33691 发表于 2018-12-13 11:05:18

@国学芯用,STC8H1K16能输出任意周期和任意占空比的波形吗?

原来使用STC1K08PWM芯片,LQFP32封装。17年STC8A推出后,可惜没有小封装的。
最近看到STC8H1K16,研究了几天的DATASHEET,就是无法实现任意周期和任意
占空比的波形输出,不知道是我太笨,还是这个芯片无法实现这个功能。
版主能否放个例程出来?

附STC8A的相关例程:
void main()
{
    P_SW2 = 0x80;
    PWMCKS = 0x00;                              // PWM时钟为系统时钟
    PWMC = 0x1
        000;                              //设置PWM周期为1000H个PWM时钟
    PWM0T1= 0x0100;                           //在计数值为100H地方输出低电平
    PWM0T2= 0x0500;                           //在计数值为500H地方输出高电平
    PWM0CR= 0x80;                               //使能PWM0输出
    P_SW2 = 0x00;

    PWMCR = 0x80;                               //启动PWM模块

    while (1);
}

su33691 发表于 2018-12-13 15:56:12

STC8H的“高级PWM”看起来很强大,可惜目前用不上,就不当小白鼠了。{:sweat:}

hefq 发表于 2018-12-13 20:30:24

肯定不能

arm 发表于 2018-12-13 21:19:36

来,给我输出0.0000000000001ns周期,0.000000000000001占空比的PWM波形

linghu886 发表于 2018-12-14 09:25:11

也在啃寄存器的。沟通一下。

su33691 发表于 2018-12-14 10:10:12

看来只有等STC8A出小封装的了。郁闷中。。。。{:shocked:}

rifjft 发表于 2018-12-14 14:05:52

这个任意是否要求太高了。要多少位可调、达到什么精度这才是具体数据呀

su33691 发表于 2018-12-14 19:36:11

此所谓“希望越大,失望越大”。等了2年,结果等到个“高级PWM”这个废物。
STC丢掉自己的优势,非要学别人的鸡肋,真的无语了。
我宁愿STC8H完善好“增强PWM",10位ADC,8位串口通信。稳定可靠是最为重要的。
至于IIC,SPI,我都是用软件模拟的,不关心这类BUG.

su33691 发表于 2018-12-15 15:46:05

向STC道歉,收回上面的过激言论。

STC8H的高级PWM还是可以实现我需要的脉冲波形的,虽然配置上麻烦一点。
STC8H取消了PCA模块,仅仅有10位ADC,稳定性上应该不会太差。下周就向STC申请样片测试。

linghu886 发表于 2019-1-8 12:40:37

楼主测试怎么样了?我搞了一下,没有成功,等批量了,看看例程再搞吧。

su33691 发表于 2019-1-8 14:34:48

STC8H的高级PWM功能测试OK!完美实现我要的波形。
datasheet写的不错。如果有STM32的PWM使用经验的话,更容易上手。

linghu886 发表于 2019-1-8 17:28:09

难怪   用过nxp    用过Ti用过nuvoton   就是没有

linghu886 发表于 2019-1-10 17:15:07

su33691 发表于 2019-1-8 14:34
STC8H的高级PWM功能测试OK!完美实现我要的波形。
datasheet写的不错。如果有STM32的PWM使用经验的话,更容 ...

楼主,独乐乐不如众乐乐,贴一个参考代码,学习一下。

xunke 发表于 2019-1-10 23:46:09

su33691 发表于 2019-1-8 14:34
STC8H的高级PWM功能测试OK!完美实现我要的波形。
datasheet写的不错。如果有STM32的PWM使用经验的话,更容 ...

请教什么波形?

su33691 发表于 2019-1-11 12:19:39

贴上我整理的STC高级PWM相关寄存器的设置:
不保证完全正确,仅供参考

//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写

#define PWM2_PSCR        (*(unsigned intvolatile xdata *)0xfef0)
#define PWM2_PSCRH        (*(unsigned char volatile xdata *)0xfef0)
#define PWM2_PSCRL        (*(unsigned char volatile xdata *)0xfef1)
#define PWM2_ARR        (*(unsigned intvolatile xdata *)0xfef2)
#define PWM2_ARRH        (*(unsigned char volatile xdata *)0xfef2)
#define PWM2_ARRL        (*(unsigned char volatile xdata *)0xfef3)
#define PWM2_RCR        (*(unsigned char volatile xdata *)0xfef4)
#define PWM2_CCR1        (*(unsigned intvolatile xdata *)0xfef5)
#define PWM2_CCR1H        (*(unsigned char volatile xdata *)0xfef5)
#define PWM2_CCR1L        (*(unsigned char volatile xdata *)0xfef6)
#define PWM2_CCR2        (*(unsigned intvolatile xdata *)0xfef7)
#define PWM2_CCR2H        (*(unsigned char volatile xdata *)0xfef7)
#define PWM2_CCR2L        (*(unsigned char volatile xdata *)0xfef8)
#define PWM2_CCR3        (*(unsigned intvolatile xdata *)0xfef9)
#define PWM2_CCR3H        (*(unsigned char volatile xdata *)0xfef9)
#define PWM2_CCR3L        (*(unsigned char volatile xdata *)0xfefa)
#define PWM2_CCR4        (*(unsigned intvolatile xdata *)0xfefb)
#define PWM2_CCR4H        (*(unsigned char volatile xdata *)0xfefb)
#define PWM2_CCR4L        (*(unsigned char volatile xdata *)0xfefc)
#define PWM2_BKR        (*(unsigned char volatile xdata *)0xfefd)
#define PWM2_DTR        (*(unsigned char volatile xdata *)0xfefe)
#define PWM2_OISR        (*(unsigned char volatile xdata *)0xfeff)

#define PWM1_ETRPS        (*(unsigned char volatile xdata *)0xfeb0)
#define PWM1_ENO        (*(unsigned char volatile xdata *)0xfeb1)
#define PWM1_PS                (*(unsigned char volatile xdata *)0xfeb2)
#define PWM1_IOAUX        (*(unsigned char volatile xdata *)0xfeb3)
#define PWM2_ETRPS        (*(unsigned char volatile xdata *)0xfeb4)
#define PWM2_ENO        (*(unsigned char volatile xdata *)0xfeb5)
#define PWM2_PS                (*(unsigned char volatile xdata *)0xfef6)
#define PWM2_IOAUX        (*(unsigned char volatile xdata *)0xfef7)

#define PWM1_CR1        (*(unsigned char volatile xdata *)0xfec0)
#define PWM1_CR2        (*(unsigned char volatile xdata *)0xfec1)
#define PWM1_SMCR        (*(unsigned char volatile xdata *)0xfec2)
#define PWM1_ETR        (*(unsigned char volatile xdata *)0xfec3)
#define PWM1_IER        (*(unsigned char volatile xdata *)0xfec4)
#define PWM1_SR1        (*(unsigned char volatile xdata *)0xfec5)
#define PWM1_SR2        (*(unsigned char volatile xdata *)0xfec6)
#define PWM1_EGR        (*(unsigned char volatile xdata *)0xfec7)

#define PWM1_CCMR1        (*(unsigned char volatile xdata *)0xfec8)
#define PWM1_CCMR2        (*(unsigned char volatile xdata *)0xfec9)
#define PWM1_CCMR3        (*(unsigned char volatile xdata *)0xfeca)
#define PWM1_CCMR4        (*(unsigned char volatile xdata *)0xfecb)
#define PWM1_CCER1        (*(unsigned char volatile xdata *)0xfecc)
#define PWM1_CCER2        (*(unsigned char volatile xdata *)0xfecd)
#define PWM1_CNTR        (*(unsigned intvolatile xdata *)0xfece)
#define PWM1_CNTRH        (*(unsigned char volatile xdata *)0xfece)
#define PWM1_CNTRL        (*(unsigned char volatile xdata *)0xfecf)

#define PWM1_PSCR        (*(unsigned intvolatile xdata *)0xfed0)
#define PWM1_PSCRH        (*(unsigned char volatile xdata *)0xfed0)
#define PWM1_PSCRL        (*(unsigned char volatile xdata *)0xfed1)
#define PWM1_ARR        (*(unsigned intvolatile xdata *)0xfed2)
#define PWM1_ARRH        (*(unsigned char volatile xdata *)0xfed2)
#define PWM1_ARRL        (*(unsigned char volatile xdata *)0xfed3)
#define PWM1_RCR        (*(unsigned char volatile xdata *)0xfed4)
#define PWM1_CCR1        (*(unsigned intvolatile xdata *)0xfed5)
#define PWM1_CCR1H        (*(unsigned char volatile xdata *)0xfed5)
#define PWM1_CCR1L        (*(unsigned char volatile xdata *)0xfed6)
#define PWM1_CCR2        (*(unsigned intvolatile xdata *)0xfed7)
#define PWM1_CCR2H        (*(unsigned char volatile xdata *)0xfed7)

#define PWM1_CCR2L        (*(unsigned char volatile xdata *)0xfed8)
#define PWM1_CCR3        (*(unsigned intvolatile xdata *)0xfed9)
#define PWM1_CCR3H        (*(unsigned char volatile xdata *)0xfed9)
#define PWM1_CCR3L         (*(unsigned char volatile xdata *)0xfeda)
#define PWM1_CCR4        (*(unsigned intvolatile xdata *)0xfedb)
#define PWM1_CCR4H        (*(unsigned char volatile xdata *)0xfedb)
#define PWM1_CCR4L         (*(unsigned char volatile xdata *)0xfedc)
#define PWM1_BKR        (*(unsigned char volatile xdata *)0xfedd)
#define PWM1_DTR        (*(unsigned char volatile xdata *)0xfede)
#define PWM1_OISR        (*(unsigned char volatile xdata *)0xfedf)

#define PWM2_CR1        (*(unsigned char volatile xdata *)0xfee0)
#define PWM2_CR2        (*(unsigned char volatile xdata *)0xfee1)
#define PWM2_SMCR        (*(unsigned char volatile xdata *)0xfee2)
#define PWM2_ETR        (*(unsigned char volatile xdata *)0xfee3)
#define PWM2_IER        (*(unsigned char volatile xdata *)0xfee4)
#define PWM2_SR1        (*(unsigned char volatile xdata *)0xfee5)
#define PWM2_SR2        (*(unsigned char volatile xdata *)0xfee6)
#define PWM2_EGR        (*(unsigned char volatile xdata *)0xfee7)

#define PWM2_CCMR1        (*(unsigned char volatile xdata *)0xfee8)
#define PWM2_CCMR2        (*(unsigned char volatile xdata *)0xfee9)
#define PWM2_CCMR3        (*(unsigned char volatile xdata *)0xfeea)
#define PWM2_CCMR4        (*(unsigned char volatile xdata *)0xfeeb)
#define PWM2_CCER1          (*(unsigned char volatile xdata *)0xfeec)
#define PWM2_CCER2         (*(unsigned char volatile xdata *)0xfeed)
#define PWM2_CNTR        (*(unsigned intvolatile xdata *)0xfeee)
#define PWM2_CNTRH        (*(unsigned char volatile xdata *)0xfeee)
#define PWM2_CNTRL        (*(unsigned char volatile xdata *)0xfeef)

su33691 发表于 2019-1-11 12:21:22

再贴上STC提供的一个例程:


#include "reg51.h"
#include "intrins.h"
#include "stdio.h"

#define FOSC 11059200L
#define BAUD 115200

typedef unsigned char BYTE;
typedef unsigned short WORD;

sfr P0M1      =   0x93;
sfr P0M0      =   0x94;
sfr P1M1      =   0x91;
sfr P1M0      =   0x92;
sfr P2M1      =   0x95;
sfr P2M0      =   0x96;
sfr P3M1      =   0xb1;
sfr P3M0      =   0xb2;
sfr P4M1      =   0xb3;
sfr P4M0      =   0xb4;
sfr P5M1      =   0xC9;
sfr P5M0      =   0xCA;
sfr P6M1      =   0xCB;
sfr P6M0      =   0xCC;
sfr P7M1      =   0xE1;
sfr P7M0      =   0xE2;

sfr P_SW2       =   0xba;

//高级PWM SFR
#define PWM1_ENO   (*(unsigned charvolatile xdata *)0xFEB1)

#define PWM1_PSCRH        (*(unsigned char volatile xdata *)0xfed0)
#define PWM1_PSCRL        (*(unsigned char volatile xdata *)0xfed1)

#define PWM1_CR1   (*(unsigned charvolatile xdata *)0xFEC0)
#define PWM1_CCMR1   (*(unsigned charvolatile xdata *)0xFEC8)
#define PWM1_CCER1   (*(unsigned charvolatile xdata *)0xFECC)
#define PWM1_ARRH    (*(unsigned charvolatile xdata *)0xFED2)
#define PWM1_ARRL    (*(unsigned charvolatile xdata *)0xFED3)
#define PWM1_CCR1H   (*(unsigned charvolatile xdata *)0xFED5)
#define PWM1_CCR1L   (*(unsigned charvolatile xdata *)0xFED6)
#define PWM1_BKR   (*(unsigned charvolatile xdata *)0xFEDD)

void main()
{
    P1M0 = 0x01;
    P1M1 = 0x00;        //设置P10为推挽输出
    P3M0 = 0x00;
    P3M1 = 0x00;
    P3 = 0xff;
   
    P_SW2 = 0x80;

        PWM1_PSCRH = 0X7f;
        PWM1_PSCRL = 0Xf0;

    PWM1_CCMR1 = 0x00;          //CC1为输出模式
    PWM1_CCMR1 |= 0x30;         //比较匹配时OC1REF翻转输出
    PWM1_CCER1 = 0x00;          //设置输出极性为高电平有效
    PWM1_CCER1 |= 0x01;         //使能CC1上的输出功能
   
    PWM1_CCR1H = 500 >> 8;
    PWM1_CCR1L = 500;
    PWM1_ARRH = 1000 >> 8;      //周期值
    PWM1_ARRL = 1000;
    PWM1_CR1 = 0x01;
   
    PWM1_ENO = 0x01;
    PWM1_BKR = 0x90;            //使能主输出,并使能刹车功能,当PWMFLT口为低时关闭PWM输出
//    PWM1_BKR = 0xb0;          //使能主输出,并使能刹车功能,当PWMFLT口为高时关闭PWM输出
//    PWM1_BKR = 0xf0;          //使能主输出,并使能刹车功能,当PWMFLT口为高时关闭PWM输出,并启动自动恢复功能

    while (1);
}


su33691 发表于 2019-1-11 12:22:18

XTXB 发表于 2019-2-18 20:41:33

顶一个!支持工匠精神!申请样品太麻烦,stc8h啥时候有得卖,咱也入手玩玩。
页: [1]
查看完整版本: @国学芯用,STC8H1K16能输出任意周期和任意占空比的波形吗?