реклама на сайте
подробности

 
 
> STM32F100 16кБ флешь, Проблемы с портом
XGoblinX
сообщение Mar 26 2011, 10:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-12-10
Пользователь №: 61 586



Всем привет.
Решил поиграться с процессором 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;
}

Всё-равно не работает. Чего еще не хватает?

Сообщение отредактировал XGoblinX - Mar 26 2011, 10:46
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
skripach
сообщение Mar 26 2011, 13:02
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
Светодиод анодом на землю сидит.

Катодом должен "седеть". Ну или анодом на питании, пожалуй лучше.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
XGoblinX
сообщение Mar 26 2011, 13:31
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-12-10
Пользователь №: 61 586



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

Сори. У меня катод на земле. Анод через резюк на порт PB4.
Go to the top of the page
 
+Quote Post
XGoblinX
сообщение Mar 27 2011, 08:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-12-10
Пользователь №: 61 586



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

Всё-равно не тикает. Что может быть? Может кто-то всё же знает?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 27 2011, 19:15
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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

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



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
XGoblinX
сообщение Mar 28 2011, 11:00
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-12-10
Пользователь №: 61 586



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

Да. Я отключил его - Код. Я даже JTAG отрубил. Там не только PB4 Отрубил но еще 2 доп порта: PA15, PB3.
Хорошую идею подкинули.
Нужно посмотреть могут ли они управляться...
Спасибо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016