STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 63
Зарегистрирован: Пн апр 20, 2015 14:00:32

Сообщение Мяукните! »

Скорей всего, никаких. SWD для того и делали, что бы сделать лучше.
Чик например..
Контактная информация:
Реклама
Родился
Сообщения: 14
Зарегистрирован: Вт окт 30, 2012 23:34:54

Сообщение alexi$ »

Кто скачал stm32cube_mx 4.14 и библиотеку для f1 1.3.1 скиньте пожалуйста на alex555cs@yandex.ru
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 63
Зарегистрирован: Пн апр 20, 2015 14:00:32

Сообщение Мяукните! »

О.. хоспади, Вы до сих пор что ли не скачали? Сейчас сделаем.
Я скачал за минуту :tea:
Контактная информация:
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Не могу скачать с сайта ST.com выдает SORRY, PAGE NOT FOUND. Это у меня одного или еще у кого ?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Это вас судьба оберегает от трагической ошибки. :)))
Реклама
Открыл глаза
Сообщения: 62
Зарегистрирован: Вт ноя 03, 2009 07:44:57

Сообщение SyncM »

Скажите пожалуйста можно ли как то сделать чтобы работало условие

vibor=0;
switch (vibor){
case 0:
#define shtok vxod5
break;
case 4:
#define shtok vxod1
break;

}

все время берет значение vxod1
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Блеать, когда же вы начнете читать книги. Ну хоть что-нибудь прочитайте перед тем как начать программировать. Потому что вот эта твоя писанина - это как держать молоток не той стороной. Не той стороной, Карл!

Ладно, еще раз. define - это директива препроцессора. Препроцессор работает до компилятора и просто заменяет одни последовательности символов на другие. Поэтому твой, извиняюсь, бред, после препроцессинга превратится в:

Код: Выделить всё

vibor=0;
switch (vibor)
{
    case 0:
        break;
    case 4:
        break;
}
Открыл глаза
Сообщения: 62
Зарегистрирован: Вт ноя 03, 2009 07:44:57

Сообщение SyncM »

Но можно ли как-то такое сделать по другому???
Друг Кота
Аватара пользователя
Сообщения: 25391
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Вероятно

Код: Выделить всё

shtok =: vxodX;
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

SyncM писал(а):Но можно ли как-то такое сделать по другому???
Зависит от того как это дальше используется.
Открыл глаза
Сообщения: 62
Зарегистрирован: Вт ноя 03, 2009 07:44:57

Сообщение SyncM »

vxod это какой то вход порта микроконтроллера
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Тогда так:

Код: Выделить всё

void do_something_with_port_1(void)
{
    // Делаем действие 1 с портом 1.
    // Делаем действие 2 с портом 1.
    // ...
    // Делаем действие N с портом 1.
}

void do_something_with_port_2(void)
{
    // Делаем действие 1 с портом 2.
    // Делаем действие 2 с портом 2.
    // ...
    // Делаем действие N с портом 2.
}

// Далее, где нужно вызываем либо первую, либо вторую функцию.
switch (vibor)
{
    case 0:
        do_something_with_port_1();
        break;
    case 4:
        do_something_with_port_1();
        break;
}

Или так:

Код: Выделить всё

void do_something_with_port(int vibor)
{
    if (vibor== 0)
        // Делаем действие 1 с портом 1.
    else if (vibor== 4)
        // Делаем действие 1 с портом 2.

    if (vibor== 0)
        // Делаем действие 2 с портом 1.
    else if (vibor== 4)
        // Делаем действие 2 с портом 2.  

    //...

    if (vibor== 0)
        // Делаем действие N с портом 1.
    else if (vibor== 4)
        // Делаем действие N с портом 2.
}


// Далее, вызываем функцию, и передаем ей "номер" порта, пускай она сама разбирается.
do_something_with_port(vibor)
Ну и такой вариант, посложнее:

Код: Выделить всё

volatile int *port_address;
switch (vibor)
{
    case 0:
        port_address = взять_адрес_порта(vxod5);
        break;
    case 4:
        port_address = взять_адрес_порта(vxod1);
        break;
}

// Далее работаем с конкретным адресом конкретного порта.
// ...
Внимание! Выше приведен всего лишь псевдокод. Не стоит пытаться бездумно его копировать и надеяться, что он заработает. Он годится только для общего понимания идеи.
Открыл глаза
Сообщения: 62
Зарегистрирован: Вт ноя 03, 2009 07:44:57

Сообщение SyncM »

Спасибо решил так:

uint16_t pin[16]={GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3,
GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7,
GPIO_Pin_8, GPIO_Pin_9, GPIO_Pin_10, GPIO_Pin_11,
GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15};

GPIO_TypeDef* por[2]={GPIOA,GPIOB};

unsigned int shtok=pin[11];
unsigned int shtok5=por[0];

while(3){
if (GPIO_ReadInputDataBit (shtok5, shtok)==1){
String_print(10,10,"1111",Green,Black,2,2);
}
if (GPIO_ReadInputDataBit (shtok5, shtok)==0){
String_print(10,10,"1111",Red,Black,2,2);
}

}
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт мар 20, 2012 07:16:43

Сообщение стьюдент »

