Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Сб мар 24, 2018 14:56:43

Myp3ik писал(а):А 32 разрядного таймера нет... Вернее есть, но он занят.
С этого нужно было начинать.
Тогда цепочка таймеров, если есть два свободных. Или один таймер и переменная-счетчик в прерывании по переполнению.

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

Сб мар 24, 2018 16:54:12

Таймер будет переполняться

Пределетелем можно поделить тактовую 16-и битного таймера аж на 65535, например 48000000Гц/65535 = 732.43Гц (1.37мС), если не ошибаюсь - до переполнения будет больше минуты

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

Сб мар 24, 2018 17:29:27

А если частота плавает от 2 Гц до 600 кГц какой делитель поставить ?

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

Сб мар 24, 2018 18:19:12

пределитель можно менять на лету
2Гц это 500мС: делим тактовую 48000000/48000= 1000Гц (1 мС)
600Гц это 1666.6мкС: делим тактовую 48000000/48= 1000000Гц (1 мкС)

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

Сб мар 24, 2018 21:04:09

Эт фсё фигня. Разъясните где опечатка? или что. В RM0091 для TIM1 написано:
Код:
Table 54. TIMx Internal trigger connection
Slave TIM            ITR0 (TS = 000)         ITR1 (TS = 001)          ITR2 (TS = 010)       ITR3 (TS = 011)
TIM1                           TIM15                TIM2                  TIM3                  TIM17

Дык вот... у TIM17_CR2 нету регистра MMS. У TIM7 есть, но его самого нет.

Нет, я вообще ничего не понимаю. Для TIM2/3 написано, что у них мастером может быть TIM14 (кстати, тоже ITR3), но у TIM14 вообще нет регистра CR2, не говоря уже об MMS.

нашел в stm32f051x8.h такое:
Код:
#define IS_TIM_MASTER_INSTANCE(INSTANCE)\
  (((INSTANCE) == TIM1)    || \
   ((INSTANCE) == TIM2)    || \
   ((INSTANCE) == TIM3)    || \
   ((INSTANCE) == TIM6)    || \
   ((INSTANCE) == TIM15))

#define IS_TIM_SLAVE_INSTANCE(INSTANCE)\
  (((INSTANCE) == TIM1)    || \
   ((INSTANCE) == TIM2)    || \
   ((INSTANCE) == TIM3)    || \
   ((INSTANCE) == TIM15))
Это относится к делу? или этот TIM17 мастер есть только у других контроллеров?

p.s. Кажется медленно начинает доходить, что TIM17 может давать только update event поэтому регистра MMS у него и нет - нечего выбирать. Смеха для поставил CubeMX, надеялся, что смогу графично установить эти связи, но пока не нашел такой фичи. Назначить подчинённому канал ITR могу, но это нигде больше не вижу.

p.p.s. Сделал TIM2 ведущий, TIM1 ведомый. Показания как-то не впечатлили...

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

Пн мар 26, 2018 08:53:56

Я мож чего пропустил, но не проще ли зарядить таймер захвата на максимальное разрешение и попутно считать переполнения в софте?

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

Пт апр 06, 2018 11:08:27

Здравствуйте. Помогите выбрать среду разработки для STM32. В Инете много информации, но у меня особый случай. Я пишу простые но быстрые программы требовательные к точным интервалам, и поэтому пишу на ассемблере. Си знаю поверхностно. Я начинал с PIC, но потом разобравшись что к чему (и кто быстрее) перешёл на AVR. Сейчас уверенно пишу разное в AVRstudio 4.19. Но вот стало не хватать производительности, а главное разрядности МК.
ВОПРОС: Какая среда разработки достаточно хорошо поддерживает ассемблер и удовлетворяет потребности новичка и опытного? По предварительной информации я склоняюсь к Keil, какое ваше мнение? Какие вообще есть варианты для моего случае? Очень хочется чтоб среда разработки была похожа на AVRstudio.

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

Пт апр 06, 2018 11:47:45

