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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Пару раз из-за кривого кабеля слетала прошивка .
А так же обновление прошивки при обновлении дров от Segger(родителя Jlink) может залочить Jlink.
Jlink тупо становиться кирпичом - на подключение винда не реагирует, светодиоды на Jlink молчат.
Как восстановить в архиве , на русском .
Дрова обновить крайне рекомендуется .
На сегодня пользуюсь 4.90 .
На сайте свежие 4.92 https://www.segger.com/jlink-software.html
Завтра попробую -отпишусь...
Реклама
Zashibis
Родился
Сообщения: 10
Зарегистрирован: Пт сен 19, 2014 19:20:10

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

Сообщение Zashibis »

Хочу тут серву запустить на STM32f4Discovery.
Нашел статейку в сети правда там для f10. http://easystm32.ru/useful-things/34-how-to-connect-a-servomotor-to-the-stm32
Чутка подправил вначале ибо кокос ругался, но серва так и не запустилась. Серву питал от отделбного источника на 5.38 вольт, а выход подключил к желтому проводу. Косяк где-то на строке включения порта был и возможно на включении таймера.
Подскажите что не так в коде и что подправить надо?

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

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#define SERVO_180 8200
#define SERVO_0 1800
// Функция устанавливает позицию вала (в градусах)
void set_pos(uint8_t pos) {
uint32_t tmp=(SERVO_180 - SERVO_0) /180 ;
TIM2->CCR2 = SERVO_0 + tmp * pos;
}
// Функция задержки
void delay(void) {
volatile uint32_t i;
for (i=1; i != 0xFFFF; i++)
;
}
int main()
{
//Включем порт А
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);
//Включаем Таймер 2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
GPIO_InitTypeDef PORT;
// Настроим ногу (PA1) к которой подключен сервопривод
PORT.GPIO_Pin = (GPIO_Pin_1);
//Будем использовать альтернативный режим а не обычный GPIO
PORT.GPIO_Mode = GPIO_Mode_AF;
PORT.GPIO_OType = GPIO_OType_PP;
PORT.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &PORT);
//Разрешаем таймеру использовать ногу PA1 для ШИМа
TIM2->CCER |= (TIM_CCER_CC2E);
TIM2->CCMR1|= (TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2);
//Настраиваем предделитель чтоб частота ШИМа была в районе 50 Гц
TIM2->PSC = 3;
//Запускаем таймер
TIM2->CR1 |= TIM_CR1_CEN;
uint8_t i;
//Начинаем крутить сервой от 0 до 180 градусов.
while(1)
{
for (i=0;i<=180;i++) {
delay();
set_pos(i);
}
}

}

Еще кокос ругался на вот это :

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

PORT.GPIO_Mode = GPIO_Mode_AF_PP;

Я как мог понять заменил вот так

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

PORT.GPIO_Mode = GPIO_Mode_AF;
PORT.GPIO_OType = GPIO_OType_PP;
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Бездумное юзанье SPL отягощенное кухаркиными статьями.
Даташит читать один хрен придется ...

Изображение
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

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

Сообщение BorisSPB »

Zashibis, надо еще вставить настройку альтернативной функции:

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

GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);
Реклама
Эиком - электронные компоненты и радиодетали
Frogfot
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

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

Сообщение Frogfot »

Народ, подскажите, плиз, какой минимальный МК - необходим для подключение USB Flash - какой объём Flash/RAM необходим.

Также может кто встречал готовые проекты - ткните носом в ссылку, плиз.
Хорошему коту и в декабре - март :)
Реклама
Zashibis
Родился
Сообщения: 10
Зарегистрирован: Пт сен 19, 2014 19:20:10

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

Сообщение Zashibis »

BorisSPB писал(а):Zashibis, надо еще вставить настройку альтернативной функции:

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

GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);

Вставил после строки

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

GPIO_Init(GPIOA, &PORT);

Не работает.
Реклама
Zashibis
Родился
Сообщения: 10
Зарегистрирован: Пт сен 19, 2014 19:20:10

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

Сообщение Zashibis »

dosikus писал(а):Бездумное юзанье SPL отягощенное кухаркиными статьями.
Даташит читать один хрен придется ...

Изображение

Даташит я читал, правда до этой таблицы не добрался. Нормальных статей в нете не нашел. Не могли бы вы не просто показать но объяснить что к чему или где глянуть и что в коде подправить.
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

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

Сообщение BorisSPB »

Zashibis,прошу извинить меня, написал чушь...
Последний раз редактировалось BorisSPB Пт окт 10, 2014 07:51:59, всего редактировалось 1 раз.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Подскажите, можно ли в компиляторе IAR сделать примерно как вот тут только для массива (что бы в окне WATCH вместо цифр отражалось осмысленное название ячейки массива )
короче как-то так:
Изображение

Для чего мне это? Просто мне понравился вот такой способ создания временных переменных.

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

