我是智勇双全 发表于 2017-10-28 16:26:47

STM8定时器竟然出不来8M的PWM???

各位看官,我想试验一下PWM输出的极限频率,下面的程序理论上应该输出8M HZ的频率,最后示波器显示只有177.8K HZ请大家进来帮我找出问题点,谢谢各位
#include "iostm8s207rb.h"

#define pwmPF_ODR_ODR5   //定义PWM输出口PF5

int num=0;
void TIM4_init()         //定时器TIM4函数

{
TIM4_PSCR=0X00;          //设置预分频寄存器16M计数
TIM4_ARR=0x01;         //自动重装数值1
TIM4_IER=0X01;         //开启中断使能
TIM4_CNTR=0X01;          //定时器初值1
}
void main()
{
CLK_CKDIVR=0X00;         //MCU工作主频16M

PF_DDR_DDR5=1;            //PF5输出
PF_CR1_C15=1;             //推挽输出
PF_CR2_C25=1;             //输出频率10M



TIM4_init();            //初始化定时器
asm("rim");

TIM4_CR1|=0X01;

while(1);

}


#pragma vector=0x19
__interrupt void TIM_UPD_OVF_IRQHandler(void)

{
num++;
TIM4_SR=0;
if(num==1)         //pwm频率为8M
{
    pwm=!pwm;
    num=0;
}
}

ughbss 发表于 2017-10-28 18:36:11

你这是用中断控制IO翻转的PWM,中断需要压栈和出栈等工作,是很慢的。如果你需要高速PWM请使用硬件输出PWM

我是智勇双全 发表于 2017-10-28 18:50:18

ughbss 发表于 2017-10-28 18:36
你这是用中断控制IO翻转的PWM,中断需要压栈和出栈等工作,是很慢的。如果你需要高速PWM请使用硬件输出PWM ...

听你的解释,我有很多没弄明白的,看来我还要修炼一下,我是从51转的,谢谢你
页: [1]
查看完整版本: STM8定时器竟然出不来8M的PWM???