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

Кто любит RISC в жизни, заходим, не стесняемся.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Здравствуйте, хочу сделать задержку нормальную
нашёл вот такую

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

inline void DelayLoop(uint32_t delayLoops)
{
        asm(
                "1: \n"
                " CBZ %[delayLoops], 2f \n"
                " SUB %[delayLoops], %[delayLoops], #1 \n"
                " B 1b \n"
                "2: \n"
                : [delayLoops] "+r"(delayLoops)
        );
}

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


  "1: \n"  2f \n"  %[...] 
чего это такое ?
Реклама
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

"\n" - это перевод строки, в асме нельзя записывать команды в одну строку, "1:" - локальная метка в пределах данного блока asm{ ... }, "%[<имя>]" - обращение к переменной (в данном случае к аргументу функции).
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Реклама
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

pokk, я написал небольшую библиотеку delay, использует системный таймер, нужно только указать частоту ядра:

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

/*=============*/
#define CORE_CLK_FREQ  168000000	//Частота ядра в Hz
/*=============*/
Вложения
delay.rar
(1.68 КБ) 215 скачиваний
Аватара пользователя
amv2000
Опытный кот
Сообщения: 720
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

Как говаривал старик Энштейн, всё относительно. Насколько точная нужна задержка можно сделать на таймере

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

uint32_t DELAY_MS;
void delay_ms(uint16_t msec)
{
  TIM2->ARR = msec;//Загружаем число миллисекунд в регистр автоперезагрузки
  TIM2->CR1 |= TIM_CR1_CEN;//Запускаем счет
  while((TIM2->SR & TIM_SR_UIF)==0);//Ждем окончания счета
  TIM2->SR &= ~TIM_SR_UIF;//Теперь флаг события надо сбросить вручную
}
Можно так

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

/**-----------------------------------------------------------------------------
  * @описание      : Функция временной задержки в мс.               
  * @заметка       : Модификатор __IO указывает на права чтения/записи. 
  *                       Фактически, это переименованный volatile. 
  * @параметр      : uint32_t nTime
  * @возвр значение: Нет
  *---------------------------------------------------------------------------*/
void Delay_ms(__IO uint32_t nTime) 
{
  uint32_t nTicks=(CPU_CLK/1000)*nTime;
  for(; nTicks != 0; nTicks--);
} 
а можно вообще по простому

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

/**-----------------------------------------------------------------------------
  * @описание             : функция программной задержки.               
  * @заметка              : Подставляя значение time_d получаем нужную паузу.               
  * @параметр             : uint32_t time_d
  * @возвращаемое значение: Нет
  *---------------------------------------------------------------------------*/ 
void	Delay(uint32_t time_d) { while(time_d--); }
Всё зависит от целей.
Реклама
Эиком - электронные компоненты и радиодетали
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

Я делал с использованием системного таймера. Правда, контроллер не кварцованный, от внутреннего RC работает, но точность приемлемая.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Реклама
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

amv2000 писал(а):а можно вообще по простому
По простому в большинстве случаев хватает...
Можно ещё через DWT...
А в исключительных случаях придётся включать мозг и мутить всё хардварно... иначе точности до такта не получить...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

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

Сообщение balmer »

amv2000 писал(а):а можно вообще по простому

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

void	Delay(uint32_t time_d) { while(time_d--); }
Всё зависит от целей.
Тут уже аккуратно надо быть, ибо задержка будет зависить от release/debug и компилятора. Ненадежно это в долгострочной перспективе.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Благодарю за помощь! с таймером были проблемы так как не совсем понятно было частота тактирования их.
По этому хотел сделать всё на nop что бы вопросов не было, но потом всё таки разобраться тактированием и сделал на таймере.
Сейчас думаю с SysTick по разбираться думаю он больше подходит для определения времени работы процессора.
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

HHIMERA писал(а):А в исключительных случаях придётся включать мозг и мутить всё хардварно... иначе точности до такта не получить...
Точность до такта в общем случае получить не удастся хотя бы потому, что в системе есть DMA.
pokk писал(а):Сейчас думаю с SysTick по разбираться думаю он больше подходит для определения времени работы процессора.
SysTick самое оно :)
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

Darth Cuauhtemoc писал(а):Точность до такта в общем случае получить не удастся хотя бы потому, что в системе есть DMA.
В общеи случае и курица это птица... :)))
Нафига мне общие случаи... если то что надо я получаю с точностью такт в такт... 8)
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

pokk писал(а): Сейчас думаю с SysTick по разбираться думаю он больше подходит для определения времени работы процессора.
Для определения времени работы отдельных кусков проги лучше юзать DWT... если он в наличии...
"Я не даю готовых решений, я заставляю думать!"(С)
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

Какие файлы надо включить в проект, чтобы писать на CMSIS, но чтоб были дефайны для регистров, битов и т.п. именно STM32?
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

Качаете CMSIS, например для STM32F303 это будет файл CMSIS\Device\ST\STM32F30x\Include\stm32f30x.h
Иван Сусанин - первый полупроводник :solder:
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Подскажите где можно по подробнее по смотреть какие ассемблерные команды есть в том или ином STM ?
ну и соответственно сколько тактов надо на их выполнение

смотрел RM0090 Reference manual и Datasheet что-то не нашёл :dont_know:

как всегда тут же нашёл половину ответа =)) наткнулся случайно на PM0214 Programming manual

команды все хорошо расписаны с примерами =)) но вот за сколько тактов выполняются не нашёл =(
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

pokk, ищите документацию на ARM-Cortex-Mx, на всех МК они одинаковые, т.к. куплены у другой компании.
вот на русском: Yadro_Cortex_-_MZ_kompanii_ARM_Polnoe_rukovodst.djvu, на английском: ARMCortexM3Guide.pdf.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

в статье http://radiokot.ru/konkurs/88/ есть такое высказывание
Любой микроконтроллер STM32 можно заменить другим STM32, но с лучшими характеристиками, без изменения схемы
это как понимать ? что...., у каждого STM32 одинаковое количество ног и за каждой из ни жостко закреплены определенные ф-ции ?
Tell Me The Truth
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

FreshMan, просто у МК с одинаковым количеством ног, как правило, одинаковая цоколевка. Например МК 100 серии в корпусе LQFP64, можно заменить на 103 в таком же корпусе, то есть на место 100 просто впаять 103 и всё :)
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

а какая самая популярная IDE ?
Tell Me The Truth
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

Мне, например, нравится ихняя родная - Keil uVision, он же MDK ARM. До 32кБ работает бесплатно https://www.keil.com/download/product/.
Иван Сусанин - первый полупроводник :solder:
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

Myp3ik писал(а):Мне, например, нравится ихняя родная - Keil uVision, он же MDK ARM. До 32кБ работает бесплатно https://www.keil.com/download/product/.
"Ихняя" - это чья? :)
С уважением,
Виктор.
Ответить

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