找回密码
 立即注册
查看: 63|回复: 4

PWMB分频不起作用了 | 可以了

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-10-11 08:41:04
已绑定手机

246

主题

348

回帖

1858

积分

金牌会员

积分
1858
发表于 7 天前 | 显示全部楼层 |阅读模式

截图202510091251068353.jpg
我想用定时器2和PWMB定时器同步频率,定时器2工作在12T模式0分频,PWMB_PSCR是11分频

截图202510091252427984.jpg
这是测试函数,这个函数只初始化一次,并且测得的值保存在独立内存中,也检查了没有任何干扰
这两个定时器测出来的值不一样,相差十几倍
除了定时器2在1T模式0分频和PWMB在0分频下测出来的值是一样的
PWMB_PSCR不管怎么设置测出来的值都是0分频下的值
我还单独写了独立的测试程序测试是没有问题的,但是在这个项目中就会出现PWMB_PSCR不起作用的问题
所有的寄存器也检查过了,和独立测试程序中设置的一样,不知道哪里出来问题

截图202510091302343198.jpg 截图202510091302496620.jpg 截图202510091305363759.jpg
复配上位机软件,先点一下获取机号,在切换到读取配置页面,再点击发送就能将
定时器2和PWMB测得的之打印出来
代码附件 方波无刷电机调试.zip (1.4 MB, 下载次数: 3)
24MHZ,STC8H1K17T单片机
回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 7 天前 | 显示全部楼层
@梁工 您好,

关于您提到的 “PWMB分频不起作用” 的问题,我已仔细阅读了您的描述、附带的代码截图以及项目背景信息。结合您提供的内容,我将从以下几个方面为您进行专业分析,并尝试定位问题原因,提出可能的解决方案。

一、问题概述

您希望使用 定时器2 和 PWMB模块 实现频率同步输出,其中:
定时器2工作在 12T模式,0分频;
PWMB的预分频寄存器 PWMBPSCR 设置为 11分频;
两者在独立测试程序中工作正常;
但在当前项目中,PWMBPSCR设置无效,无论设置为何值,测得的频率始终与0分频一致;
两个定时器测得的值相差十几倍;
寄存器配置已检查无误,与独立测试程序一致。

目标:定位为何 PWMBPSCR配置无效,导致分频不起作用。

二、系统平台与定时器结构分析

1. 单片机平台
型号:STC8H1K17T
主频:24MHz
属于增强型8051内核,支持多定时器、PWM模块等外设。

2. PWMB模块说明(参考STC8系列技术手册)
PWMB模块为定时器驱动的PWM输出模块,其时钟源通常来自系统时钟经过预分频器(PWMBPSCR);
PWMBPSCR寄存器用于设置预分频系数,决定PWM频率;
预分频系数 = PWMBPSCR + 1;
例如,PWMBPSCR = 11,则分频系数为12,即输入时钟被12分频;
PWM频率 = Fsys / (12  (PWMBPSCR + 1)  (PWMBTMR + 1))(具体公式视模式而定)。

三、问题分析与可能原因

根据您提供的信息,问题出现在 项目集成后,而单独测试时正常。这提示问题可能不是寄存器配置错误,而是存在以下几种可能性:

1. 寄存器被重复配置或覆盖
检查是否在主程序、中断服务程序或其他模块中重复配置了PWMBPSCR寄存器;
特别是中断服务程序中是否调用了某些PWM初始化函数;
某些库函数或驱动函数可能在运行过程中自动重置PWMBPSCR;
建议使用调试器或打印寄存器值的方式,在初始化后和运行中分别查看PWMBPSCR的值是否被修改。

2. PWMB模块被其他模块干扰
STC8系列单片机中的定时器和PWM模块可能存在时钟源共享或冲突;
检查PWMB是否与其他定时器(如定时器2)共用了某个时钟源或控制寄存器;
是否有其他模块启用了PWMB时钟,导致其行为异常;
建议检查系统时钟配置寄存器(如CLKDIV) 和 PWMB的使能寄存器(PWMBCTRL)。

3. 编译器优化或变量作用域问题
若PWMBPSCR是通过变量赋值而非直接写入寄存器,可能存在编译器优化导致赋值无效;
检查变量是否为volatile类型;
确保编译器没有对关键寄存器赋值进行优化;
建议直接使用宏定义或直接寄存器写入方式赋值,例如:
  1. c
  2.   PWMBPSCR = 11;  // 直接操作寄存器
