【问题标题】:How do I get this simple PWM example to work?如何让这个简单的 PWM 示例工作?
【发布时间】:2020-06-08 09:40:28
【问题描述】:

在之前只使用 STM32 之后,我才刚刚开始使用 MSP430 微控制器,而且由于我仍然是所有这一切的初学者,因此变化很大,但我正在努力让一个简单的 PWM 输出正常工作.

在办公室,我们有一块备用的开发板,所以我正在使用它。它是 MSP-TS430PZ100B(USER GUIDE,第 142-144 页),使用的特定微控制器是 MSP430F6736。我正在使用的封装的引脚说明从第 12 页开始。

我正在关注我找到的一个简单的 PWM 示例程序 HERE。但是,我已经更改了输出引脚。查看我正在使用的微控制器的数据表,定时器 TA0 默认映射到 P1.0 和 P1.1,因此我没有像示例中那样使用 P1.2,而是将其更改为 P1.0(P1.0 也是板载 LED 所在的位置)。

所以,我的代码如下所示:

#include <msp430.h> 

int main(void) {

    WDTCTL = WDTPW + WDTHOLD; //Disable the Watchdog timer

    P1DIR |= BIT0; //Set pin 1.0 to the output direction.
    P1SEL |= BIT0; //Select pin 1.0 as PWM output.

    TA0CCR0 = 1000-1;             // PWM Period
    TA0CCTL1 = OUTMOD_7;          // CCR1 reset/set
    TA0CCR1 = 250;                // CCR1 PWM duty cycle
    TA0CTL = TASSEL_2 + MC_1;   // SMCLK, up mode
}

所以我对微控制器进行了编程,但没有任何反应。我在输出上放了一个示波器,甚至没有闪烁。只是保持在0V。该引脚作为输出工作正常,当我编写一个简单的程序来手动切换端口打开/关闭时,它工作正常,但是在尝试这个简单的示例程序时,我什么也得不到。

我假设我忽略了一些简单的东西,但我似乎看不到它。我在这里做错了什么?

【问题讨论】:

  • 您确定引脚 1.0 可用于 PWM 吗?
  • @HeadCode 我提供了数据表的链接。 pin 描述部分并不多,但我将编辑问题并提及页码。但是,是的,P1.0 在我看来应该是可用的,因为它的 TA0 默认映射到引脚 1.0 和 1.1
  • 我希望我有更多的时间来看看这个,但你试过用 TA0CCR0 代替 TA0CCR1 吗?第 73 页让我相信您的寄存器有误。
  • @HeadCode 我两个都用。我在 PWM 周期开始时使用 TA0CCR0。第73页是针图?

标签: msp430 pwm


【解决方案1】:

你的代码看起来不错,除了你需要添加一个睡眠函数或简单地添加一个像 while (1) __no_operation(); 这样的永久循环,以防止处理器执行退出代码,这可能会导致重置并解释为什么您什么都看不到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多