НЕТ платформы, на чЁм гамить-NMi-, 29 Марта 18, 14:56Нет IDE? Их неверное около десятка (для STM32). Выбирай какая нравится.
STM32 - замена Arduino
Mnz
Магистр
Город
254 86
Отв.20 29 Марта 18, 15:58
Sknar
Новичок
Хабаровск
3
Отв.21 30 Марта 18, 01:23
CooCox пробовал, нмФпичатлило!-NMi-, 29 Марта 18, 14:56Это уже дело вкуса. Мне вот у того же "кукокса" старая версия очень нравится, а вот с новой - как-то не сложилось, уже не помню почему: то ли библиотеки убогие были, то ли ещё что-то. Поэтому до сих пор так и пользуюсь старой версией ИДЕ 1.7.8 Рекомендую посмотреть именно на неё. С официальным источником, я так понял проблема, но поищите, на просторах интернета - она есть! Не забудьте установить "тулчейн" ( GNU Embedded Toolchain for Arm - в поиске найдёте) и указать "кукоксу" путь к нему.
Программатор есть.-NMi-, 29 Марта 18, 14:56Уже пол дела.
Удачи!
Mnz
Магистр
Город
254 86
Отв.22 30 Марта 18, 12:59
Не забудьте установить "тулчейн" ( GNU Embedded Toolchain for Arm - в поиске найдёте) и указать "кукоксу" путь к нему.Sknar, 30 Марта 18, 01:23Его отдельно скачивать не обязательно. Можно указать путь к тому что в EmBitz (папка share\em_armgcc\). С кокосом работает, проверено.
У вообще удивляюсь тому что дистрибутив EmBitz имеет размер во много раз меньше чем у кокоса и при этом в нем есть все необходимое.
С официальным источником, я так понял проблемаSknar, 30 Марта 18, 01:23И из-за этого не грузятся библиотеки из репозитория.
mak
Модератор
Екатеринбург
6.3K 1.8K
Отв.23 30 Марта 18, 13:12, через 14 мин
Keil наше все
До 32К бесплатный если правильно помню
До 32К бесплатный если правильно помню
Tomat7
Магистр
Черноморская губинния
236 138
Отв.24 19 Апр. 18, 13:37
Коллеги, DMA, много прерываний и памяти это хорошо. А можно по-быстрее от рекламы перейти к чему-нибудь конкретному, что-нибудь полезное выложить? Ну хотя бы законченнй регулятор мощности про который в теме OldBean'a сказано [сообщение #13292968] . Хочется уже наконец оценить клёвый таймер и вложенные прерывания с приоритетом без которых, оказывается, регулятор напряжения не особо точен.
Z_h_e
Доцент
г. Чайковский
1.1K 313
Отв.25 19 Апр. 18, 13:47, через 11 мин
Хочется уже наконец оценить клёвый таймер и вложенные прерыванияTomat7, 19 Апр. 18, 13:37Настраиваете таймер на ШИМ, однократный счет и запуск от внешнего импульса. Внешний импульс - это детектор нуля, выход ШИМ - управление симистором. И всё, программа не принимает участие в формирование управляющего импульса, ну кроме когда надо фазу изменить. Прерывания тут не нужны совсем.
Tomat7
Магистр
Черноморская губинния
236 138
Отв.26 19 Апр. 18, 15:37
Прерывания тут не нужны совсем.Z_h_e, 19 Апр. 18, 13:47Не, блин, ну это реально круто :-\ Спасибо, Z_h_e!
А теперь можно такой же конкретный и законченный пример с Ethernet'ом (желательно без лишних дискуссий про MAC, PHY, RMII) чтобы я его быстренько залил/спаял/подключил и окончательно "оценил".
Да, а конкретный и законченный пример пример под какую IDE будет?
А то может пора бежать очередную среду разработки осваивать. >:(
Фуух, выговорился.
Теперь серьёзно.
STM32 это действительно хорошо и многообещающе. У меня глаза горели когда заказывал несколько разных STM32 с программатором. К моменту получения на почте я уже был знаком с
Кроме того, заметил что сообщество STM'щиков, как бы так сказать... прижимистое в плане деления информацией, то есть открыто не пошлют, но и код свой полностью не покажут. Зато порассуждать любят. >:( Причины этого, насколько я понял (точнее на форуме кто-то проболтался) это банально деньги. Часто STM'щики это реальные профессионалы для которых программирование микроконтроллеров это хлеб с маслом, и делится маслом мало кто хочет. Для них любительская Ардуино как кость в горле с помощью которой всякие студенты отжимают у них хлеб - «ардуино управляет промышленным грузовым лифтом» (простите, ЧЕМ??!! Кто его туда пустил?)" http://catethysis.ru/arduino-vs-stm32/ И я их понимаю.
Для себя пока эксперименты с STM32 заморозил и пока не столкнусь (хотя уже рядом) с недостатком производительности/памяти Ардуино врядли к ним вернусь. Хотя уверен, конкретный и законченный пример полезного устройства может легко изменить отношение к STM32 любого скептика. ;)
PS Полноценный отладчик в STM32 - это та самая вишенка ради которой иногда хочется забросить Ардуино.
arkhnchul
Доктор наук
Москва, Уфа
990 367
Отв.27 19 Апр. 18, 17:48
Да, а конкретный и законченный пример пример под какую IDE будет?Tomat7, 19 Апр. 18, 15:37меня всегда удивляет такая вот частая позиция эмбеддеров - дескать, для контроллера должна быть своя IDE. Да фиг там, нормальная среда - она для языка, а не устройства. Мне как-то не составляет проблемы Eclipse CDT ткнуть носом в исходники/бибилиотеки/компилятор для x86, avr, stm8, stm32 и esp8266. Ну и привычка - сборкой по-хорошему должна заниматься система сборки (make/cmake/qmake), а не среда сама по себе.
К моменту получения на почте я уже был знаком с бардаком плюрализмом в части IDE. Особенно раздражает когда пример из одной IDE совершенно не обязан заработать в другой.Tomat7, 19 Апр. 18, 15:37другая ситуация только у ардуины, где распространенная IDE одна. И она ужасна и примитивна.
конкретный и законченный пример полезного устройстваTomat7, 19 Апр. 18, 15:37ну вот, например - https://github.com/rene-dev/stmbl
или такое - http://radiokot.ru/forum/viewtopic.php?f=8&t=119089
ЗЫ для ардуинщиков есть https://github.com/stm32duino
Z_h_e
Доцент
г. Чайковский
1.1K 313
Отв.28 19 Апр. 18, 18:15, через 28 мин
Не, блин, ну это реально круто Спасибо, Z_h_e!Tomat7, 19 Апр. 18, 15:37Сарказм намного круче? Вы спросили- я ответил, о варианте реализации. Это действительно рабочий вариант и, если бы Вам было это действительно нужно, Вам помогли бы с его реализацией, если что-то было бы не совсем понятно. А если Вы хотели получить готовый проект, то зачем вопрос про вложенность прерываний? Готовые выложенные проекты постепенно появятся в сети, когда-то и AVR так же были далеки от народа.
Mnz
Магистр
Город
254 86
Отв.29 19 Апр. 18, 23:24
регулятор мощности про который в теме OldBean'a сказаноTomat7, 19 Апр. 18, 13:37Полностью регулятор разрабатывать долго. Набросал небольшой пример, который позволяет управлять углом открытия симистора в диапазоне 0 - 99.8% с шагом 0.01%. Это разрешающая способность, но будет ли такой точность, не скажу, не проверял (нет измерительных приборов для подобных измерений). В протеусе работает, но медленно. Видимо моделирование STM32 довольно ресурсоемкая задача.
Исходник
#include "stm32f10x_conf.h"
#include "SysTimer.h"
#include "hd44780_driver.h"
extern uint32_t SystemCoreClock; // Частота ядра в герцах.
static void Init(void) // Инициализация и конфигурация периферии.
{
// Включение тактирования таймера 1, порта A и модуля альтернативных функций.
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
// Настройка портов ввода/вывода.
GPIO_InitTypeDef GPIO;
GPIO.GPIO_Pin = GPIO_Pin_8; // Выход на симистор.
GPIO.GPIO_Mode = GPIO_Mode_AF_PP; // Это альтернативная функция порта (выход ШИМ таймера 1).
GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO); // Настройка выводов порта A.
GPIO.GPIO_Pin = GPIO_Pin_9; // Вход детектора нуля.
GPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING; // Обычный вход.
GPIO_Init(GPIOA, &GPIO); // Настройка выводов порта A.
// Настройка таймера 1.
TIM_TimeBaseInitTypeDef Tim;
TIM_TimeBaseStructInit(&Tim); // Настройки таймера по умолчанию.
Tim.TIM_Prescaler = SystemCoreClock / 1000000 - 1; // Настройка предделителя на 1000 КГц.
Tim.TIM_Period = 9999-10; // Счет от 0 до 9999 и переполнение 100 раз в секунду.
TIM_TimeBaseInit(TIM1, &Tim);
// Настрока канала ШИМ таймера.
TIM_OCInitTypeDef PWM; // Настройка каналов таймеров.
TIM_OCStructInit(&PWM); // Настройки канала таймера по умолчанию.
PWM.TIM_Pulse = 0;
PWM.TIM_OCMode = TIM_OCMode_PWM2;
PWM.TIM_OutputState = TIM_OutputState_Enable;
PWM.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OC1Init(TIM1, &PWM); // Настройка 1 канала таймера 1.
TIM_BDTRInitTypeDef bdtr;
TIM_BDTRStructInit(&bdtr);
bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &bdtr);
TIM_SelectOnePulseMode(TIM1, TIM_OPMode_Single); // Режим работы OnePulse.
// TIM_ARRPreloadConfig(TIM1, DISABLE);
TIM_OC1PreloadConfig(TIM1, DISABLE); // Отключение буферизации данных 1 канала.
// Настройка прерываний от внешних источников.
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource9); // Прерывания от вывода 9 порта А.
EXTI_InitTypeDef Exti;
Exti.EXTI_Line = EXTI_Line9;
Exti.EXTI_LineCmd = ENABLE;
Exti.EXTI_Mode = EXTI_Mode_Interrupt;
Exti.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_Init(&Exti);
// Включение прерывания.
NVIC_InitTypeDef Int;
Int.NVIC_IRQChannel = EXTI9_5_IRQn;
Int.NVIC_IRQChannelPreemptionPriority = 0; // Максимальный приоритет прерывания.
Int.NVIC_IRQChannelSubPriority = 0;
Int.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&Int);
}
static void InitButton(void)
{
GPIO_InitTypeDef GPIO;
GPIO.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; // Вход для кнопок.
GPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING; // Обычный вход.
GPIO_Init(GPIOA, &GPIO);
}
static void SetPowerPercent(uint16_t Percent)
{
TIM1->CCR1 = TIM1->ARR - Percent;
}
static void LCD_Update(uint16_t Percent)
{
static char Str[8]={'0', '0', '.', '0', '0', ' ', '%', 0};
uint8_t i;
lcd_set_xy(0,0);
for (i=0; i<=4; i++)
{
if (i==2) i++;
Str[4-i] = (Percent % 10) + 0x30;
Percent /= 10;
}
lcd_out(Str);
}
int main(void)
{
static uint16_t Percent=2000, OldPercent=0;
static uint32_t Tick;
static volatile uint32_t i;
SystemCoreClockUpdate(); // Определение частоты ядра.
SysTim_Init(1000);
Init(); // Инициализация и конфигурация периферии.
InitButton();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
lcd_init();
lcd_set_state(LCD_ENABLE, CURSOR_DISABLE, NO_BLINK);
Tick = SysTim_GetTick();
while(1)
{
SysTim_DelayMS(2);
if ((GPIOA->IDR & GPIO_Pin_10) == 0) // Кнопка Up.
{
if (Percent < TIM1->ARR) Percent++;
}
if ((GPIOA->IDR & GPIO_Pin_11) == 0) // Кнопка Down.
{
if (Percent>0) Percent--;
}
if ((SysTim_GetTick()-Tick)>=100) // Прошло 100 мс.
{
Tick = SysTim_GetTick();
if (Percent != OldPercent)
{
OldPercent = Percent;
SetPowerPercent(Percent);
LCD_Update(Percent);
}
}
}
}
void EXTI9_5_IRQHandler(void) // Обработчик внешнего прерывания от линий 5 - 9.
{
if (EXTI_GetITStatus(EXTI_Line9) != RESET) // Прерывание от линии 9.
{
EXTI_ClearITPendingBit(EXTI_Line9); // Сброс признака прерывания от линии 9.
TIM_Cmd(TIM1, ENABLE); // Запуск таймера.
}
}
Да, а конкретный и законченный пример пример под какую IDE будет?Tomat7, 19 Апр. 18, 15:37Есть разница?
Особенно раздражает когда пример из одной IDE совершенно не обязан заработать в другой.Tomat7, 19 Апр. 18, 15:37Дело не в IDE, а в компиляторах. Компиляторы Си полностью совместимы только в теории. А в реальности у каждого свои особенности синтаксиса. Это относится не только в ARM, но и AVR (попробуйте код для WinAVR скомпилировать в CodeVision), компиляторам для компа и т. д.
Хотя уверен, конкретный и законченный пример полезного устройства может легко изменить отношение к STM32 любого скептика.Tomat7, 19 Апр. 18, 15:37[БАРС. Блок автоматической ректификации и стабилизации.]
[Автоматика дистилляции, HD Auto]
Mnz
Магистр
Город
254 86
Отв.30 20 Апр. 18, 07:55
Немного оптимизировал код под протеус. Теперь работает быстрее.
Z_h_e
Доцент
г. Чайковский
1.1K 313
Отв.31 20 Апр. 18, 09:28
А я в Шпротеусе 8.6 не смог запустить stm32F103, там на уже на пустой прошивке порты странно проинициализированны. Значит надо 8.7 поискать....
Mnz
Магистр
Город
254 86
Отв.32 20 Апр. 18, 10:11, через 44 мин
Значит надо 8.7 поискать....Z_h_e, 20 Апр. 18, 09:28Моделирование производилось в версии 8.7 SP3.
Tomat7
Магистр
Черноморская губинния
236 138
Отв.33 20 Апр. 18, 17:45
Сарказм намного круче?Z_h_e, 19 Апр. 18, 18:15Ну а как без сарказма обойтись если спрашиваешь про конкретное, полезное и законченное, а тебе отвечают фразами из рекламных буклетов. (да, опять сарказм )
Коллеги, я прекрасно понимаю что здесь никто никому ничего не должен. И всё-таки...
Z_h_e, у тебя есть замечательная тема [БАРС. Блок автоматической ректификации и стабилизации.] , а там только прошивки.
Вот Sknar рассказывает [сообщение #13276122] сколько чудесных автоматик он сделал за 5 лет, и снова ни строчки кода.
Может хоть кусочки от регулятора напряжения выложите?
Тема Hold`a [Автоматика дистилляции, HD Auto] реально произвела впечатление, но следил я за ней до сообщения [сообщение #13159803] , после интерес приугас. По счастью Hold всё-таки выложил исходники, но в регуляторе там банальный Брезенхем - и о какой точности можно говорить?
Mnz Спасибо большое за пример, теперь есть с чего начать! Да и за всю тему отдельное спасибо.
msg31
Научный сотрудник
Барнаул
4.6K 2.5K
Отв.34 20 Апр. 18, 17:57, через 12 мин
Ну а как без сарказма обойтись если спрашиваешь про конкретное, полезное и законченное,Tomat7, 20 Апр. 18, 17:45Понятно хочется на блюдечке готовенькое . Кому-то для дистилляции, кому-то для курсовой или диплома покатит.
Z_h_e
Доцент
г. Чайковский
1.1K 313
Отв.35 20 Апр. 18, 18:17, через 20 мин
Ну а как без сарказма обойтись если спрашиваешь про конкретное, полезное и законченное, а тебе отвечают фразами из рекламных буклетов. (да, опять сарказм Смеющийся)Tomat7, 20 Апр. 18, 17:45Без сарказма можно очень легко обходиться. Я как раз конкретно и точно ответил про реализацию диммера с помощью таймера. Mnz вроде так и реализовал, с помощью SPL только. Про какие рекламные буклеты речь идет, я не знаю.
Z_h_e, у тебя есть замечательная тема [БАРС. Блок автоматической ректификации и стабилизации.] , а там только прошивки.Tomat7, 20 Апр. 18, 17:45Вы будете смеяться, но и выложенными прошивками не воспользуешься для чистого STM32. Если бы я все выложил, проект так и остался бы на начальной стадии, а скорее всего я бы обошелся другими своими девайсами, более простыми, а этот бы даже и не начал. А так у меня уже есть обязательства, которые заставляют сопровождать устройство. Иначе бы я уперся в "а на хера оно мне надо?".
Mnz
Магистр
Город
254 86
Отв.36 20 Апр. 18, 20:34
Mnz вроде так и реализовал, с помощью SPL только.Z_h_e, 20 Апр. 18, 18:17У меня с прерыванием от детектора нуля.
void EXTI9_5_IRQHandler(void) // Обработчик внешнего прерывания от линий 5 - 9.
{
if (EXTI_GetITStatus(EXTI_Line9) != RESET) // Прерывание от линии 9.
{
EXTI_ClearITPendingBit(EXTI_Line9); // Сброс признака прерывания от линии 9.
TIM_Cmd(TIM1, ENABLE); // Запуск таймера.
}
}
TIM_ETRConfig(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); // Настройка входа внешнего триггера.
TIM_SelectInputTrigger(TIM1, TIM_TS_ETRF); // Выбор внешнего триггера.
TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger); // Синхронизация таймера по триггеру.
TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable); // При срабатывании триггера нужно включить таймер.
SedoY
Профессор
Новосибирск
5.1K 2.2K
Отв.37 20 Апр. 18, 20:57, через 24 мин
ардуины это для школьников - светодиодиком помигать
ядру только и приходится что библиотеки дуин всяких шерстить. туда сколько не дай - все будет мало.
учить ядро, учить си ( при чем без всяких плюсов, решеток и прочей нечисти )
а проекты выкладывать, вот сижу кодю потихоньку, увлекательно, но не готово так чтобы без вопросов работало всегда.
ядру только и приходится что библиотеки дуин всяких шерстить. туда сколько не дай - все будет мало.
учить ядро, учить си ( при чем без всяких плюсов, решеток и прочей нечисти )
а проекты выкладывать, вот сижу кодю потихоньку, увлекательно, но не готово так чтобы без вопросов работало всегда.
m16
Модератор
Тамбов
1.9K 1K
Отв.38 20 Апр. 18, 21:28, через 32 мин
ардуины это для школьников - светодиодиком помигатьSedoY, 20 Апр. 18, 20:57SedoY, ардуина это есть платформа для начинающих. дуины есть на AVR-ах, PIC-ах, кортексах . помимо того что процики разные есть общие хреновые моменты:
- разводка печатных плат, особенно аналоговой части
- IDE с индусскими либами
но в любом случае не зная адра , не зная работу периферии а полагаясь на готовые либы для работы с ней ничего путного не получится хоть на авр-е , хоть на стм-е.
учить ядро, учить си ( при чем без всяких плюсов, решеток и прочей нечисти )SedoY, 20 Апр. 18, 20:57+1. и если уж выбор пал на стм то пара советов. IDE - Keil , отладчик St-link (купить в Китае , либо самому сделать(у меня самопальный)). ни в коем случае не пользовать Cube, либы писать самому (индусские либы попортят нервы)
Mnz
Магистр
Город
254 86
Отв.39 20 Апр. 18, 21:46, через 18 мин
IDE - Keilm16, 20 Апр. 18, 21:28Больше 32 КБ платно. Для домашнего применения достаточно бесплатных альтернатив.
либы писать самомуm16, 20 Апр. 18, 21:28Писать с нуля долго и не всегда эффективно. Проще и быстрее взять готовую библиотеку и привести ее в порядок.