ВячеславX писал(а):По предварительной информации я склоняюсь к Keil
Среда платная (бесплатно только до 32 КБ).
Берите бесплатную среду с компилятором GCC, скажем EmBitz. Асм код нормально компилирует и отлаживает, проверено.

Только на асме писать не очень удобно. Библиотеки от производителя под Си.

ВячеславX писал(а):Я пишу простые но быстрые программы требовательные к точным интервалам
Многое можно сделать аппаратно, что даст скорость и точность.

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

Вт апр 10, 2018 22:03:15

Честно старался как мог, но все же сдаюсь и прощу помощи, уважаемые.
Итак имеется stm32f051 (discovery) пытаюсь подключить экран от нокиа 1100 (драйвер pcf8814) из возможных интерфейсов только 3-line SPI, CS дергается софтово.


Спойлер
Код:
#define CS_HIGH   (GPIOA->BSRR |= GPIO_BSRR_BS_6)
#define CS_LOW  (GPIOA->BSRR |= GPIO_BSRR_BR_6)
#define RST_HIGH  (GPIOA->BSRR |= GPIO_BSRR_BS_4)
#define RST_LOW (GPIOA->BSRR |= GPIO_BSRR_BR_4)

#define CMD 0
#define DATA 1

void SPI1_init(void)
{   
  /*
   PA4 - RES
   PA5 - SPI1_SCK
   PA6 - CS (soft managment)
   PA7 - SPI1_MOSI
   */
   
   RCC->AHBENR |=RCC_AHBENR_GPIOAEN;   
  GPIOA->MODER |=
                GPIO_MODER_MODER4_0 | 
                GPIO_MODER_MODER5_1 | 
                GPIO_MODER_MODER6_0 | 
                GPIO_MODER_MODER7_1;   
     
  GPIOA->OSPEEDR |=
                GPIO_OSPEEDER_OSPEEDR4_1 |
                GPIO_OSPEEDER_OSPEEDR5_1 |
                GPIO_OSPEEDER_OSPEEDR6_1 |
                GPIO_OSPEEDER_OSPEEDR7_1;
         
  RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
  SPI1->CR1 |=
               SPI_CR1_BR_0 |
               SPI_CR1_BR_1 |
               SPI_CR1_BR_2 |
               SPI_CR1_CPOL |
               SPI_CR1_CPHA |
               SPI_CR1_MSTR |
               SPI_CR1_BIDIOE |           
               SPI_CR1_SSM ;
 
   SPI1->CR2  = 0x800;   //  9 bit       
  SPI1->CR1 |= SPI_CR1_SPE;   
}
void SPI_Send (uint16_t data, bool cd_flag)
{       
   if (cd_flag)
   {
      SPI1->DR = data | 0x100; //set D/C = 1
   }else{
      SPI1->DR = data;
   }
   
   while (SPI1->SR & SPI_SR_FTLVL)   
   {
      //FIFO waiting
   }
   
   while (!(SPI1->SR & SPI_SR_TXE))   
   {
      //Buffer waining
   }
      
}

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

Ср апр 11, 2018 11:42:04

В лом мусор вытирать , пример старый на nokia1200.
Код:
 void SPI1_init(void)
   {
      
      RCC->AHBENR |=RCC_AHBENR_GPIOAEN;
      
      RCC->APB2ENR |=RCC_APB2ENR_SPI1EN;
      
      
      GPIOA->MODER &=~
                  //GPIO_MODER_MODER4 |
                  GPIO_MODER_MODER5 |
                GPIO_MODER_MODER6 |
                GPIO_MODER_MODER7
                                   ;
      GPIOA->MODER|=
              //GPIO_MODER_MODER4_1|
              GPIO_MODER_MODER5_1|
              GPIO_MODER_MODER6_1|
              GPIO_MODER_MODER7_1
                                 ;
                  
      
      GPIOA->OSPEEDR|=
               GPIO_OSPEEDER_OSPEEDR4|
               GPIO_OSPEEDER_OSPEEDR5|
               GPIO_OSPEEDER_OSPEEDR6|
               GPIO_OSPEEDER_OSPEEDR7
                                     ;
                                                   
   
      
   SPI1->CR1 |=
            SPI_CR1_BR_0 |     //
           SPI_CR1_MSTR |
           SPI_CR1_SSI    |            
                SPI_CR1_SSM             
                         ;   
   SPI1->CR2  = 0x800;   //  9 bit
    
          SPI1->CR1 |= SPI_CR1_SPE;
   
   }
   