复制代码

4. 项目中存在多个PWM模块或冲突配置
检查是否启用了其他PWM通道(如PWMA),是否存在共用资源冲突;
PWMB可能依赖于某个通用定时器作为时钟源,若该定时器被其他模块占用,可能导致PWMB行为异常;
建议检查是否启用了PWMB的独立时钟源,或其依赖的定时器是否被其他模块修改。

5. 初始化顺序问题
若PWMB模块的初始化在某些系统初始化(如时钟配置、IO配置)之前执行,可能导致配置无效;
建议确保PWMB初始化在系统时钟配置完成后执行;
可尝试将PWMB初始化代码放在main函数末尾或主循环前,确认初始化顺序无误。

四、建议的排查步骤

为了更系统地定位问题,建议您按照以下步骤进行排查:

步骤1:确认寄存器写入有效性
在初始化PWMB后,立即读取并打印PWMBPSCR的值;
示例代码:
  1. c
  2.   PWMBPSCR = 11;
  3.   printf("PWMBPSCR = %d\n", PWMBPSCR);
复制代码
如果打印值不是11,说明写入失败,可能是寄存器地址错误或被保护;
如果值正确但功能无效,说明寄存器未被PWMB模块正确识别。

步骤2:使用调试器观察寄存器状态
使用调试器(如STC-ISP调试模式)观察PWMBPSCR寄存器的实际值;
观察PWMBTMR、PWMBCTRL等寄存器的状态;
判断是否因某些条件未满足(如未启动PWM模块)导致配置未生效。

步骤3:隔离测试
将当前项目的PWMB初始化代码单独提取出来,建立一个最小可运行的测试工程;
使用与项目相同的编译环境和配置;
若单独测试正常,则说明项目中存在干扰因素;
可尝试逐步加入项目中其他模块代码,定位冲突点。

步骤4:检查全局中断与中断嵌套
若项目中启用了全局中断(EA = 1),某些中断服务程序可能会修改PWMB相关寄存器;
检查中断服务函数中是否有对PWMB模块的操作;
建议在初始化后关闭中断,测试PWMB功能是否正常。

五、可能的解决方案

根据上述分析,以下是几种可能有效的解决方法:

1. 强制重新写入PWMBPSCR
在主循环中定期重新写入PWMBPSCR寄存器,确保配置生效;
示例:
  1. c
  2.   while (1) {
  3.       PWMBPSCR = 11;
  4.       DelayMs(10);
  5.   }
复制代码

2. 使用独立定时器驱动PWMB
若PWMB依赖于某个定时器作为时钟源,可考虑将其与定时器2分离;
例如使用定时器3或定时器4作为PWMB的时钟源,避免冲突;
检查手册确认PWMB是否支持切换时钟源。

3. 更新固件或库函数
若使用的是第三方库或驱动函数,建议更新到最新版本;
检查是否有已知BUG或兼容性问题;
可尝试改用官方SDK或原厂示例代码进行测试。

六、总结

综上所述,您遇到的问题很可能不是寄存器配置错误,而是由于以下原因之一导致:
寄存器被其他代码覆盖;
模块间资源冲突;
初始化顺序或中断干扰;
编译器优化导致写入无效。

建议您优先通过调试器或打印寄存器值的方式确认PWMBPSCR是否被正确写入,再逐步排查干扰因素。

如需进一步分析,建议上传完整的代码工程(或最小复现代码)以便更准确地定位问题。

如仍有疑问,欢迎继续交流。

祝项目顺利!

—— 国芯人工智能助手

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:41
  • 最近打卡:2025-10-15 08:43:09

14

主题

162

回帖

1851

积分

版主

积分
1851
发表于 7 天前 | 显示全部楼层
耐心等待,已转专业技术,稍后会回复您
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:591
  • 最近打卡:2025-10-15 09:49:21
已绑定手机
已实名认证

116

主题

2889

回帖

7364

积分

版主

积分
7364
发表于 7 天前 | 显示全部楼层
截图202510091424278522.jpg

截图202510091424328752.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-10-11 08:41:04
已绑定手机

246

主题

348

回帖

1858

积分

金牌会员

积分
1858
发表于 7 天前 | 显示全部楼层
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 05:38 , Processed in 0.141388 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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