- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2026-04-02 21:22:49
已绑定手机
新手上路
- 积分
- 7
|
用了很多版本的代码,始终无法输出PWM。对应输出口检查多遍没有问题,输出模式双向口和推挽都试过,一直是直线输出。
重新用Aicube生成了一个项目,核心代码如下:
void Io_Init(void)
{
P0M1 = 0xff;
P0M0 = 0x00;
P1M1 = 0xff;
P1M0 = 0x00;
P2M1 = 0x00;
P2M0 = 0x01;
P3M1 = 0xff;
P3M0 = 0x00;
P4M1 = 0xff;
P4M0 = 0x00;
P5M1 = 0xff;
P5M0 = 0x00;
}
void Pwm_Init(void)
{
EAXFR = 1; //扩展寄存器(XFR)访问使能
PWMA_PS = 0x02;//设置PWMA的引脚切换
PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR1 = 0x60;
PWMA_CCER1 = 0x01;
PWMA_CCMR1 = 0x68;
PWMA_ARRH = 0x2b;
PWMA_ARRL = 0x33;
PWMA_CCR1H = 0x15;
PWMA_CCR1L = 0x9a;
PWMA_ENO = 0x01;//设置PWMA的输出使能
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1 = 0x81; //使能ARR预装载,开始计时
}
void UpdatePwm(unsigned char num, unsigned int duty)
{
if(num<=3&&duty>36864)return;// dutya不可以超过36864
if(num>=4&&duty>0)return;// dutyb不可以超过0
switch (num)
{
case 1:
PWMA_CCR1H = (unsigned char)(duty >> 8); // 设置占空比时间
PWMA_CCR1L = (unsigned char)(duty);
break;
default:
break;
}
}
//<<AICUBE_USER_GLOBAL_DEFINE_END>>
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
//<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
//<<AICUBE_USER_MAIN_INITIAL_END>>
SYS_Init();
//<<AICUBE_USER_MAIN_CODE_BEGIN>>
Io_Init();
Pwm_Init();
//<<AICUBE_USER_MAIN_CODE_END>>
while (1)
{
USBLIB_OUT_Done(); //查询方式处理USB接收的数据
//<<AICUBE_USER_MAIN_LOOP_BEGIN>>
//<<AICUBE_USER_MAIN_LOOP_END>>
}
}
P20口没有PWM输出。
求解,能力有限,能试的基本都试过了。。 |
|