Код:
#define CMD    0
#define DATA   1
#define CS_ENABLE GPIOA->BSRR = GPIO_BSRR_BR_4 
#define CS_DISABLE GPIOA->BSRR = GPIO_BSRR_BS_4


Код:

void Lcd_Write(uint16_t cmd, uint16_t data)
 {
    //uint16_t temp =cmd<<8;
   
    //SPI_Send(data |cmd<<8); 
    while(!(SPI1->SR & SPI_SR_TXE));
   SPI1->DR =data |cmd<<8;
   
 }


 void Lcd_Init (void)
 {
     RCC->AHBENR |=RCC_AHBENR_GPIOAEN;
       GPIOA->MODER|=GPIO_MODER_MODER4_0;
    CS_ENABLE;
    Delay_mS(5);
    SPI1_init();
    //Delay_mS(5);
   
     Lcd_Write ( CMD , 0xe2 ); //soft reset
    Lcd_Write ( CMD , 0x3d ); // charge pump
    Lcd_Write ( CMD , 0x01 ); // charge  pump =4
    Lcd_Write ( CMD , 0x1e ); // add vop
    Lcd_Write ( CMD , 0x91 ); //
    Lcd_Write ( CMD , 0xa4 ); //
    Lcd_Write ( CMD , 0x2f ); //     
    Lcd_Write ( CMD , 0xc8 ); // 
   

   
    Lcd_Clear(); // clear LCD
   
    Delay_mS(10);   
    CS_DISABLE;
   
 }

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

Ср апр 11, 2018 12:29:48

В лом мусор вытирать , пример старый на nokia1200.
Код:
      GPIOA->MODER|=
              //GPIO_MODER_MODER4_1|
              GPIO_MODER_MODER5_1|
              GPIO_MODER_MODER6_1|
              GPIO_MODER_MODER7_1
                                 ;


dosikus, объясните пожалуйста почему все порты настраиваются на альтернативную функцию? Если тот же CS мы дергаем руками он должен быть простым выходом?

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

Ср апр 11, 2018 12:35:26

CS на PA4 и здесь он заремарен, мусор же говорю...

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

Ср апр 11, 2018 13:17:57

ВОПРОС: Какая среда разработки достаточно хорошо поддерживает ассемблер и удовлетворяет потребности новичка и опытного? По предварительной информации я склоняюсь к Keil, какое ваше мнение? Какие вообще есть варианты для моего случае? Очень хочется чтоб среда разработки была похожа на AVRstudio.

Начинал с AVR. Недели две выбирал среду - студия 4, кодвижн, микро С... В итоге по настановлению свыше сел за IAR. Когда в руки попался дискавери - просто скачал версию IAR для ARM. CubeMx сразу генерит для него проект - не надо ничего ковырять в инициализациях, периферия поднимается за полчаса а дальше чисто кодинг. Сейчас беру самые свежие версии с сайта производителя - лекарство универсальное и проверенно работает на обе версии. Если религия не позволяет, есть триал версии - или по коду обрезает (не помню сколько потолок), или 30 дней все включено. Выбор за Вами.
P.S. на комп ставятся паралельно любые версии иара, и ставятся за пару минут, а не 3 часа как "грамматическая ошибка на уровне 4 класса" студия от атмел, извините. Из коробки поддерживает отладчики (если использовать для аврок с фирменым айсом, то надо дровишки поставить - или студию установить-удалить, или могу дать ссылку на драйвер-пак).
P.P.S асму поддерживает, хотя я никогда не писал на ней. Советую попробовать (хотя бы ролики на ютюбе посмотреть), а потом решать.
P.P.P.S А если не секрет, что за програмки такие пишите, где супер важно не потерять и такта лишнего?

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