#define KEY_TIMERS  0
#define LED_TIMERS  1
#define LED_TIMERS1 2
#define LED_TIMERS2 3

#define MAX_TIMERS 4

volatile unsigned int Timir[MAX_TIMERS];

void SysTick_Handler(void)
{
unsigned char i=0;
              for (i=0; i<MAX_TIMERS; i++) {
         Timir[i]++;
      }
}


и работаешь дальше с Timir[KEY_TIMERS],Timir[LED_TIMERS] как с переменными
а когда понадобится ещё одна переменная просто меняешь MAX_TIMERS и всё
Так вот было бы отлично если бы ещё в отладчике массив Timir показывался с дефайнами(Timir[KEY_TIMERS]), а не просто Timir[0].
Пока таких переменных не сильно много то всё терпимо, а вот потом...
Вложения
IAR.png
(8.97 КБ) 272 скачивания
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

В статье немного не то, там создаётся свой тип данных с помощью перечислений (enum), а у Вас тип - unsigned int.
А имена элементов массива задать свои, как Вы хотите, нельзя.
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

Frogfot писал(а):Народ, подскажите, плиз, какой минимальный МК - необходим для подключение USB Flash - какой объём Flash/RAM необходим.
Также может кто встречал готовые проекты - ткните носом в ссылку, плиз.


Вам нужен контроллер, который будет поддерживать USB-HOST. Контроллер нужно брать где-то от 32кБ RAM, сам USB затянет 10-15 кБ, остальное - на ваш код и про запас. Есть опыт работы только с STM32. Из их серии F1 самый дешевый контроллер, который поддерживает USB - это STM32f103. Еще рекомендую обратить внимание на серию stm32F0. Эти контроллеры позволяют использовать USB без внешнего кварца, что удешевляет проект. Какой именно МК из F0 поддерживает USB - это вам уже нужно глянуть на сайте st.com
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Все работает и без кухаркиных статей и SPL'ни ...
При верной настройке тактирования.
Спойлер

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

#include "stm32f4xx.h"

#define SERVO_180 8200
#define SERVO_0 1800

static volatile uint32_t TimingDelay;


/* Delay & timers */
void SysTick_Handler(void) {
         if (TimingDelay) {
            TimingDelay--;
         }
         
         
      }

      
      void Delay_mS(uint32_t nTime) {
         TimingDelay = nTime;

         while (TimingDelay);
      }
      
      
void set_pos(uint8_t pos) {
uint32_t tmp=(SERVO_180 - SERVO_0) /180 ;
TIM2->CCR2 = SERVO_0 + tmp * pos;
}




 int main (void)
 {
    uint8_t i;
    SysTick_Config(SystemCoreClock /1000);
   
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ;
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN ;
    GPIOA->MODER &=~                     
                  (
                  GPIO_MODER_MODER1   )
                                   ;
       GPIOA->MODER|=
             
              (
              GPIO_MODER_MODER1_1)
                                  ;
    GPIOA->AFR[0] |= (1<<4);
   
   
TIM2->CCER |= (TIM_CCER_CC2E);
TIM2->CCMR1|= (TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2|TIM_CCMR1_OC2FE);

TIM2->PSC = 168-1;
TIM2->ARR = 8200-1;
TIM2->CR1 |= TIM_CR1_CEN;


   
while(1)
{
for (i=0;i<=180;i++) {
Delay_mS(100);
set_pos(i);
}
}

   return 0 ;
 }

Изображение
Изображение






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

Update_event = TIM_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1))

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

Period = ARR 
Pause = CCR1
Pulse_Output = ARR - CCR1
Zashibis
Родился
Сообщения: 10
Зарегистрирован: Пт сен 19, 2014 19:20:10

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

Сообщение Zashibis »

dosikus писал(а):Все работает и без кухаркиных статей и SPL'ни ...

Попробовал ваш код. Импульсы вроде как какие-то идут(осцилографа нету) чисто тестером, но по факту серва не крутится. Серва хоть как-то задвигалась когда поставил пример из кокоса. Возможно циклы иные. Серва китайская как в примере из статьи ссылку на которую давал.
Правильно ли я понимаю что серва не может крутиться постоянно в одну сторону или это зависит от типа сервы?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Zashibis надо сперва тактовую настроить .
Для этого нужно править system_init и stm32f4xx.h .
http://kazus.ru/forums/showpost.php?p=6 ... stcount=37

Но кактус для работы с STM - пустая трата времени !
Zashibis
Родился
Сообщения: 10
Зарегистрирован: Пт сен 19, 2014 19:20:10

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

Сообщение Zashibis »

Спасибо попробую. Возможно вы и правы про кокос, но когда вообще нифига не работает руки просто опускаются. Кокос хоть надежду дает, что не все так уж плохо. Так планирую осваивать keil.
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

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

Сообщение shads »

