Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F100 16кБ флешь
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
XGoblinX
Всем привет.
Решил поиграться с процессором STM32F100R4 в иаре (дургих не пробовал).
Вот код взятый тут и немного модифицированный:
Код
#include "stm32f10x.h"

void InitAll( void);
void Delay( unsigned int Val);

int main()
{

        InitAll();

        while(1)
        {
                // Set PB.4 bit
                GPIOB->BSRR = GPIO_BSRR_BS4;
                Delay( 600000);

                // Reset PB.4 bit
                GPIOB->BSRR = GPIO_BSRR_BR4;
                Delay( 600000);
        }
}
  
  
//------------------------------------------------------------------------------

void InitAll(void)
{
        // Enable PORTB Periph clock  
        RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
        // Clear PB.4 control register bits
        GPIOB->CRL &= ~(GPIO_CRL_MODE4 | GPIO_CRL_CNF4);
        // Configure PB.4 as Push Pull output at max 2Mhz
        GPIOB->CRL |= GPIO_CRL_MODE4_1;
        return;
}

//------------------------------------------------------------------------------

void Delay( unsigned int Val) {
        for(; Val != 0; Val--)
        {
                __NOP();
        }
}

Разкоментировал в файле stm32f10x.h строку #define STM32F10X_LD_VL.
Пин висит всегда в состоянии подтянутом к высокому уровню.
Пробовал и другие порты. Результат тот же.

Порт PB4 после сброса занят JTAG-ом (NJTRST in PU).
Но я использую SWD.

С первого взгляда, кажется, что всё верно.
Чего я не понимаю?
Спасибо.

Код ниже работает прекрасно. Порт B Pin 12:

Код
#include "stm32f10x.h"

void InitAll( void);
void Delay( unsigned int Val);

int main()
{

        InitAll();

        while(1)
        {
                // Set PB.12 bit
                GPIOB->BSRR = GPIO_BSRR_BS12;
                Delay( 600000);

                // Reset PB.12 bit
                GPIOB->BSRR = GPIO_BSRR_BR12;
                Delay( 600000);
        }
}
  
  
//------------------------------------------------------------------------------

void InitAll(void)
{
        // Enable PORTB Periph clock  
        RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
        // Clear PB.12 control register bits
        GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12);
        // Configure PB.12 as Push Pull output at max 2Mhz
        GPIOB->CRH |= GPIO_CRH_MODE12_1;
        return;
}

//------------------------------------------------------------------------------

void Delay( unsigned int Val) {
        for(; Val != 0; Val--)
        {
                __NOP();
        }
}




Вернул исходный код, но поправил строчку в инициализации:
Код
void InitAll(void)
{
        //JTAG-DP Disabled and SW-DP Enabled
        AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
        //PB4 released.
  
        // Enable PORTB Periph clock  
        RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
        // Clear PB.4 control register bits
        GPIOB->CRL &= ~(GPIO_CRL_MODE4 | GPIO_CRL_CNF4);
        // Configure PB.4 as Push Pull output at max 2Mhz
        GPIOB->CRL |= GPIO_CRL_MODE4_1;
        return;
}

Всё-равно не работает. Чего еще не хватает?
skripach
GPIOB->BRR= GPIO_BSRR_BS4;

не?
XGoblinX
Цитата(skripach @ Mar 26 2011, 10:56) *
GPIOB->BRR= GPIO_BSRR_BS4;

не?

Похоже что нет.
У Вас бит резет регистр, а у меня используется сет резет регистр.
Т.е. ваш только сбрасывает, а у меня как сбрасывает так и ставит.
В любом случае я попробовал вариант. Не получилось...
Спасибо.

Еще заметил, что не в 3.3В пин, а в 1.75В.
У меня он через 1.5КОм светодиодом управлять должен. Светодиод анодом на землю сидит. Т.е. при сет должен загораться.
skripach
Цитата
Светодиод анодом на землю сидит.

Катодом должен "седеть". Ну или анодом на питании, пожалуй лучше.
XGoblinX
Цитата(skripach @ Mar 26 2011, 13:02) *
Катодом должен "седеть". Ну или анодом на питании, пожалуй лучше.

Сори. У меня катод на земле. Анод через резюк на порт PB4.
XGoblinX
Цитата(XGoblinX @ Mar 26 2011, 13:31) *
Сори. У меня катод на земле. Анод через резюк на порт PB4.

Всё-равно не тикает. Что может быть? Может кто-то всё же знает?
AHTOXA
Цитата(XGoblinX @ Mar 27 2011, 14:42) *
Всё-равно не тикает. Что может быть? Может кто-то всё же знает?

