找回密码
 立即注册
查看: 2515|回复: 26

STC8H1K08 pwm功能正常,程序烧写到STC8H1K17T ,pwm不工作,其他外设工作

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-04 11:34:35

8

主题

21

回帖

110

积分

注册会员

积分
110
发表于 2024-1-3 11:34:59 | 显示全部楼层 |阅读模式
本帖最后由 lonnychen 于 2024-1-3 11:37 编辑

STC8H1K08 pwm功能正常,程序烧写到STC8H1K17T,pwm不工作,其他外设能够正常工作。

不知道什么原因了,然后看手册,带T的有高速高级pwm,是不是这里要配置什么寄存器才行

我是使用内部24MHZ,然后分频24,相当于是单片机运行在1Mhz频率下。 不知道是不是带T的高速pwm主频不能太低还是咋的
截图202401031134145048.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15666
发表于 2024-1-3 23:05:08 | 显示全部楼层
STC8H1K08-36I-SOP16 和
STC8H1K08T-33I-SOP16 的管脚肯定是不完全兼容

STC8H1K08-36I-SOP16 的管脚图
截图202401032306074415.jpg

STC8H1K08T-33I-SOP16 的管脚图
截图202401032307302458.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15666
发表于 2024-1-3 23:10:00 | 显示全部楼层
STC8H1K08-36I-TSSOP20 和
STC8H1K08T-33I-TSSOP20 的管脚肯定是不完全兼容

STC8H1K08-36I-TSSOP20 管脚图
截图202401032310519311.jpg

STC8H1K08T-33I-TSSOP20 管脚图
截图202401032312243717.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15666
发表于 2024-1-3 11:37:47 | 显示全部楼层
普通 PWM的用法 是一样的,要初始化 I/O的工作模式,否则是 高阻输入,无输出
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-04 11:34:35

8

主题

21

回帖

110

积分

注册会员

积分
110
发表于 2024-1-3 11:43:07 | 显示全部楼层
void STC8H1K16_pwm2_init(unsigned char PWM_CH,unsigned long int freq)
                        
                       // unsigned long int duty)
{
                unsigned int match_temp = 0;
                unsigned int period_temp = 0;
                unsigned int freq_div = 0;

                P_SW2 |= 0x80;
                freq_div = (sys_clk / freq) >> 15;                                                                //分频
                period_temp = sys_clk / freq / (freq_div + 1);

                PWM2_ENO |= (1 << ((2 * ((PWM_CH >> 4) - 4))));                                        //使能输出
                PWM2_PS |= ((PWM_CH & 0x03) << ((2 * ((PWM_CH >> 4) - 4))));                //输出脚选择

                // 配置通道输出使能和极性       
                (*(unsigned char volatile xdata*)(PWM2_CCER1_ADDR + (((PWM_CH >> 4) - 4) >> 1))) |= (1 << (((PWM_CH >> 4) & 0x01) * 4));

                //通道模式配置
                (*(unsigned char volatile xdata*)(PWM2_CCMR1_ADDR + ((PWM_CH >> 4) - 4))) |= 0x06 << 4;        //
                (*(unsigned char volatile xdata*)(PWM2_CCMR1_ADDR + ((PWM_CH >> 4) - 4))) |= 1 << 3;                //PWM模式2

                //设置周期时间(高字节先写入)
                //PWM2_ARR = (uint16)period_temp;
                PWM2_ARRH = period_temp >> 8;
                PWM2_ARRL = period_temp;
                //PWM2_ARR=2000;

                //PWM预分频(高字节先写入)
                PWM2_PSCRH = freq_div >> 8;
                PWM2_PSCRL = freq_div;

                //设置占空比(高字节先写入)
                (*(unsigned char volatile xdata*)(PWM2_CCR1_ADDR + 2 * ((PWM_CH >> 4) - 4))) = match_temp >> 8;
                (*(unsigned char volatile xdata*)(PWM2_CCR1_ADDR + 2 * ((PWM_CH >> 4) - 4) + 1)) = match_temp;

                PWM2_BKR = 0x80;         //使能主输出
                PWM2_CR1 = 0x01;        //PWM开始计时

}

void STC8H1K16_pwm2_set_duty(unsigned char PWM_CH,
                            unsigned int duty)
{
    unsigned int match_temp;
    match_temp = PWM2_ARRH;
        match_temp = match_temp << 8;
        match_temp = match_temp + PWM2_ARRL;
        match_temp = match_temp * ((float)duty / PWM_DUTY_MAX);                                //占空比
        (*(unsigned char volatile xdata*)(PWM2_CCR1_ADDR + 2 * ((PWM_CH >> 4) - 4))) = match_temp >> 8;
        (*(unsigned char volatile xdata*)(PWM2_CCR1_ADDR + 2 * ((PWM_CH >> 4) - 4) + 1)) = match_temp;
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-04 11:34:35

8

主题

21

回帖

110

积分

注册会员

积分
110
发表于 2024-1-3 11:44:03 | 显示全部楼层
神*** 发表于 2024-1-3 11:37
普通 PWM 是一样的

现在就不知道啥原因了   pwm在1k08上能工作 在1k17T上不工作,按照你们的经验,是不需要改什么配置吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-04 11:34:35

8

主题

21

回帖

110

积分

注册会员

积分
110
发表于 2024-1-3 11:44:44 | 显示全部楼层
神*** 发表于 2024-1-3 11:37
普通 PWM 是一样的

如果1k17T是使用普通pwm,需要单独配置什么寄存器吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15666
发表于 2024-1-3 12:59:07 | 显示全部楼层
不需要
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:53
  • 最近打卡:2025-05-04 20:21:07

73

主题

5885

回帖

1万

积分

超级版主

积分
12091
发表于 2024-1-3 13:36:33 | 显示全部楼层
所有STC8H的高级PWM操作都是一样的,兼容的,小差别是有P1.2口的从P1.2口输出,没有P1.2的从P5.4输出。
重新下载测试了STC8H1K08T的PWM,没有任何问题。
请下载下面的附件,解压缩后,直接下载“01A-PWMA-4对互补PWM输出P1口”里的HEX文件测试,4路PWM从P1.0 P1.1 P5.4 P1.3 P1.4 P1.5 P1.6 P1.7输出,示波器可以观察到波形。

STC8H系列-高级PWM相关程序.rar

2.02 MB, 下载次数: 129

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-04 11:34:35

8

主题

21

回帖

110

积分

注册会员

积分
110
发表于 2024-1-3 14:54:46 | 显示全部楼层

那是什么原因呢 程序一样  硬件一样 只换了个单片机型号  1K17T有很多版本吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-04 11:34:35

8

主题

21

回帖

110

积分

注册会员

积分
110
发表于 2024-1-3 15:09:43 | 显示全部楼层
梁*** 发表于 2024-1-3 13:36
所有STC8H的高级PWM操作都是一样的,兼容的,小差别是有P1.2口的从P1.2口输出,没有P1.2的从P5.4输出。
重 ...

烧写进去也测不到波形

点评

不会吧?我特意测试过的,示波器观察输出的8个PWM都正常,才发给你的。  详情 回复 发表于 2024-1-3 16:14
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15666
发表于 2024-1-3 15:32:29 | 显示全部楼层
PWM口,对外输出,先设置成 推挽输出

点评

STC8H的高级PWM是固定推挽输出的,与IO设置无关。  详情 回复 发表于 2024-1-3 16:15
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-4 22:51 , Processed in 0.746674 second(s), 126 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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