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.

msp430f149的timer B能否实现一个时刻p41、p42、p43产生pwm,而p44、p45做定时器定时?



天编了个小程序,想实现同一时刻,timer B几个i o输出pwm,另外的 i  o 输出定时器定时,结果一直出错,pwm波可以产生,定时器不走时。请问是什么原因

  • gj chen, 这样的用法肯定是可以的。建议的参考一下MSP430Ware中有关MSP430f14x有关TimerB的例程吧。如果你装了CCS的话,例程所在路径为:

    C:\ti\ccs5_3_0\ccsv5\ccs_base\msp430\MSP430ware_1_40_00_24\examples\devices\1xx\MSP430x13x_MSP430F14x_MSP430F15x_MSP430F16x_Code_Examples\C

    有关TimerB的例程有:

    fet140_tb_01.c Timer_B, Toggle P1.0, CCR0 Cont. Mode ISR, DCO SMCLK
    fet140_tb_02.c Timer_B, Toggle P1.0, CCR0 Up Mode ISR, DCO SMCLK
    fet140_tb_03.c Timer_B, Toggle P1.0, Overflow ISR, DCO SMCLK
    fet140_tb_04.c Timer_B, Toggle P1.0, Overflow ISR, 32kHz ACLK
    fet140_tb_05.c Timer_B, Toggle P1.0, CCR0 Up Mode ISR, 32kHz ACLK
    fet140_tb_06.c Timer_B, PWM TB1-6, Up Mode, DCO SMCLK
    fet140_tb_07.c Timer_B, PWM TB1-6, Up Mode, 32kHz ACLK
    fet140_tb_08.c Timer_B, PWM TB1-2, Up Mode, HF XTAL ACLK
    fet140_tb_09.c Timer_B, PWM TB1-2, Up/Down Mode, DCO SMCLK
    fet140_tb_10.c Timer_B, PWM TB1-2, Up/Down Mode, 32kHz ACLK
    fet140_tb_11.c Timer_B, PWM TB1-2, Up/Down Mode, HF XTAL ACLK

    另外,请问你”i  o 输出定时器定时“是什么意思?例如你定时0.5s, 是每0.5s后IO输出翻转一次吗?你如何知道定时器不走的,是在查看什么?

  • 你好,因为我要实现这样一个功能,我想实现timer  b 的p41  p42  p43 产生一个占空比每0.1s增加10%的pwm波,所以我就借鉴了ti提供的小例程,结果p41  p42  p43 一直输出我初始化的指定的占空比的pwm波,并没有每0.1s增加10%,所以我就怀疑是定时器没工作,我用的timer b的p44口做定时器。
  • 完全可以实现,ti的网站有例程。

  • gj chen, 你这里的p41  p42  p43指的是p4.1,p4.2,p4.3吗?是控制CCR1, CCR2, CCR3 输出3路一样的PWM波吗?然后在定时0.1s的中断(CCR4)中更改CCR1, CCR2, CCR3,让其占空比增加吗? 你可以先试试可不可以进入0.1s的定时中断。

  • 你说的意思完全正确,就是我用p4.1 p4.2 p4.3做pwm输出,如果用timer A做0.1s定时,则现象和我期望的一样,但是如果改成用timer B的p4.4做定时,则现象不对,导致我的单片机出现假死,因为我的程序里面做了判断,如果没到定时0.5s,则一直等待

  • 根据你的描述,用TIMER A 0.1S定时时正常,TIMER B定时不正常,“用timer B的p4.4做定时”(这句话是否可以理解为P4.4定时改变高低电平输出)。有可能是因为你用TIMER B做PWM输出,而同时用它做定时器时就要考虑CCR0的值、计数方式的设置问题,特别是计数方式PWM输出和定时有冲突时会发生你说的不正常问题。

    可以通过用TIME B定时0.1S进入中断,来查找是否是设置的问题。

  • 好的,谢谢。我先试试

  • gj chen, 你先按照例程单独使用TimerB的CCR4做个0.1s的定时程序,看看是否可以成功进入定时中断,而后再把PWM输出加上。一步一步来,看看问题出现在哪里。