你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8S003 PC4引脚有异常PWM输出

[复制链接]
是发钱 提问时间:2018-9-24 23:05 /
我用PC3/PC4/PC6/PC7来做产生2对互补PWM,PC3/PC6/PC7周期、死区都正常,但是PC4在我期望的PWM上还会叠加一个33kHz的方波,我设置的周期是2kHz。我一直怀疑是时钟输出(CCO)的串扰。请各位大侠帮忙看看是怎么回事。一下是初始化代码:
void InitSystem(void)
{
    CLK->CKDIVR &= (u8)~(CLK_CKDIVR_CPUDIV);    // fcpu= fmaster (CPUDIV= 0)
    CLK->CKDIVR &= (u8)~(CLK_CKDIVR_HSIDIV);    // fhsi= fhsirc (HSIDIV= 0)
    CLK->ICKR |= CLK_ICKR_HSIEN;                //时能内部始   
    while((CLK->ICKR&0x02) == 0) {}; //等待内部始终就绪
    CLK->CCOR = 0x00;                            //禁止CCO时钟输出
}

void InitTimer1(void)
{
    CLK->PCKENR1 |= CLK_PCKENR1_TIM1; //TIM1 Clock Enable

    TIM1->CR1 = 0x40;//递增递减计数中央对齐,只在递增中断。
    TIM1->SR1 = 0x00;//清除中断标志位
    TIM1->SR2 = 0x00;
    TIM1->CCMR1 = 0x68;
    TIM1->CCMR2 = 0x68;
    TIM1->CCER1 = 0xFF;// iP高电平,iN低电平

    TIM1->PSCRH = 0;
    TIM1->PSCRL = 0; //16MHz时钟
    TIM1->ARRH = (u8)(((PwmPeriod - 1) >> 8)&0xff);            // init pulse period - auto reload register
    TIM1->ARRL = (u8)((PwmPeriod - 1)&0xff);

    TIM1->CCR1H = 0;
    TIM1->CCR1L = 98;
    TIM1->CCR2H = 0;
    TIM1->CCR2L = 95;
    TIM1->DTR = 60;
   
    TIM1->IER |= TIM1_IER_UIE ; //不用刹车中断,硬件没有接允许更新中断 中断号11                 
    TIM1->CR1 |= TIM1_CR1_URS | TIM1_CR1_CEN;    // enable timer;   

    TIM1->BKR = 0x80;
    TIM1->EGR |= 0x01;
}



选项字配置

选项字配置
收藏 评论2 发布时间:2018-9-24 23:05

举报

2个回答
butterflyspring 回答时间:2018-10-17 17:41:46
本帖最后由 butterflyspring 于 2018-10-17 17:43 编辑

内部CCO没有33K这个频率,所以看起来像是外部窜扰过来的,可以隔离硬件连接看看




给个建议,代码中蓝色部分是默认使能的,所以可以省略。





void InitSystem(void)
{
    CLK->CKDIVR &= (u8)~(CLK_CKDIVR_CPUDIV);    //fcpu= fmaster (CPUDIV= 0)
    CLK->CKDIVR &= (u8)~(CLK_CKDIVR_HSIDIV);    //fhsi= fhsirc (HSIDIV= 0)
    CLK->ICKR |= CLK_ICKR_HSIEN;               //时能内部始   
    while((CLK->ICKR&0x02) == 0) {}; //等待内部始终就绪
    CLK->CCOR = 0x00;                           //禁止CCO时钟输出
}

void InitTimer1(void)
{
   
CLK->PCKENR1 |= CLK_PCKENR1_TIM1;//TIM1 Clock Enable

    TIM1->CR1 = 0x40;//
递增递减计数中央对齐,只在递增中断。
    TIM1->SR1 = 0x00;//清除中断标志位
    TIM1->SR2 = 0x00;
    TIM1->CCMR1 = 0x68;
    TIM1->CCMR2 = 0x68;
    TIM1->CCER1 = 0xFF;// iP
高电平,iN低电平

    TIM1->PSCRH = 0;
    TIM1->PSCRL = 0; //16MHz
时钟
    TIM1->ARRH = (u8)(((PwmPeriod - 1) >>8)&0xff);            // init pulseperiod - auto reload register
    TIM1->ARRL = (u8)((PwmPeriod - 1)&0xff);

    TIM1->CCR1H = 0;
    TIM1->CCR1L = 98;
    TIM1->CCR2H = 0;
    TIM1->CCR2L = 95;
    TIM1->DTR = 60;
   
    TIM1->IER |= TIM1_IER_UIE ; //
不用刹车中断,硬件没有接允许更新中断 中断号11               
    TIM1->CR1 |= TIM1_CR1_URS | TIM1_CR1_CEN;    //enable timer;   

    TIM1->BKR = 0x80;
    TIM1->EGR |= 0x01;
}



de.JPG
robter 回答时间:2018-10-25 08:05:16
应该是外部干扰,我没有遇到过这种现象
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版