STM32 новичку в ARM что к чему
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
Заново файлы создавай или конвертируй, они уже в другой кодировке...
- Реклама
- Сообщения: 791
- Зарегистрирован: Вт июн 17, 2014 00:34:26
[uquote="dosikus",url="/forum/viewtopic.php?p=3645722#p3645722"]Заново файлы создавай или конвертируй, они уже в другой кодировке...[/uquote] Странно. Конвертируется, вроде-бы, правильно. А вот в свежесозданном (кубическом, чтобы железно собралось) проекте при переключении на русский регистр вместо букв набираются только вопросительные знаки. Кодировка стоит Russian Windows-1251, проверил. Что еще крутить? Кейл 5.28.0.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Здравствуйте.
Нужно как-то генерировать импульсы на STM32F103 на двух выводах. Импульсы управляют драйверами транзисторов, которые не должны быть включены одновременно.
Проблема в том, что у этих импульсов нет фиксированной частоты и ширины. Но надо обеспечить возможность переключения периодом 10 мкс.
Ширина импульса и интервалы задаются неким массивом, каждая ячейка определяет состояние драйверов в течение 10 мкс. Если значение в ячейке положительное - включен один драйвер, отрицательное - другой. Пока на ум приходит только таймер, который по прерыванию каждые 10 мкс перемещает указатель на следующую ячейку и просто переключает выводы GPIO.
Выводы тактируются от шины 32MHz, но в настройках GPIO можно установить 50 МГц. Я правильно понимаю, что это скорость, с которой способен переключаться вывод и он все равно будет 32Мгц? По идее GPIO должен справится с задачей, но хотелось бы какой-то более красивый вариант, но в голову больше ничего не приходит.
Нужно как-то генерировать импульсы на STM32F103 на двух выводах. Импульсы управляют драйверами транзисторов, которые не должны быть включены одновременно.
Проблема в том, что у этих импульсов нет фиксированной частоты и ширины. Но надо обеспечить возможность переключения периодом 10 мкс.
Ширина импульса и интервалы задаются неким массивом, каждая ячейка определяет состояние драйверов в течение 10 мкс. Если значение в ячейке положительное - включен один драйвер, отрицательное - другой. Пока на ум приходит только таймер, который по прерыванию каждые 10 мкс перемещает указатель на следующую ячейку и просто переключает выводы GPIO.
Выводы тактируются от шины 32MHz, но в настройках GPIO можно установить 50 МГц. Я правильно понимаю, что это скорость, с которой способен переключаться вывод и он все равно будет 32Мгц? По идее GPIO должен справится с задачей, но хотелось бы какой-то более красивый вариант, но в голову больше ничего не приходит.
Я конечно все понимаю, но этого я не понимаю.
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Смотрите раздел Dead-time. http://robocraft.ru/blog/ARM/739.htmlbezzabotna писал(а):Импульсы управляют драйверами транзисторов, которые не должны быть включены одновременно.
В STM32F103 необходимо использовать TIM1.
- Реклама
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
К сожалению доступны только каналы 2 и 5 таймера. У них нет комплиментарных выходов, но есть ШИМ.
Может быть организовать шим для каждого вывода с периодом 10мкс и коэффициентом заполнения 100%. А в другом таймере сделать счетчик, который будет включать/выключать каналы шим в зависимости от полярности ячейки. Ну и задержку небольшую на переключение каналов.
Может быть организовать шим для каждого вывода с периодом 10мкс и коэффициентом заполнения 100%. А в другом таймере сделать счетчик, который будет включать/выключать каналы шим в зависимости от полярности ячейки. Ну и задержку небольшую на переключение каналов.
Я конечно все понимаю, но этого я не понимаю.
- Сообщения: 1731
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="bezzabotna",url="/forum/viewtopic.php?p=3656976#p3656976"]К сожалению доступны только каналы 2 и 5 таймера. У них нет комплиментарных выходов, но есть ШИМ.[/uquote]
Если нет dead-time, то можно взять два таймера с ШИМ и одновременно записывать в них значения скорректированные вручную так, чтобы между ними был необходимый dead-time.
PS: А вообще надо выбирать МК соответствующий задаче.
Если нет dead-time, то можно взять два таймера с ШИМ и одновременно записывать в них значения скорректированные вручную так, чтобы между ними был необходимый dead-time.
PS: А вообще надо выбирать МК соответствующий задаче.
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Здравствуйте. Еще один вопрос. Мне необходимо синхронизировать цепочку таймеров, чтобы триггером служило событие обновления. Вопрос в том, происходит ли событие обновления при первом запуске таймера? Мне нужно чтобы все таймеры запустились одновременно по цепной реакции, а не так, чтобы каждый таймер сначала досчитал до перезагрузки и только потом запустил следующий.
Запустить всех от от одного триггера не вариант. Они должны именно управлять друг другом.
Запустить всех от от одного триггера не вариант. Они должны именно управлять друг другом.
Я конечно все понимаю, но этого я не понимаю.
- Сообщения: 70
- Зарегистрирован: Пн дек 07, 2009 16:00:31
Добрый день!
Keil uVision V5.23 (с Keil uVision V5.28 таже фигня), камень STM32F103C8T6.
Проблемы с дебаггером.
В режиме Use Simulator не могу установить breakpoint, вернее могу, но далеко не везде. Например, не получается поставить -
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1) //check if the interrupt comes from TIM1
{
Тут получается
}
}
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
после этого не получается
{
if(htim->Instance == TIM1)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
Тут не получается
}
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
{
Тут не получается
}
}
}
Затем, иногда можно, иногда нет.
Кроме того, если дебажу в Use ST-link debugger, breakpointы отлично ставятся, НО!!! Регистры, например, CNT TIM1, при останове показывает рындомные (random, случайные) значения.
Первый и второй случай сводят на нет возможность отладки в Keil. Получается что отладка как таковая отсутствует.
В жезном железе (прошитый камень) - работает.
Может кто знаком с проблемой? Как отлаживать то? Варианты есть?
Keil uVision V5.23 (с Keil uVision V5.28 таже фигня), камень STM32F103C8T6.
Проблемы с дебаггером.
В режиме Use Simulator не могу установить breakpoint, вернее могу, но далеко не везде. Например, не получается поставить -
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1) //check if the interrupt comes from TIM1
{
Тут получается
}
}
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
после этого не получается
{
if(htim->Instance == TIM1)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
Тут не получается
}
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
{
Тут не получается
}
}
}
Затем, иногда можно, иногда нет.
Кроме того, если дебажу в Use ST-link debugger, breakpointы отлично ставятся, НО!!! Регистры, например, CNT TIM1, при останове показывает рындомные (random, случайные) значения.
Первый и второй случай сводят на нет возможность отладки в Keil. Получается что отладка как таковая отсутствует.
В жезном железе (прошитый камень) - работает.
Может кто знаком с проблемой? Как отлаживать то? Варианты есть?
- Сообщения: 1731
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="rai17",url="/forum/viewtopic.php?p=3661705#p3661705"]Как отлаживать то? Варианты есть?[/uquote]
На реальном железе естественно. Ума не приложу - на кой вам этот симулятор?
На реальном железе естественно. Ума не приложу - на кой вам этот симулятор?
- Сообщения: 70
- Зарегистрирован: Пн дек 07, 2009 16:00:31
Нужно ветку форума открыть "Нужен ли симулятор или лучше отлаживать в железе".
А если серьёзно, может кто окажет информационную поддержку?
Такого ведь не может быть, что весь мир использует STM32 без симулятора.
А если серьёзно, может кто окажет информационную поддержку?
Такого ведь не может быть, что весь мир использует STM32 без симулятора.
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
[uquote="rai17",url="/forum/viewtopic.php?p=3661705#p3661705"]Кроме того, если дебажу в Use ST-link debugger, breakpointы отлично ставятся, НО!!! Регистры, например, CNT TIM1, при останове показывает рындомные (random, случайные) значения.[/uquote]
Периферия живет своей жизнью, в частности что бы таймер фризился надо конфигурировать Debug MCU configuration register.
Лучший дебаггер это Ozone c jlink.
И начните изучать периферию а не тыркайтесь в калокубах...
Периферия живет своей жизнью, в частности что бы таймер фризился надо конфигурировать Debug MCU configuration register.
Лучший дебаггер это Ozone c jlink.
И начните изучать периферию а не тыркайтесь в калокубах...
- Сообщения: 70
- Зарегистрирован: Пн дек 07, 2009 16:00:31
Лучший дебаггер это Ozone c jlink.
Я так понимаю что это только с железом?
Я так понимаю что это только с железом?
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
- Сообщения: 70
- Зарегистрирован: Пн дек 07, 2009 16:00:31
Этого просто не может быть...
Контроллеры такого уровня и без симулятора? Смысл тогда?
Раскладывать на столе всё железо с осциллографами, да не с простыми, а золотыми (отматывать десяток другой экранов вперед-назад). Подключать различные генераторы и др. источники сигналов.
Например, отладить разгон - торможение асинхронной машины на максимальное ускорение (замедление) не допуская условий срыва синхронизма... Даже такая задача будет нерешаема.
НЕ МОЖЕТ БЫТЬ!
С симуляторами для avr вообще проблема отсутствует...
Контроллеры такого уровня и без симулятора? Смысл тогда?
Раскладывать на столе всё железо с осциллографами, да не с простыми, а золотыми (отматывать десяток другой экранов вперед-назад). Подключать различные генераторы и др. источники сигналов.
Например, отладить разгон - торможение асинхронной машины на максимальное ускорение (замедление) не допуская условий срыва синхронизма... Даже такая задача будет нерешаема.
НЕ МОЖЕТ БЫТЬ!
С симуляторами для avr вообще проблема отсутствует...
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
- Сообщения: 1731
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="rai17",url="/forum/viewtopic.php?p=3663169#p3663169"]С симуляторами для avr вообще проблема отсутствует...[/uquote]
Так может вам на avr и остаться тогда? Раз тут так сложно....
Так может вам на avr и остаться тогда? Раз тут так сложно....
- Сообщения: 70
- Зарегистрирован: Пн дек 07, 2009 16:00:31
[uquote="dosikus",url="/forum/viewtopic.php?p=3663174#p3663174"]Смысл вашего перехода с авр ?[/uquote]
Смысл очевиден) Перестало хватать производительности.
Добавлено after 4 minutes 35 seconds:
[uquote="jcxz",url="/forum/viewtopic.php?p=3663269#p3663269"]Так может вам на avr и остаться тогда? Раз тут так сложно....
[/uquote]
Расцениваю этот вопрос как попытку "закарнавалить" тему.
Смысл очевиден) Перестало хватать производительности.
Добавлено after 4 minutes 35 seconds:
[uquote="jcxz",url="/forum/viewtopic.php?p=3663269#p3663269"]Так может вам на avr и остаться тогда? Раз тут так сложно....
Расцениваю этот вопрос как попытку "закарнавалить" тему.
- Сообщения: 1731
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="rai17",url="/forum/viewtopic.php?p=3663518#p3663518"]Расцениваю этот вопрос как попытку "закарнавалить" тему.[/uquote]
Вам уже всё сказали. Какой смысл в симуляторах если на реальном железе (с эмулятором) всё можно отладить? И это будет намного качественнее, так как симулятор - это одно, а реальное железо - совсем другое. И если в реальном железе такого уровня как современные ARM-ы производители делают кучу багов (почитайте errata) + баги симулятора - и какой смысл в такой отладке??? Отладите в симуляторе, а в реальном железе оно работать не будет с вероятностью 90%.
ARM - это не примитивный AVR - написать качественно на него симулятор на порядки сложнее. И также на порядке - менее нужно, так как ARM имеет развитые встроенные аппаратные средства отладки. В отличие от AVR.
Среди реальных разработчиков на ARM никто не пользует симуляторы - никому оно не нужно. В крайнем случае что-то сложное алгоритмически (и не привязанное к железу) можно отладить на компе под VS или билдером. А потом просто перетащить как есть на ARM.
Вам уже всё сказали. Какой смысл в симуляторах если на реальном железе (с эмулятором) всё можно отладить? И это будет намного качественнее, так как симулятор - это одно, а реальное железо - совсем другое. И если в реальном железе такого уровня как современные ARM-ы производители делают кучу багов (почитайте errata) + баги симулятора - и какой смысл в такой отладке??? Отладите в симуляторе, а в реальном железе оно работать не будет с вероятностью 90%.
ARM - это не примитивный AVR - написать качественно на него симулятор на порядки сложнее. И также на порядке - менее нужно, так как ARM имеет развитые встроенные аппаратные средства отладки. В отличие от AVR.
Среди реальных разработчиков на ARM никто не пользует симуляторы - никому оно не нужно. В крайнем случае что-то сложное алгоритмически (и не привязанное к железу) можно отладить на компе под VS или билдером. А потом просто перетащить как есть на ARM.
- Сообщения: 70
- Зарегистрирован: Пн дек 07, 2009 16:00:31
Дело в том, что почти всегда "сложное алгоритмически"...
На симуляторах (да в том же протеусе) мне приходилось сотни раз "катать" алгоритм взад-вперёд, добиваясь точной работы.
Не знаю как у других (статистику не собирал), а у меня проекты, после отладки в симуляторе запускаются (тьфу, тьфу, тьфу) всегда.
Для примера мааааленький фрагментик алгоритма управления двигателями геостационарной платформы.
Вобщем буду искать...
Для начала такая тактика:
Отладка в симуляторе Keil отдельных фрагментов программы камень stm32f103c8 (доступен для отладки)
Далее, при необходимости, проверить в железе осциллом.
Потом подзаливать в F4xx и смотреть что получилось....
Добавлено after 6 minutes 24 seconds:
Вот картинка, не ту вставил

На симуляторах (да в том же протеусе) мне приходилось сотни раз "катать" алгоритм взад-вперёд, добиваясь точной работы.
Не знаю как у других (статистику не собирал), а у меня проекты, после отладки в симуляторе запускаются (тьфу, тьфу, тьфу) всегда.
Для примера мааааленький фрагментик алгоритма управления двигателями геостационарной платформы.
Вобщем буду искать...
Для начала такая тактика:
Отладка в симуляторе Keil отдельных фрагментов программы камень stm32f103c8 (доступен для отладки)
Далее, при необходимости, проверить в железе осциллом.
Потом подзаливать в F4xx и смотреть что получилось....
Добавлено after 6 minutes 24 seconds:
Вот картинка, не ту вставил


