This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、我正在尝试使用 MSP430FR5969上的计时器 B0。 基本上、我想在引脚 P1.4、PIN1.5和 PIN3.4上使用 PWM。 我还希望每1ms 生成一个中断、以在将来执行一些任务。
我已经配置了微控制器、以使用 TBIFG。 如果 TBIE 被禁用、PWM 就会工作、但是当我启用中断(TBIE)以每1ms 生成一个中断时、TBIFG 被置位、但是微控制器不会进入中断例程。
这是我设置计时器的代码部分:
//计时器 B0:PWM TB0CTL = TBSSEL_SMCLK |ID_1| MC_UP | TBCLR | TBIE; // SMCLK、向上计数模式、清零 TAR TB0EX0 = TBIDEX_7; // DIV8:SO TIMER_CLK = SMCLK/8 TB0CCR0 = 2000; // PWM 周期1kHz/Tick 1ms 计时器 TB0CCTL1 = OUTMOD_7; // P1.4:CCR1重置/置 TB0CCR1 = 500; // P1.4:CCR1 PWM 占空比 TB0CCTL2 = OUTMOD_7; // P1.5:CCR2重置/置 TB0CCR2 = 1000; // P1.5:CCR2 PWM 占空比 TB0CCTL3 = OUTMOD_7; // P3.4:CCR3复位/置位 TB0CCR3 = 1500; // P3.4:CCR3 PWM 占空比 //中断 _bis_SR_register (GIE); //启用中断
这个是 main: #include #include #include "Setup.h" #include "Screen_Nextion.h" #include "otel_functions.h" int main (void) { WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 Setup(); while (1) { SEND_Data_TO_PC ("aaa"); _delay_cycles (32000000); SEND_Data_TO_PC ("BBB"); _DELAY_CYCLES (32000000); } } // Timer0_B0中断 #pragma vector=TIMER0_B0_vector __interrupt void TIMER0_B0_ISR (void) { switch (__even_in_range (TB0IV、TB0IV_TBIFG)) }{ 案例 TB0IV_NONE: 中断; 案例 TB0IV_TBCCR1: 中断; // CCR1中断 案例 TB0IV_TBCCR2: 中断; // CCR2中断 案例 TB0IV_TBCCR3: 中断; //CCR3中断 案例 TB0IV_TBCCR4: 中断; // CCR4中断 案例 TB0IV_TBCCR5: 中断; // CCR5中断 案例 TB0IV_TBCCR6: 中断; // CCR6中断 案例 TB0IV_TBIFG: P1OUT ^= BIT0; 中断; // TBIFG 中断 默认值:break; } 我 还尝试使用捕获/比较中断(CCIE/CCIFG)代替 TBIFG 中断请求、所有操作都很好。 感谢 Riccardo