Ср апр 11, 2018 22:26:01

P.P.P.S А если не секрет, что за програмки такие пишите, где супер важно не потерять и такта лишнего?
Спасибо за советы! Я пишу программы для использования МК в импульсных блоках питания, контроллерах шаговых двигателей, контроллерах бесколлекторных двигателей, сварочных инверторах.
А в последнее время замахнулся (пока только мысленно) сделать контроллер асинхронного двигателя "частотник". Вот здесь уже и не хватает 8ми битных МК. Есть простой вариант - забить память константами и линейную программу, но я хочу программу с гибкими настройками, которые задаются внешними сигналами. Тут надо делать перемножения для вычислений и 8ми бит не хватает, больше бит будет сильно медленно. Становится возможным делать "частотник" с векторным управлением.
Последний раз редактировалось ВячеславX Чт апр 12, 2018 08:31:26, всего редактировалось 1 раз.

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

Чт апр 12, 2018 01:18:57

Добрый день, можно ли отлаживать программу в кейл если она начинается не с базового адреса, а например с 0x800A000?

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

Чт апр 12, 2018 08:57:25

Спасибо за советы! Я пишу программы для использования МК в импульсных блоках питания, контроллерах шаговых двигателей, контроллерах бесколлекторных двигателей, сварочных инверторах.
А в последнее время замахнулся (пока только мысленно) сделать контроллер асинхронного двигателя "частотник". Вот здесь уже и не хватает 8ми битных МК. Есть простой вариант - забить память константами и линейную программу, но я хочу программу с гибкими настройками, которые задаются внешними сигналами. Тут надо делать перемножения для вычислений и 8ми бит не хватает, больше бит будет сильно медленно. Становится возможным делать "частотник" с векторным управлением.

Извините, но в жизни такое не куплю. Это абсолютно не ремонтопригодно. Оправдано только в случае частотника. Для всего остального имеются специальные микросхемы-контроллеры, которые свободно продаются и заменяются. Что делать если сварочник с Вашим МК накроется? Где Вас искать? Вон есть живой пример: сварочники Патон (наши Украинские) серии про - эти дурики туда ПЛИС запихнули! Летит плата с плисом и приехали! Есть мужик на ютюбе (Измаил Инвертор) - он ремонтом занимается. Так он даже раз делал подменную плату, чтобы починить аппарат.

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

Чт апр 12, 2018 10:18:40

ВячеславX писал(а):Я пишу программы для использования МК в импульсных блоках питания, контроллерах шаговых двигателей, контроллерах бесколлекторных двигателей, сварочных инверторах.
Прочитайте про таймеры. http://robocraft.ru/blog/ARM/739.html
Например.
Dead-time

Если кто не знает, это задержка фронтов сигналов на основном и комплементарном выводах канала таймера. Эта функция есть у некоторых таймеров (смотрите руководство), и нужна она бывает для исключения сквозных токов при управлении силовыми ключами [полу]мостовых схем.
STM32 это не 8-ми битные AVR. У них довольно мощная периферия и многое можно сделать аппаратно.

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

Чт апр 12, 2018 11:09:09

STM32 это не 8-ми битные AVR. У них довольно мощная периферия и многое можно сделать аппаратно.

Да там еще до таймеров и ацп далеко будет - сначала надо тактирование из программы настроить. Я помню библиотеку STL пытался использовать - тихий ужас. А потом STM ее забросили и взялись за HAL. Теперь без CubeMx наверное не одну неделю периферию настраивать пришлось бы (а с учетом что этого никто руками не делает, то и помощи не найти). Так что тут только вариант - берем куб, генерим проект, пишем все на С, а критические модули на АСМе. Хотя для меня и С не вариант - пишу на плюсах. Иначе запутался бы в программе давно и толку не было бы - следить за техпроцессом, читать 4 ацп по спи каждые 20мС, отвечать по одному юарту с помощью модбаса, в другой юарт просто лог данных для наблюдения сливать. А еще планируется подключить 1-wire ключи, RTC часы и флешку с архивацией. А так ооп с инкапсуляцией, полиморфизмом и, в последнее время, наследованием спасает.

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