Подскажите, можно ли как-нибудь в отладчике отследить изменение флага EOC (плата STM32L-Discovery среда Keil). И второй вопрос, при флаге EOCS=0 флаг EOC должен устанавливаться только в конце всех преобразований или только после первого преобразования из группы? Нужно ли чистить флаг EOC перед самым первым запуском преобразования?
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 23
Зарегистрирован: Сб авг 22, 2015 08:32:37
Откуда: Киев

Сообщение Porada »

Здравствуйте. У меня вопрос по тактированию STM32. Насколько я успел разобраться, предусмотрено три способа тактирования - от внешнего кварца, от внутреннего RC-генератора и с использованием множителя. При этом, если использовать внутренний RC-генератор страдает точность, до 1% при 25 градусах и более значительно (не помню цифру) при температуре от 0 до 75. Вопрос - при каких применениях эти смещения тактовой частоты скажутся на реальной работе устройства? Может, есть ещё какие-то недостатки применения внутреннего RC-генератора? Спасибо.
Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Приветствую :) .
В stm32f30x.h отсутствует работа с регистрами USB. Решил добавить туда дефайны. Все поставил, но оказалось там нет описания для USB-> . Судя по другой периферии должны быть еще #define USB_BASE и #define USB. Должно быть что-то вроде:

Код: Выделить всё

#define USB                ((USB_TypeDef *) USB_BASE)
#define USB_BASE       (APB1PERIPH_BASE + 0xХХХХХХХХ)
Вот как раз этот XXXXXXXX адрес я никак и не могу найти. Может кто-нибудь подсказать где его взять и в правильном ли направлении я двигаюсь? :solder:
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Сообщение BorisSPB »

Определения для USB находятся в STM32_USB-FS-Device_Lib_Vx.x.x. Надо скачать эту библиотеку с сайта ST.
А вообще все адреса указаны в Reference Manual.
СпойлерUniversal serial bus full-speed device interface (USB) RM0008
612/1096 Doc ID 13902 Rev 14
23.5 USB registers
The USB peripheral registers can be divided into the following groups:
● Common Registers: Interrupt and Control registers
● Endpoint Registers: Endpoint configuration and status
● Buffer Descriptor Table: Location of packet memory used to locate data buffers
All register addresses are expressed as offsets with respect to the USB peripheral registers
base address 0x4000 5C00, except the buffer descriptor table locations, which starts at the
address specified by the USB_BTABLE register. Due to the common limitation of APB1
bridges on word addressability, all register addresses are aligned to 32-bit word boundaries
although they are 16-bit wide. The same address alignment is used to access packet buffer
memory locations, which are located starting from 0x4000 6000.
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

BorisSPB писал(а):Надо скачать эту библиотеку с сайта ST.
Хочу без библиотеки сделать. Но для образца скачал и посмотрел дефайны. Нифига не понял :dont_know: Может кто-нибудь помочь разобраться?
Накидал по подобию в файле stm32f30x.h :
Спойлер

Код: Выделить всё

typedef struct
{
  __IO uint32_t CNTR;       
  __IO uint32_t ISTR;      
  __IO uint32_t FNR;        
  __IO uint32_t DADDR;  
  __IO uint32_t BTABLE;  
  __IO uint32_t EP;     
} USB_TypeDef;


#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
#define APB1PERIPH_BASE       PERIPH_BASE
#define USB_BASE              (APB1PERIPH_BASE + 0xXXXXXXXX)
#define USB                   ((TIM_TypeDef *) USB_BASE)

/*                       ISTR interrupt events                                */
/******************************************************************************/
#define ISTR_CTR    (0x8000) /* Correct TRansfer (clear-only bit) */
#define ISTR_DOVR   (0x4000) /* DMA OVeR/underrun (clear-only bit) */
#define ISTR_ERR    (0x2000) /* ERRor (clear-only bit) */
#define ISTR_WKUP   (0x1000) /* WaKe UP (clear-only bit) */
#define ISTR_SUSP   (0x0800) /* SUSPend (clear-only bit) */
#define ISTR_RESET  (0x0400) /* RESET (clear-only bit) */
#define ISTR_SOF    (0x0200) /* Start Of Frame (clear-only bit) */
#define ISTR_ESOF   (0x0100) /* Expected Start Of Frame (clear-only bit) */
............
И по поводу адреса. Как я понял, регистры разнесены от 0x4000 6000, а другие от 0x4000 5C00.
Блин, казалось все таким простым, но куда ни копни - везде ж*па... :facepalm:
Открыл глаза
Аватара пользователя
Сообщения: 63
Зарегистрирован: Пн апр 20, 2015 14:00:32

Сообщение Мяукните! »

Porada

Сколько знаю МК, каких-либо проблем РЦ не вызывали. Наоборот, они надёжнее - кварц потенциально ненадёжный элемент.

Но стабильность может оказаться и хуже 1%. Основной недостаток РЦ - низкая точность, вплоть до невозможности использовать протоколы, алгоритмы и интерфейсы, жёстко привязанные ко времени. Проблемы могут начаться даже на элементарном USART..
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2185
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков

Сообщение watchmaker »

Но стабильность может оказаться и хуже 1%.
На AVR нестабильность при изменении напряжения питания 2.7..5 В нестабильность могла доходить до 5%. Так что 1% это ещё неплохо.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Контактная информация:
Ответить

Вернуться в «ARM»