正在写SPWM波程序,遇到了很多问题,希望大家能帮助讨论
这是中断函数
u16 num = 0;
u16
Duty[]={ 2000, 2035, 2070, 2105, 2140, 2174, 2209, 2244, 2278, 2313, 2347, 2382,
2416, 2450, 2484, 2518, 2551, 2585, 2618, 2651, 2684, 2717, 2749, 2781,
2717, 2749, 2781, 2813, 2845, 2877, 2908, 2939, 2970, 3000, 3030, 3060,
3089, 3118, 3147, 3176, 3204, 3231, 3259, 3286, 3312, 3338, 3364, 3389,
3414, 3439, 3463, 3486, 3509, 3532, 3554, 3576, 3597, 3618, 3638, 3658,
3677, 3696, 3714, 3732, 3749, 3766, 3782, 3798, 3813, 3827, 3841, 3854,
3867, 3879, 3891, 3902, 3913, 3923, 3932, 3941, 3949, 3956, 3963, 3970,
3975, 3981, 3985, 3989, 3992, 3995, 3997, 3999, 4000, 4000, 4000, 3999,
3997, 3995, 3992, 3989, 3985, 3981, 3975, 3970, 3963, 3956, 3949, 3941,
3932, 3923, 3913, 3902, 3891, 3879, 3867, 3854, 3841, 3827, 3813, 3798,
3782, 3766, 3749, 3732, 3714, 3696, 3677, 3658, 3638, 3618, 3597, 3576,
3554, 3532, 3509, 3486, 3463, 3439, 3414, 3389, 3364, 3338, 3312, 3286,
3259, 3231, 3204, 3176, 3147, 3118, 3089, 3060, 3000, 2970, 2939, 2908,
2877, 2845, 2813, 2781, 2749, 2717, 2684, 2651, 2618, 2585, 2551, 2518,
2484, 2450, 2416, 2382, 2347, 2313, 2278, 2244, 2209, 2174, 2140, 2105,
2070, 2035, 2000, 1965, 1930, 1895, 1860, 1826, 1791, 1756, 1722, 1687,
1653, 1618, 1584, 1550, 1516, 1482, 1449, 1382, 1349, 1316, 1283, 1251,
1219, 1187, 1155, 1123, 1092, 1061, 1030, 1000, 970, 940, 911, 882,
853, 824, 796, 769, 741, 714, 688, 662, 636, 611, 586, 561,
537, 514, 491, 468, 446, 424, 403, 382, 362, 342, 323, 304,
286, 268, 251, 234, 218, 202, 187, 173, 159, 146, 133, 121,
109, 98, 87, 77, 68, 59, 51, 44, 37, 30, 25, 19,
15, 11, 8, 5, 3, 1, 0, 0, 0, 1, 3, 5,
8, 11, 15, 19, 25, 30, 37, 44, 51, 59, 68, 77,
87, 98, 109, 121, 133, 146, 159, 173, 187, 202, 218, 234,
251, 268, 286, 304, 323, 342, 362, 382, 403, 424, 446, 468,
491, 514, 537, 561, 586, 611, 636, 662, 688, 714, 741, 769,
796, 824, 853, 882, 911, 940, 970, 1000, 1030, 1061, 1092, 1123,
1155, 1187, 1219, 1251, 1283, 1316, 1349, 1382, 1415, 1449, 1482, 1516,
1550, 1584, 1618, 1653, 1687, 1722, 1756, 1791, 1826, 1860, 1895, 1930};
void TIM1_CC_IRQHandler(void)
{
if(TIM_GetITStatus(TIM1,TIM_IT_CC1) != RESET)
{
TIM_SetCompare1(TIM1,Duty[num]);
num++;
if(num == 360)
num = 0;
}
// TIM_ClearFlag(TIM1, TIM_IT_CC1);
注释掉TIM_ClearFlag这一行程序可以正常工作,但不注释掉输出就是高电平了,不解,还有我用TIM_GetPendingBit就会报错,这种中断最后不是都应该清除标志位吗?是这条语句我没有理解还是整个中断函数有问题?
|