Что за прикол:
Если делаю по первому варианту, то программа после перепрошивки не стартует, стартует только после сброса...
Если делаю по второму варианту, то программа стартует сразу после перепрошивки :shock:
Спойлервар1

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

//----------
#include "stm32f10x.h"
void Delay (uint32_t Val);
 
 
//----------
int main(void)
{
   RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;    //разрешить тактирование GPIOB
   GPIOB->CRH   &= ~GPIO_CRH_MODE11;      //очистить разряды MODE
   GPIOB->CRH   &= ~GPIO_CRH_CNF11;       //общего назначения, симетричный 
   GPIOB->CRH   |=  GPIO_CRH_MODE11_0;    //выход, 10MHz

   while(1)
   {
      // Set PB.11 bit
      GPIOB->BSRR = GPIO_BSRR_BS11;
      Delay(1000000);

      // Reset PB.11 bit
      GPIOB->BSRR = GPIO_BSRR_BR11;
      Delay(1000000);
   }
}
 

//----------
void Delay (uint32_t Val)
{
   for(; Val; Val--) __NOP();
}


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


вар2

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

//----------
#include "stm32f10x.h"
void Delay(uint32_t Val);
 
 
//----------
int main(void)
{
      GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);      // Enable PORTB Periph clock 
     GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;            // Configure PC.11 as Push Pull output at max 10Mhz
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_Init( GPIOB, &GPIO_InitStructure);
 
     while(1)
   {
      GPIO_SetBits( GPIOB, GPIO_Pin_11);
      Delay(100000);
   
      GPIO_ResetBits( GPIOB, GPIO_Pin_11);
      Delay(100000);
     }
 }
 
 
//----------
void Delay(uint32_t Val)
{
     for(; Val; Val--) __NOP();
}
   
   
//----------



И еще в догонку...
Че за прикол, вот так нельзя делать...

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

for(uint16_t i=1000; i; i--) 
Нужно обязательно переменную объявлять в начале функции?
Я уже привык в WinAVR - где нужно, там и объявляю...


И кстати, как сделать чтобы uint8_t и прочие - подсвечивались в KEIL?


Ну и ишо... не могу писать русские коменты... хотя те что вставляю копипастом - отображаются нормально... де потыкать нужно?
Последний раз редактировалось shads Сб окт 11, 2014 10:48:42, всего редактировалось 1 раз.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

shads писал(а):И еще в догонку...

В ANSI С переменные объявляются только в начале функции. В C99 можно объявлять в любом месте, возможно и в цикле. Попробуй поставить в опциях компилятора C99 Mode и посмотри можно будет или нет, если нет - то выходит ни один стандарт не разрешает объявлять переменные в цикле. А WinAVR и ему подобные, где стандарты интерпретируются как попало, нужно забыть.

shads писал(а):И кстати, как сделать чтобы uint8_t и прочие - подсвечивались в KEIL?

Edit -> Configuration -> User Keywords
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

shads писал(а):
Ну и ишо... не могу писать русские коменты... хотя те что вставляю копипастом - отображаются нормально... де потыкать нужно?


Если качал, как я советовал, с рутрекера - там есть как руссифицировать.
Хоть и "камменты" на кириллице еще то зло...

А вменяемая реализация задержек - шестью постами выше ...
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

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

Сообщение shads »

shads писал(а):Что за прикол:
Разобрался...
Это были разные проекты, и во втором почему то не стояла галочка тут: (а в первом почему то стояла :) )

Изображение



menzoda писал(а):Попробуй поставить в опциях компилятора C99 Mode и посмотри можно будет или нет
А де такая настройка в KEIL?

menzoda писал(а):А WinAVR и ему подобные, где стандарты интерпретируются как попало, нужно забыть.
Если говорить именно о WinAVR, то это ты здря...

menzoda писал(а):
shads писал(а):И кстати, как сделать чтобы uint8_t и прочие - подсвечивались в KEIL?

Edit -> Configuration -> User Keywords
Спасибки...

dosikus писал(а):Если качал, как я советовал, с рутрекера - там есть как руссифицировать.
Откуда качал не помню, но щя гляну...

dosikus писал(а):А вменяемая реализация задержек - шестью постами выше ...
Ок... я просто еще только мигаю разными реализациями, до вменяемых задержек пока не успел добраться... пока по примерчикам отсюда разбираюсь: http://radiokot.ru/articles/43/
Вложения
pg1.png
(18.54 КБ) 839 скачиваний
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Project -> Options for Target -> C/C++ -> C99 Mode

Если у тебя вместо кириллицы печатается ерунда, попробуй
Edit -> Configuration -> Editor -> Encoding -> Encode in UTF-8 without signature

Ну и шрифт должен быть нормальный. Умолчальный Courier New вроде работает, но лично я везде пользуюсь Consolas.
Последний раз редактировалось menzoda Сб окт 11, 2014 11:23:39, всего редактировалось 2 раза.
Ответить

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