Я правильно понял, что с ногой PB12 работает, а с PB4 - нет?
И при этом нога PB4 после резета является ногой NJTRST?
Видимо надо отключить её от JTAG, не? Например, так:
Код
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_NOJNTRST;

XGoblinX
Цитата(AHTOXA @ Mar 27 2011, 19:15) *
Я правильно понял, что с ногой PB12 работает, а с PB4 - нет?
И при этом нога PB4 после резета является ногой NJTRST?
Видимо надо отключить её от JTAG, не? Например, так:
Код
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_NOJNTRST;

Да. Я отключил его - Код. Я даже JTAG отрубил. Там не только PB4 Отрубил но еще 2 доп порта: PA15, PB3.
Хорошую идею подкинули.
Нужно посмотреть могут ли они управляться...
Спасибо.
AHTOXA
Цитата(XGoblinX @ Mar 28 2011, 17:00) *
Да. Я отключил его - Код. Я даже JTAG отрубил.

Пардон, не заметилsm.gif Попробуйте ещё включить тактирование AFIO, раз уж мы используем альтернативную функцию порта PB4:
Код
RCC->APB2ENR |=RCC_APB2ENR_AFIOEN;
XGoblinX
Цитата(AHTOXA @ Mar 28 2011, 15:59) *
Пардон, не заметилsm.gif Попробуйте ещё включить тактирование AFIO, раз уж мы используем альтернативную функцию порта PB4:
Код
RCC->APB2ENR |=RCC_APB2ENR_AFIOEN;

Заколдованный пин smile3046.gif
Попробовал и снова не получилось.
Я уже думаю проще плату переразвести и обойти эти грабли.

Код
#include "stm32f10x.h"

//STAT_LED_CTRL
#define STAT_LED_ON()  do {GPIOB->BSRR = GPIO_BSRR_BS4;} while(0)
#define STAT_LED_OFF() do {GPIOB->BSRR = GPIO_BSRR_BR4;} while(0)

//CA_POWER_CTRL
#define CA_ON()    do {GPIOC->BSRR = GPIO_BSRR_BR10;} while(0)
#define CA_OFF()   do {GPIOC->BSRR = GPIO_BSRR_BS10;} while(0)

void InitAll( void);
void Delay( unsigned int Val);

int main()
{
        InitAll();
        while(1)
        {
                STAT_LED_ON();
                CA_ON();
                Delay( 1200000);

                STAT_LED_OFF();
      CA_OFF();
                Delay( 1200000);
        }
}
  
  
//------------------------------------------------------------------------------

void InitAll(void)
{
    /*    
          JTAG-DP Disabled and SW-DP Enabled
          PB3 (PB3 only if not using asynchronous trace), PB4, PA15 released.
      */
    AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
        


      //Init PC10
      {
          // Enable PORTC Periph clock  
        RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
        // Clear PC.10 control register bits
        GPIOC->CRH &= ~(GPIO_CRH_MODE10 | GPIO_CRH_CNF10);
        // Configure PC.10 as Push Pull output at max 2Mhz
        GPIOC->CRH |= GPIO_CRH_MODE10_1;
    }
    
    //Init PB4:
    {
        // Enable PORTB Periph clock  
        RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
        // Clear PB.4 control register bits
        GPIOB->CRL &= ~(GPIO_CRL_MODE4 | GPIO_CRL_CNF4);
        // Configure PB.4 as Push Pull output at max 2Mhz
        GPIOB->CRL |= GPIO_CRL_MODE4_1;
    }
        
              RCC->APB2ENR |=RCC_APB2ENR_AFIOEN;
        
    return;
}

//------------------------------------------------------------------------------

void Delay( unsigned int Val) {
        for(; Val != 0; Val--)
        {
                __NOP();
        }
}
skripach
Посмотрите пример из папки с иаром, там есть по ремапу JTAG.
AHTOXA
Попробуйте строку
Код
    RCC->APB2ENR |=RCC_APB2ENR_AFIOEN;

поставить до строки
Код
    AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;


------------
ЗЫ. Проверил живьём - так PB4 работает.
Только задержку перепишите, типа так:
Код
void Delay( unsigned int Val) {
    volatile int i;
    for(i = 0; i < Val; i++)
        __NOP();
}
XGoblinX
Цитата(AHTOXA @ Mar 29 2011, 17:22) *
Попробуйте строку
Код
    RCC->APB2ENR |=RCC_APB2ENR_AFIOEN;

поставить до строки
Код
    AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;


------------
ЗЫ. Проверил живьём - так PB4 работает.
Только задержку перепишите, типа так:
Код
void Delay( unsigned int Val) {
    volatile int i;
    for(i = 0; i < Val; i++)
        __NOP();
}

Просто супер!!! sm.gif
Спасибо a14.gif


По поводу задержки согласен. С оптимизацией будет попа.

Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.