main.c:
#include "stm8s.h"
uint16_t Baifenbi = 0;
void main(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
CLK_CCOConfig(CLK_OUTPUT_CPU);
CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2,ENABLE);
TIM2_TimeBaseInit(TIM2_PRESCALER_1,254);
TIM2_OC1Init(TIM2_OCMODE_PWM1,TIM2_OUTPUTSTATE_ENABLE,Baifenbi,TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
TIM2_CCxCmd(TIM2_CHANNEL_1, ENABLE);
TIM2_UpdateDisableConfig(ENABLE);
TIM2_ITConfig(TIM2_IT_UPDATE,ENABLE);
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
TIM2_Cmd(ENABLE);
enableInterrupts(); // 开总中断
while (1)
{
TIM2_SetCompare1(Baifenbi);
}
}
stm8s_it.c:
INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
static uint16_t Time = 0;
FlagStatus fs;
fs = TIM2_GetFlagStatus(TIM2_FLAG_UPDATE);
//fs=RESET or SET
if(fs == SET)
{
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
Time++;
if(Time == 10)
{
Time = 0;
Baifenbi++;
if(Baifenbi>255)Baifenbi = 0;
}
}
}
求救,为什么没进入中断,但可以输出PWM,证明时钟有动,但没进入中断响应
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
。。。。。问题已经解决了,问题是:TIM2_UpdateDisableConfig(ENABLE);这个是Disable更新失效使能,所以没波形
但出现新问题,根据上面的周期我调出了62.5KHz的PWM,但每次进入更新中断16us,我在更新中断中:
static uint16_t Time = 0;
Time++;
if(Time == 62500)
{
Time = 0;
Baifenbi+=20;
if(Baifenbi>256)
{
Baifenbi = 0;
GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
}
}
发现时间跟1s有几百毫秒的出入,导致时间一直不准确,请问是什么原因
一周热门 更多>