воскресенье, 18 декабря 2011 г.

Настройка Keil+STM32F10x

     Поскольку в ходе экспериментов было получено, что IAR ARM v.6.10 выдает очень много отладочной информации в конечном файле прошивки и он раздувается до непристойных размеров, особенно при подключении CMSIS и библиотек стандартной периферии STD_PERIPH_LIB, то было решено спользовать среду Keil. Результат меня удовлетворил, размер целевого файла прошивки значительно уменьшился))). Пару раз отваливался ST-LINK, но вопрос удалось решить.
    Итак, настало время немного написать о настройке Keil для "старта" и подключении всяческих библиотек. Хочу заметить, что процесс настройки незначительно отличается от такового в среде IAR ARM, где тоже может быть использован.
   Начинаем с установки -  я использовал версию Keil v.4.21, чего и Вам советую. Можно использовать бесплатную версию с ограничением кода, если религия не позволяет.
     Я, обычно, создаю папку для проектов типа C:\Keil\ARM\My_projects, дальше уже каждый проект в свой каталог.
1. Запускаем Keil, тыкаем "Project->New uVision Project", выбираем путь, забиваем имя проекта, далее предлагается выбрать что-нибудь из имеющейся номенклатуры МК. Поськольку имеем плату Discovery Value Line с установленным STM32F100RB, то его и выбираем (ну или другой, необходимый вариант):
     Далее, спрашивается, создать ли стартапный код и добавить ли его в проект, жмем "Да":
2. Далее, нужно посоздавать группы в дереве проекта. Корень дерева "Target 1" и группу со стартовым кодом "Source Group 1" переименовываем в что-то более осмысленное - в моем случае "UART" и "Startup" соответственно. Добавляем также группы "Main" и "CMSIS".
Создаем в каталоге с проектом каталог "Main" с пустым файлом Main.c внутри. Также копируем в
каталог с проектом каталог "CMSIS".
3. Подвязываем наши файлы в проект, для чего дважды щелкаем на группе "Main" и добавляем пока свой единственный исходник - файл Main.c. В группу "CMSIS" добавляем файлы core_cm3.c, system_stm32f10x.c из каталога "CMSIS". Должно получиться как на картинке:


4. После этого переходим к настройке свойств проекта. Для этого выбираем пункт из контекстного меню "Options for Target ...". Первым делом идем на вкладку "Output" и ставим галочку напротив пункта "Create HEX file" - создавать файл прошивки, остальное не трогаем, должно получиться как на картинке:
Переходим к вкладке "C/C++". В строке "Preprocessor Symbols -> Define" дописываем следующую информацию:


STM32F10X_MD_VL - означает то, что используем МК MD_VL - medium density value line device.
USE_STDPERIPH_DRIVER - на данном этапе это определение пока не особо нужно, если не планируем подключать библиотеку стандартной периферии. Но, оно особо и не мешает, тем более, что дальше будет рассказано о поключении библиотеки стандартной периферии.
В строку "Include paths" прописываем все пути к каталогам проекта:
 










Теперь, заодно заходим во вкладку "Debug" и настраиваем отладчик ST-LINK, коли таковой имеется на плате Discovery VL ;). Собственно, выбираем ST-LINK, ставим галочки - "Run to main" - стартовать с ф-ции Main при отладке, а не со стартапного кода, "SWD" - Single Wire Debug.

 Собственно, на этом можно и ограничиться, дописав в пока еще пустой файл Main.c следующие строки:

#include "stm32f10x.h"

int main(void)
{
}

Теперь можно откомпилить это все дело с помощью F7, убедившись, что все файлы подключены и всё настроено правильно.
Т.е. получили заготовку с подключенной CMSIS в сыром виде. Но дело в том, что в стартапном коде присутствует вызов ф-ции SystemInit(), которая вобщем-то делает немного полезного - инициализирует модуль тактовых генераторов RCC. Ничего криминального в этом нет, ею, наверное, можно пользоваться, но я предпочитаю "выпилить напильником" вызов сей ф-ции из стартапа напрочь и запускать собственные маленькие ф-ции для настройки модуля RCC, частоты шины AHB, вывод импульсов "наружу" через вывод MCO и тому подобные вещи.

Выпиливается очень просто, лезем в файл startup_stm32f10x_md_vl.s, находим строки:

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP


Заккоментируем вызов SystemInit, т.е. приводим к следующему виду:
; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     ;IMPORT  SystemInit
                 ;LDR     R0, =SystemInit
                 ;BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

Собственно, всё! Ф-ция при старте не вызывается и можно вручную настраивать RCC, порты, периферию и все прочее.
Пока все, позже расскажу как подключается библиотека для работы со стандартной периферией.

воскресенье, 4 декабря 2011 г.

А не замахнуться ли ...

А не замахнуться ли нам на Вильяма, нашего Шекспира...
Готовлюсь к более детальному изучению ядра Cortex, и МК STM32 в частности. Готовиться коннект Компьютер-STM32 по UART-у, вопрос пока за железом. Соединение нужно для отладочных целей, для будущего взаимодействия с microSD-картой.

