Светодиод MSP430 вообще не мигает

Я пытался включить светодиоды на моем MSP430G2553, и это просто не работает. Я пробовал примеры кода от TI, предварительно сгенерированный проект мигания светодиодов студии композитора кода и даже предыдущий код, который работал на MSP430 из прошлого. Ни один из них не работает. В чем может быть проблема? Может ли это быть неисправным оборудованием? Вот мой код:

#include  <msp430.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  P1DIR |= 0x01;                            // Set P1.0 to output direction

  for (;;)
  {
    volatile unsigned int i;
    volatile unsigned int j;

    P1OUT ^= 0x01;                          // Toggle P1.0 using exclusive-OR

    i = 25000;                              // Delay
    while(i--) {
       j = 2;
       while(j--);
    }
  }
}

person charlee    schedule 24.10.2017    source источник
comment
Это довольно дикая спин-петля. Это лучший способ задержаться на какое-то время?   -  person tadman    schedule 24.10.2017
comment
e2e.ti.com/support/microcontrollers/msp430/f/ 166/т/18638   -  person Bálint    schedule 24.10.2017
comment
Во многих очень простых примерах от TI используются такие циклы объединения, прежде чем погрузиться в сбор энергии ... Довольно часто их можно увидеть, когда пользователь делает самые первые попытки с MCU ...   -  person Matteo Ragni    schedule 24.10.2017
comment
Если примеры проектов, предоставленные TI, не работают (и вы уверены, что они должны работать на вашей плате, вы компилируете их, правильно загружаете и т. д.), я бы сказал, что это довольно сильный индикатор неисправного оборудования. . Какие DIP-переключатели установить? Вы никогда не устанавливали P1DIR напрямую, есть ли шанс, что какие-то другие биты могут быть испорчены?   -  person yano    schedule 24.10.2017
comment
Не работает ничего нам не говорит. Прошивка удалась? Вы можете отладить программу?   -  person CL.    schedule 24.10.2017
comment
Может быть аппаратная проблема. Вы видели, как предыдущий код работал на той же плате в прошлом? Если это так, то плата или светодиод могут быть просто физически сломаны.   -  person kfx    schedule 24.10.2017
comment
@CL Он вообще не мигает. Да, я могу отладить его, и он будет правильно запрограммирован на MSP430.   -  person charlee    schedule 24.10.2017
comment
@tadman Я пробовал другие циклы, но ни один из них не приводит к миганию светодиода.   -  person charlee    schedule 24.10.2017
comment
@kfx Под предыдущим кодом я подразумеваю, что это та же модель uC, но это другая плата.   -  person charlee    schedule 24.10.2017
comment
@yano Да, все строится и загружается правильно. У меня нет DIP-переключателей, и я попытался настроить P1DIR напрямую, но там просто нет мигающих светодиодов.   -  person charlee    schedule 24.10.2017
comment
Можешь попробовать с P1DIR |= 0x6 и P1OUT ^= 0x6?   -  person Matteo Ragni    schedule 24.10.2017
comment
@MatteoRagni Я пробовал P1DIR |= 0x6 и P1OUT ^= 0x6, и это не сработало.   -  person charlee    schedule 25.10.2017
comment
Поскольку совершенно ясно, что это аппаратная проблема, я проголосую за закрытие. Если вы поможете с проверкой оборудования, вы можете попросить об этом на electronics.stackexchange.com.   -  person kfx    schedule 25.10.2017


Ответы (3)


Я столкнулся с проблемой на плате разработчика MSP430FR5994, когда светодиоды не включались для мигающего примера, но включались для проекта «Out Of Box Experience». Сравнив код, я определил, что отличием является эта строка из pmm.c:

//For FRAM devices, at start up, the GPO power-on default
//high-impedance mode needs to be disabled to activate previously
//configured port settings. This can be done by clearing the LOCKLPM5
//bit in PM5CTL0 register
PM5CTL0 &= ~LOCKLPM5;

Размещение этого в верхней части main(), похоже, устраняет проблему, и светодиоды ведут себя так, как ожидалось.

person Gladclef    schedule 18.10.2019
comment
Я пришел сюда в поисках ответа на этот вопрос для MSP430FR2433, и это правильный ответ для моего случая. В примере TI для этого чипа этой строки не было. Добавление решило мою проблему. - person rost0031; 16.07.2020

Можете ли вы попробовать эту версию (все еще цикл опроса, но давайте оставим его очень простым)?

#include <msp430.h>

int main(void) {
  volatile int i;
  WDTCTL = WDTPW | WDTHOLD;
  P1DIR |= 0x01;
  P1OUT = 0x00;

  for (;;) {
    P1OUT ^= 0x01;
    for (i = 0x6000; i > 0; i--) { };
  }
  return 0;
}

Я взял это из одного из моих старых примеров, когда я использовал MSP430 в 2010 году...

person Matteo Ragni    schedule 24.10.2017
comment
Я только что попробовал. К сожалению, похоже, это не работает. - person charlee; 24.10.2017
comment
Поскольку я совершенно уверен в этом коде, я предполагаю, что мы имеем дело с неисправным оборудованием. Мне жаль. - person Matteo Ragni; 24.10.2017
comment
неисправное оборудование или как насчет ваших заголовков/адресов, вы уверены, что они совпадают с вашим конкретным устройством? - person old_timer; 25.10.2017
comment
Общий заголовок включает в себя специальный заголовок. В любом случае, конкретный заголовок для OP — msp430g2553.h. Если заголовок не совпадает, код не компилируется (в общем заголовке есть #error, если не удается получить определение для конкретного оборудования) - person Matteo Ragni; 25.10.2017
comment
Я использовал #include ‹msp430g2553.h› и #include ‹msp430.h›. Ни у одного из них нет мигающего светодиода. - person charlee; 25.10.2017

Попробуйте заменить цикл while на __delay_cycles(1000000);.

Компиляторы могут оптимизировать пустые циклы, даже если переменная цикла отмечена как volatile.

#include  <msp430.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  P1DIR |= 0x01;                            // Set P1.0 to output direction

  for (;;)
  {
    P1OUT ^= 0x01;                          // Toggle P1.0 using exclusive-OR

    __delay_cycles(1000000);
  }
}
person Stephane Hockenhull    schedule 24.10.2017
comment
К сожалению, он все еще не мигает светодиодом. - person charlee; 25.10.2017
comment
Проверьте напряжение на контакте с помощью мультиметра или осциллографа, проверьте другие контакты GPIO (может быть, неправильный), проверьте, работает ли светодиод, убедитесь, что он подключен в правильном направлении, убедитесь, что у вас есть правильный резистор последовательно с этим светодиодом , проверить резистор. Возможно, сгорел контакт MCU или сам светодиод. - person Stephane Hockenhull; 25.10.2017