Чт апр 12, 2018 12:08:52

Извините, но в жизни такое не куплю. Это абсолютно не ремонтопригодно. Оправдано только в случае частотника. Для всего остального имеются специальные микросхемы-контроллеры, которые свободно продаются и заменяются. Что делать если сварочник с Вашим МК накроется? Где Вас искать? Вон есть живой пример: сварочники Патон (наши Украинские) серии про - эти дурики туда ПЛИС запихнули! Летит плата с плисом и приехали!
Действительно дураки. Но дураки они потому, что не обеспечили аппаратно "безопасность" контроллера.
А с вами я не согласен по нескольким причинам: Одну уже написал.
Трудно будет делать конкуренцию на рынке, так как границы в Украине все более прозрачные для Европы и Китая, и на этих самых "стандартных микросхемах" идёт поток дешевого товара, а отдельно современные микросхемы стоят намного дороже.
Нельзя будет выйти за рамки ограниченные параметрами этих микросхем, и соответственно не сможешь привлечь клиентов лучшими характеристиками. Не сможешь решить не стандартные задачи.
Если сделать хорошо продуманную схему на серийных МС - её легко повторят, а МК это уже защита от "простого" повторения.
Я не планирую кустарно делать единичные образцы, если уже заниматься, то это будет свой сайт, канал на ютубе, и естественно товар будет с гарантией и после гарантированным обслуживанием.
Ярослав555 Вопрос, а в программе IAR можно делать ассемблерные вставки? Для этого надо отдельные библиотеки или подойдут библиотеки Си? Можно, например, в CubeMx сконфигурировать, а далее на ассемблере писать?
P.S. Я понимаю что придётся перейти на Си, и недостаток быстродействия решать выбором более быстрого камня (со временем они и так станут быстрые и дешевые). Но всему свое время...

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

Чт апр 12, 2018 13:09:24

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

А че там выходить то? Инвертор должен стабилизировать ток дуги, +форсаж, +антистик. Это реализовано, большего и не надо.
Блок питания? тоже все функции реализованы - стабилизация + защита по току. Большего и не надо.
Драйвер шаговика? Тоже есть спец. наборы микросхем. Импульсы шагов + направление, + стабилизация тока удержания. А что еще нужно?
Сначала надежность работы. Потом ремонтопригодность и дешевизна ремонта это ключевыые позиции. А все остальное - при прочих равных.
Кстати: защиту МК/ПЛИСа Вы никак не обеспечите, если прибор скажем - упал. От шоковой вибрации при падении трескаюся смдхи и может приключиться что угодно - микруха может сгореть от банального ЭМИ импульса при взрыве силовых ключей. И что тогда? Экран? Защита всех ножек супрессорами? Да там цена после производства такая будет, что никому доп. плюшки от МК и не нужны будут.
А нестандартные задачи.. Ну хрен его знает. Решали когда-то мы похожую задачу - станок электроконтактной сварки. Мега8, два канала ацп и три тиристорных выхода. Как развлечение делали, фирма хрен че заработала. Сделали 6 блоков этих мозгов - на всю область хватило. Нестандартные задачи не удел массового рынка.

По поводу вставок - я не проверял, но думаю что можно. Вам на С надо будет сделать разовую инициализацию, а дальше цикл можно будет в асме гонять. Так что быстродействие не должно пострадать. А вот насчет сложности ядра тут я не уверен - там архитектура камня намного сложнее.
Вот для начала http://vision.gel.ulaval.ca/~jflalonde/ ... AR_ref.pdf

Добавлено after 11 minutes 32 seconds:
А это пример для AVRок, думаю здесь будет более понятно, а тогда и в армах будет проще.
https://www.element14.com/community/doc ... ontrollers
Ответить