mcxhoten
发表于 2025-2-27 11:03:50
DebugLab 发表于 2025-2-27 10:54
那还是程序逻辑问题,硬件是正常的
好的感谢
mcxhoten
发表于 2025-2-27 11:04:57
DebugLab 发表于 2025-2-27 10:54
那还是程序逻辑问题,硬件是正常的
那您看一下我刚发的程序逻辑有问题吗可以这么配置吗
DebugLab
发表于 2025-2-27 11:30:14
mcxhoten 发表于 2025-2-27 11:04
那您看一下我刚发的程序逻辑有问题吗可以这么配置吗
可能是反复初始化造成的
我不太熟悉库函数,不知道库函数内是如何调用结构体的
修改占空比直接修改PWMx_CCRxx寄存器即可,不要做其他操作
mcxhoten
发表于 2025-2-27 11:46:21
DebugLab 发表于 2025-2-27 11:30
可能是反复初始化造成的
我不太熟悉库函数,不知道库函数内是如何调用结构体的
修改占空比直接修改PWMx_ ...
那您看我上面修改的直接单独设置一个修改占空比的函数那样子调用可以吗只修改一个占空比初始化只调用一次
DebugLab
发表于 2025-2-27 11:55:32
mcxhoten 发表于 2025-2-27 11:46
那您看我上面修改的直接单独设置一个修改占空比的函数那样子调用可以吗只修改一个占空比初始化只调用一次 ...
只设置PWMx_CCRxx寄存器即可,不要做其他操作
实际效果用示波器测量检查一下
神农鼎
发表于 2025-2-27 13:25:07
DebugLab 发表于 2025-2-27 11:55
只设置PWMx_CCRxx寄存器即可,不要做其他操作
实际效果用示波器测量检查一下 ...
给个:STC8H3K32S2@24Mhz/3.3V, P20管脚输出, 1kHz,53%占空比的程序
波形也给出来:
外部负载:1,浮空;2,3.3K下拉;3,3.3K上拉
用 STC8H8K64U来做演示也行
mcxhoten
发表于 2025-2-27 13:28:03
神农鼎 发表于 2025-2-27 13:25
给个:STC8H3K32S2@24Mhz/3.3V, P20管脚输出, 1kHz,53%占空比的程序
波形也给出来:
外部负载:1, ...
可以直接这么配吗
vxfklthz
发表于 2025-2-27 15:23:35
控制变量才好测试
DebugLab
发表于 2025-2-27 15:41:40
#include <AI8H.H>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#define FOSC 24000000UL //主时钟
void Delay_ms(unsigned char ms)
{
unsigned int i;
do
{
i=FOSC/10000;
while(--i); //10T per loop
}
while(--ms);
}
void Init(void)
{
P_SW2|=EAXFR;
P0M1=0x00; P0M0=0x00; //设置IO模式
P1M1=0x00; P1M0=0x00; //设置IO模式
P2M1=0x00; P2M0=0x00; //设置IO模式
P3M1=0x03; P3M0=0x00; //设置IO模式
P4M1=0x00; P4M0=0x00; //设置IO模式
P5M1=0x00; P5M0=0x00; //设置IO模式
P6M1=0x00; P6M0=0x00; //设置IO模式
P7M1=0x00; P7M0=0x00; //设置IO模式
PWMA_PS=0x00; //高级 PWM 通道输出脚选择位
PWMA_PS|=0x01; //选择 PWM1_2 通道
PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR1 = 0x60; //通道模式配置
PWMA_CCER1 = 0x01; //配置通道输出使能和极性
PWMA_ARRH=(unsigned char)(24000>>8); //设置周期时间
PWMA_ARRL=(unsigned char)24000;
PWMA_ENO=0x00;
PWMA_ENO|=0x01; //使能输出
PWMA_BKR=0x80; //使能主输出
PWMA_CR1|=0x01; //开始计时
EA=1; //启用总中断
}
void main(void)
{
unsigned int duty;
duty=12720;
Init();
PWMA_CCR1H = (unsigned char)(duty >> 8); //设置占空比时间
PWMA_CCR1L = (unsigned char)(duty);
while(1)
{
}
}
DebugLab
发表于 2025-2-27 15:48:33
mcxhoten 发表于 2025-2-27 13:28
可以直接这么配吗
可以