воскресенье, 20 ноября 2011 г.

Еще видео

Эпиграф:

"...Вбігає другий мудило, він кулею прошиває стоящих мудил і зникає...
Мудило в картузі (шуткує): - Скорость ахуєвающая..."


Работа в режиме 1/2 шага, ток - 1,25 А на фазу, шаг ШД 6,2 градуса, скорость - 11000 полушагов/сек = 5500*6,2/360 = 94,7 об/сек = 5682 об/мин


Программа дописана полностью, все режимы: 1/8, 1/4, 1/2, Full Step, понижение тока при отсутствии входных импульсов в течение 3-х секунд.

понедельник, 14 ноября 2011 г.

Драйвер ШД

1. Был изменен алгоритм реверса, т.к. в ходе экспериментов алгоритм, использующийся в драйвере robozone v.5.1 показал свою несостоятельность в плане неодинаковой динамики для различных направлений вращения.

Для обоих направлений был применен одинаковый алгоритм управления ключами с упреждением, что в некоторой степени позволяет компенсировать задержки фаз по фильтрам формирования синуса/косинуса. Т.е. имеем полноценный реверс.

2.  На сегодняшний момент реализованы:
     - реверс;
     - микрошаг 1/8,  1/4,  1/2;
     Не реализовано:
     - полный шаг;
     - понижение тока двигателя при простое;
     - разрешение работы по сигналу ENBL;

3.  Удалось достичь неплохих динамических характеристик - на крупношаговом двигателе 6,2 градуса, в режиме полушага, без нагрузки была достигнута частота вращения 50 об/с (3000 об/мин).

среда, 2 ноября 2011 г.

вторник, 25 октября 2011 г.

Про Биг-Мак

    Итак, начал безбожно падать интернет, роутер DSL-2540U тоже изрядно тупил, видно было, конечно, что время от времени кто-то ломится на роутер, но я не придавал этому особого значения. Настроил экран и на том ограничился, через время заметил что мои настойки куда-то исчезли, к тому же изменился МАК:
О ужас A8-A8-A8-A8-A8-A8, не смотря на то, что заводской МАК выглядит так:
И это несмотря на то, что у меня запрещен всяческий доступ извне:
И по-прежнему этот назойливый стук в заднюю дверь:
Немного покопавшись в его линуксовском внутреннем мире, понял что воспользоваться командой аля "ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX" нет никакой возможности, т.к. после такой комбинации он выдал что сервис занят. Т.е. сначала нужно отрубить езернет типа "ifconfig eth0 down", но тогда и telnet просто отрубиться от модема.
Покопавшись еще немного, воспользовался командой "macaddr XXXXXXXXXXXX" и, вуаля:
Заводской МАК-адрес, а заодно и стабильный интернет восстановлен.

пятница, 14 октября 2011 г.

Микрошаговый драйвер шагового двигателя

Ура, первые положительные результаты - драйвер, конечно очень сырой, в программной, и, как выяснилось, в аппаратной части - но двигло крутиться без заметных артефактов - шума ШИМа и пропуска шагов, хотя замечены резонансные области... хочу проверить 2-х канальным осциллографом задержки по фильтрам - эх где бы его взять ...

воскресенье, 25 сентября 2011 г.

Апгрейд

       Сбылась места идиота - долгожданный апгрейд - Пентиум 4 с гипертрейдингом и шиной в 800 МГц - очень шустрый ;)

вторник, 13 сентября 2011 г.

К слову ...

     Поздравляю всех с днем программиста !!!

Перерыв для того, чтобы наточить топор

     До отпуска (в декабре) решил сделать небольшой перерыв с работой над Cortex-ом, в связи с тем, что нужно дописать программу для разрабатываемого драйвера шагового двигателя. Вот кстати и он:

















     Это клон драйвера биполярного двигателя ver.5.1 с Робозоны, переделанный под AtMega48, часть топологии также позаимствована)))
     О настройке IAR все же напишу в ближайшее время

понедельник, 12 сентября 2011 г.

Библиотеки для STM32

     Те, кто уже успел прикоснуться к отладочной плате STM32VL Discovery и библиотекам CMSIS,  бросили ее обратно  в ящик стола, попутно оттирая изрядно заплеванный монитор. Работать с данными библиотеками противопоказано психиатром, хотя некоторые полезные части использовать не возбраняется.
    Я попытаюсь описать свое видение проблемы и вариант написания собственных библиотечных функций. В начале, для лучшего понимания новой платформы, библиотека стандартных драйверов устройств не используется. Переписывать всю библиотеку никто не собирается, но, согласитесь, вся периферия сразу не нужна, а собственноручно написанные функции, помогут в понимании архитектуры, да и глюков меньше.
       Чего греха таить, даже в примерах ассемблерных кодов для AVR, которые распаковываются чуть-ли не с последней версией AVRStudio, мною замечены ужасные ошибки. Что говорить о малоизученном, не очень широко используемом в любительских кругах STM32. 

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