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;
}
}
你这是用中断控制IO翻转的PWM,中断需要压栈和出栈等工作,是很慢的。如果你需要高速PWM请使用硬件输出PWM ughbss 发表于 2017-10-28 18:36
你这是用中断控制IO翻转的PWM,中断需要压栈和出栈等工作,是很慢的。如果你需要高速PWM请使用硬件输出PWM ...
听你的解释,我有很多没弄明白的,看来我还要修炼一下,我是从51转的,谢谢你
页:
[1]