реклама на сайте
подробности

 
 
> STM32F0+Keil=простой старт, Помогите начать работать с АРМ Cortex M0
Artos5
сообщение Jul 21 2013, 07:49
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Добрый день уважаемые форумчане!
Бьюсь уже третий день. Не могу начать работать с СТМ32Ф0...
В интернете полно примеров для STM32f1 серии, а для 0 серии информации "0".
Помогите (подскажите) пошаговую настройку Кейла для работы с STM32F0. Из отладочного комплекта имеется STM32F0Discovery
Go to the top of the page
 
+Quote Post
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 56)
hd44780
сообщение Jul 21 2013, 09:04
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Привет. Где-то я тебя видел sm.gif
Надо было здесь писать - http://electronix.ru/forum/index.php?showforum=190 . Модераторы перенесут.

1. Запустить кейл, зайти в меню Project -> New project
2. Указать путь, где будет лежать проект.
3. Указать имя файла проекта. Например, test1. Жмём сохранить.
4. Выбираем из кучи нужный процессор, например, STM32F051. Я не знаю, какой там у тебя на плате стоит, сам укажи, какой надо.
5. Кейл спросит, скопировать ли файл startup_.....s в каталог проекта. Лучше согласиться.
6. В принципе, всё. Но в этом виде проект неработоспособен, т.к. кейл не генерит main и не добавляет в проект ещё один важный файл - system_stm32f0xx.c .В нём лежит код инициализации проца (тактовый генерратор и пр.). Этот файл есть в директории кейла, у меня это C:\Keil\ARM\Startup\ST\STM32F0xx\. Ну и main добавить.

Т.к. кейл жутко гадит временными и объектными файлами в каталог проекта, то лучше держать свои модули (файлы *.c) в каком-нибудь подкаталоге.
Результат прилагаю.

Библиотеки периферии и пр. надо качать с сайта ST и добавлять нужное в проект руками.
Если что, спрашивай.
Прикрепленные файлы
Прикрепленный файл  TestF0.zip ( 108.81 килобайт ) Кол-во скачиваний: 100
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 09:13
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(hd44780 @ Jul 21 2013, 12:04) *
Привет. Где-то я тебя видел sm.gif

Привет! Спасибо большое за помощь wink.gif

Подскажи, где взять этот пакет? stm32f0xx stdperiph_lib
На сайте производителя по поиску ни в какую не находит!!!!!!! Уже готов разбить "аП стену" монитор sm.gif)

Где вообще взять этот злосчастный пакет библиотек?! Надо: CMSIS & SPL

Цитата(hd44780 @ Jul 21 2013, 12:04) *
Если что, спрашивай.


СПАСИБО огромнейшее! Скачал твой пример, и проект от компилировался!!! sm.gif
Теперь надо что то полезное (работоспособное) откомпилировать sm.gif


Сообщение отредактировал Artos5 - Jul 21 2013, 09:09
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 09:16
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Я тоже пару дней ковыряюсь, с STM32F0Discovery, хочу выполнить маленькую задачу. Пока проблем не увидел. А в чем у Вас проблемы? Напишите, поможем чем сможем.
В рабочей папке проекта создал папки: CMSIS, StdLib, Project, Source.
В CMSIS скопировал startup_stm32f0xx.s, stm32f0xx.h, system_stm32f0xx.c и system_stm32f0xx.h.
В StdLib папки inc и src из STM32F0xx_StdPeriph_Driver.
В папке Project сохраняю сам проект.
В Source stm32f0xx_it.c, stm32f0xx_it.h, stm32f0xx_conf.h и также создаю, в самом Keil, main.c, добавляю еще main.h, а также init_main.c и init_main.h, в которых инициализирую модули.
При создании проекта выбираю нужный камень и в опциях проекта в С/С++ Define пишу USE_STDPERIPH_DRIVER,USE_FULL_ASSERT. Там же в Include Parts прописываю пути к папкам Source, CMSIS, StdLib/inc.
Будут вопросы пишите.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 09:21
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Хочу "поблымать" светодиодом . Но дальше не пойму как это сделать..
Я так понимаю надо подключить библиотеку для работы с вводом/выводом , но где ее взять?
Проц в твоем проекте выбран в точности такой как у меня стоит на плате sm.gif

Цитата(andries5 @ Jul 21 2013, 12:16) *
В CMSIS скопировал startup_stm32f0xx.s, stm32f0xx.h, system_stm32f0xx.c и system_stm32f0xx.h


Спасибо за помощь Вам!
Где взять выше указанные файлы?

Можно поделиться настроенным проектом со всеми выше указанными файлами? Буду Вам очень признателен! sm.gif


Сообщение отредактировал Artos5 - Jul 21 2013, 09:18
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2013, 09:21
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Вот архив в сайта ST - http://www.st.com/web/en/catalog/tools/PF257885 для твоей платы.
В том числе и для кейла. Покопайся в них для начала. Там есть всё - библиотеки, заголовки, всё. Некоторые не любят SPL, но это уже вопросы религии.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 09:23
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



http://www.st.com/web/en/catalog/tools/PF257884
Скачать STSW-STM32048. В нем есть папка STM32F0xx_StdPeriph_Lib_V1.0.0, а в ней папка Libraries. Вот там все есть CMSIS & SPL.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 09:44
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(hd44780 @ Jul 21 2013, 12:21) *
Вот архив в сайта ST - http://www.st.com/web/en/catalog/tools/PF257885 для твоей платы.


Пребольшущее Тебе спасибо wink.gif
А то по поиску на ихнем сайте ничего не находило.........
Буду сейчас ковырять sm.gif


Цитата(andries5 @ Jul 21 2013, 12:16) *
В Source stm32f0xx_it.c, stm32f0xx_it.h, stm32f0xx_conf.h и также создаю, в самом Keil, main.c, добавляю еще main.h, а также init_main.c и init_main.h, в которых инициализирую модули.

Прошу прощение за возможно ламерский вопрос...
В архиве нашел мешок таких файлов. Какие из них надо добавить к проекту?
И всеже для меня , было бы проще разобраться в прикрепленном проекте.. А то я что то уже запутался : ))

Сообщение отредактировал Artos5 - Jul 21 2013, 09:47
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 09:47
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Цитата(Artos5 @ Jul 21 2013, 12:21) *
Хочу "поблымать" светодиодом . Но дальше не пойму как это сделать..

Можно поделиться настроенным проектом со всеми выше указанными файлами? Буду Вам очень признателен! sm.gif

Создал проект, пробуйте.
Прикрепленные файлы
Прикрепленный файл  Blink_LED_.rar ( 963.73 килобайт ) Кол-во скачиваний: 112
 
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 10:07
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 12:47) *
Создал проект, пробуйте.


Спасибо большое! Откомпилировал, залил, работает! wink.gif


Цитата(andries5 @ Jul 21 2013, 12:47) *
пробуйте.


В вашем коде есть строчка:
Код
if(Butt_User_Get_State != RESET)
        {
            LED_Blue_On;
            LED_Greeen_On;
        }
        else
        {
            LED_Blue_Off;
            LED_Greeen_On;
            Delay(1000);
            LED_Blue_On;
            LED_Greeen_Off;
            Delay(1000);
        }


Все понятно кроме одного. Где взялась строчка: Butt_User_Get_State и строчка: RESET
Чтобы было "задефайнено" не вижу..
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2013, 10:09
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Artos5 @ Jul 21 2013, 12:44) *
А то по поиску на ихнем сайте ничего не находило.........


Надо искать по STM32F0Discovery. Эта ссылка оттуда rolleyes.gif .


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 10:12
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(Artos5 @ Jul 21 2013, 13:07) *
Все понятно кроме одного. Где взялась строчка: Butt_User_Get_State и строчка: RESET
Чтобы было "задефайнено" не вижу..


Вопрос снят, нашел sm.gif
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2013, 10:14
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



А я уж собрался подсказывать sm.gif


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 10:24
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 12:47) *
Создал проект, пробуйте.

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

Код
void Delay(__IO uint32_t nTime)
{
  TimingDelay = nTime;
  while(TimingDelay != 0);
}


Не понятный для меня код... как выполняется декремент?

Если бы было так:

Код
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay )
{
TimingDelay--;
}
}


Вопросов бы не было вовсе sm.gif

И тоже для меня странно... нету объявления TimingDelay это переменная или это какой то системный таймер?

Сообщение отредактировал Artos5 - Jul 21 2013, 10:17
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 21 2013, 10:38
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Artos5 @ Jul 21 2013, 14:24) *
Не понятный для меня код... как выполняется декремент?

И тоже для меня странно... нету объявления TimingDelay это переменная или это какой то системный таймер?

глобальная переменная. Декремент смотреть в прерывании системного таймера
объявлена в main.c (как вы ищите - непонятно)
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 11:30
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(toweroff @ Jul 21 2013, 13:38) *
глобальная переменная. Декремент смотреть в прерывании системного таймера
объявлена в main.c (как вы ищите - непонятно)


Переменную нашел в мейн .
Теперь не найду где выполняется декремент..

Все, нашел! Урааааааааа! sm.gif
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 12:10
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Все по своим отдельным файлам, не люблю когда все в одном в виде каши. Думаю так удобнее.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 12:23
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 15:10) *
Все по своим отдельным файлам, не люблю когда все в одном в виде каши. Думаю так удобнее.


А скажите пожалуйста, с какой частотой происходит прерывание системного таймера?
И как например задействовать

Код
void TIM17_IRQHandler(void)
{
    
}


Это прерывание?
Достаточно вбить туда переменную? Подозреваю, что нужны еще дополнительные телодвижения sm.gif

Посмотрел даташит на МК, и я просто в шоке sm.gif
Такая куча возможностей!!!
Таймеров дофига и всего прочего sm.gif
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 12:30
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Цитата(Artos5 @ Jul 21 2013, 15:15) *
А скажите пожалуйста, с какой частотой происходит прерывание системного таймера?
И как например задействовать

Код
void TIM17_IRQHandler(void)
{
    
}


Это прерывание?
Достаточно вбить туда переменную? Подозреваю, что нужны еще дополнительные телодвижения sm.gif


Прерывание системного таймера происходит согласно указанию
SysTick_Config(SystemCoreClock / 1000); //1ms
Если делить на 10000, то будет 0.1ms.
Здесь можно изменить значение по своему усмотрению, в пределах возможного.
В Keil нажав правую кнопку на непонятной переменной или функции, выбираете в меню "Go To Definition Of '...' " и попадаете в место ее определения. Очень удобно.
Да это прерывание, Прерывание Timer17 и для этого сначала нужно проинициализировать таймер, включить режим прерываний и так далее.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 13:01
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 15:30) *
Прерывание системного таймера происходит согласно указанию
SysTick_Config(SystemCoreClock / 1000); //1ms
Если делить на 10000, то будет 0.1ms.
Здесь можно изменить значение по своему усмотрению, в пределах возможного.
В Keil нажав правую кнопку на непонятной переменной или функции, выбираете в меню "Go To Definition Of '...' " и попадаете в место ее определения. Очень удобно.
Да это прерывание, Прерывание Timer17 и для этого сначала нужно проинициализировать таймер, включить режим прерываний и так далее.


Спасибо Вам за помощь!




Буду дальше пробовать разбираться sm.gif

А сколько времени происходит вход в прерывание и его выполнение а потом выход из него?


Сообщение отредактировал Artos5 - Jul 21 2013, 13:00
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 14:23
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Цитата(Artos5 @ Jul 21 2013, 16:01) *
А сколько времени происходит вход в прерывание и его выполнение а потом выход из него?

Когда отладку включал с платой на stm32f103 через JTAG отладчик, то видел время каждого шага. Сейчас на этой плате не знаю. Я сам только учусь.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 15:27
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Бедаааа.... отвалился программатор.
Не хочет шить . Выскакивает ошибка: "No target connected"
Хотя программатор видется.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2013, 15:43
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Чем шьёшь?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 15:45
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



stm32f0discovery
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2013, 15:58
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Я имел в виду на компе из кейла шьёшь?
Попробуй ST-шную утилиту - http://www.st.com/web/en/catalog/tools/PF258168#header поставить. Только кейл перед этим закрой.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 16:22
Сообщение #26


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(hd44780 @ Jul 21 2013, 18:58) *
Я имел в виду на компе из кейла шьёшь?
Попробуй ST-шную утилиту - http://www.st.com/web/en/catalog/tools/PF258168#header поставить. Только кейл перед этим закрой.

Блин... закрыл Кейл. Запустил СТ Линк. И он отказывается дружить с программатором... все равно не видит программатор. Хотя система видит устройство прекрасно.

Начал шить СТ Линк, после шаманства...
Поставил в настройках Connect under reset.
Что то не могу вкурить что это произошло... кейл по прежнему отказывается шить...



Теперь Кейл пишет такую херню: flash download failed - Target DLL has been canсelled
Что то СТМ начинает тошнить sm.gif

Что ему то не хватает?!

Сообщение отредактировал Artos5 - Jul 21 2013, 16:23
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 16:40
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



В свойствах проекта, на вкладке Utilites, в св-вах St-Link (settings), выбран STM32F05x Flash?
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 16:46
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 19:40) *
В свойствах проекта, на вкладке Utilites, в св-вах St-Link (settings), выбран STM32F05x Flash?

Выбран ST Link debugger и его поменять нельзя, он не активный

Оно шилось нормально , шилось-шилось пока не "заглючило" резко . Резко начал ругаться Кейл...

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 16:47
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Нажать левой кнопкой на Use Target Drive for Flash Programming.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 17:00
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 19:47) *
Нажать левой кнопкой на Use Target Drive for Flash Programming.

Спасибо Вам за наводку! Заработало!
Только не могу понять почему оно заглючило! sad.gif

Есть еще серьезная проблема...
Не работает полностью PORTB

инициализирую так:

Код
void Init_GPIO(void)
{
    /* Private typedef ---------------------------------------------------------*/
    GPIO_InitTypeDef GPIO_InitStruct_butt;
    GPIO_InitTypeDef GPIO_InitStruct_led;
    //GPIO_InitTypeDef GPIO_InitStruct_led1;
    
    /*Enable or disable the AHB peripheral clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
    
    /** Configure pins as GPIO for USER button
         PA0     ------> GPIO_Input
    */

  /* Configure Button pin as input */
  GPIO_InitStruct_butt.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStruct_butt.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStruct_butt.GPIO_Pin = GPIO_Pin_0;
  GPIO_Init(GPIOA, &GPIO_InitStruct_butt);
    
    /** Configure pins as GPIO for led
         PC8     ------> GPIO_Output  blue
         PC9     ------> GPIO_Output    green
    */

    /*Configure GPIO pin */
    GPIO_InitStruct_led.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
    GPIO_InitStruct_led.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct_led.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct_led.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStruct_led.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStruct_led);
    
        /*Configure GPIO pin PORTB*/
    GPIO_InitStruct_led.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStruct_led.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct_led.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct_led.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStruct_led.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct_led);
}


и

Код
#define LED_Greeen_On (GPIOC->BSRR = GPIO_Pin_9)
#define LED_Blue_On (GPIOC->BSRR = GPIO_Pin_8)
#define LED_Greeen_Off (GPIOC->BRR = GPIO_Pin_9)
#define LED_Blue_Off (GPIOC->BRR = GPIO_Pin_8)
#define LED_Green_Toggle (GPIOC->ODR ^= GPIO_Pin_9)
#define LED_Blue_Toggle (GPIOC->ODR ^= GPIO_Pin_8)
#define Butt_User_Get_State (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
// led out config
#define DATA_LED_1 (GPIOB->BSRR = GPIO_Pin_13)
#define DATA_LED_0 (GPIOB->BRR = GPIO_Pin_13)
#define CLOCK_LED_1 (GPIOB->BSRR = GPIO_Pin_14)
#define CLOCK_LED_0 (GPIOB->BRR = GPIO_Pin_14)
#define LATCH_LED_1 (GPIOB->BSRR = GPIO_Pin_15)
#define LATCH_LED_0 (GPIOB->BRR = GPIO_Pin_15)


Если настраиваю другой порт например: PORTA
То все работает...

Подозреваю что умер у меня в отладчике порт В sm.gif
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2013, 17:30
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



А где RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); ?
Или в F0 не нужно?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 17:47
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Видимо моя вина, не расписал комментарии. Но это нормально, запомнит. А то автоматом прошло и хорошо, а надо в отладке пройти по шагам и понять что там делается подробно. Я так делаю.
В ARM каждый модуль необходимо включить подачей тактового сигнала.
hd44780 Вам подсказал, порты А и С были включены, а В нет. Потому и не заработал.

Сообщение отредактировал andries5 - Jul 21 2013, 17:51
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 18:12
Сообщение #33


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 20:47) *
Видимо моя вина, не расписал комментарии. Но это нормально, запомнит. А то автоматом прошло и хорошо, а надо в отладке пройти по шагам и понять что там делается подробно. Я так делаю.
В ARM каждый модуль необходимо включить подачей тактового сигнала.
hd44780 Вам подсказал, порты А и С были включены, а В нет. Потому и не заработал.


Большущее Вам спасибо! Не знаю , куда я смотрел ? sm.gif
Теперь работает порт В : )))

Мне начинает нравится ARM! Особенно точностью генерирования сигнала! Настроил прерывание на 100Гц и в нем меняю состояние выхода, и мой мультиметр показал точно 50.00Гц !
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 19:28
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Цитата(Artos5 @ Jul 21 2013, 21:12) *
Особенно точностью генерирования сигнала! Настроил прерывание на 100Гц и в нем меняю состояние выхода, и мой мультиметр показал точно 50.00Гц !

Учтите, на плате STM32F0Discovery целевой МК, тактируется от встроенного генератора. На плате нет кварца! Только место под него.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 21 2013, 19:31
Сообщение #35


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 22:28) *
Учтите, на плате STM32F0Discovery целевой МК, тактируется от встроенного генератора. На плате нет кварца! Только место под него.


Я это заметил sm.gif
А скажите пожалуйста что это за системный таймер? И с какой макс. частотой могут происходить прерывания?
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Jul 21 2013, 19:44
Сообщение #36


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(andries5 @ Jul 21 2013, 22:28) *
Учтите, на плате STM32F0Discovery целевой МК, тактируется от встроенного генератора. На плате нет кварца! Только место под него.

И что??? Вы ничего не путаете???
Цитата
SB18 (MCO) ON Provides the 8 MHz for OSC_IN from MCO of STM32F103C8T6.

Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 21 2013, 19:52
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Верно! SB18 замкнут, а SB17 разомкнут. Не обратил внимания. Значит от кварца.
А о SYSTICK почитать например http://chipspace.ru/stm32-systick

Сообщение отредактировал andries5 - Jul 21 2013, 19:54
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 22 2013, 19:46
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Цитата(andries5 @ Jul 21 2013, 22:52) *
Верно! SB18 замкнут, а SB17 разомкнут. Не обратил внимания. Значит от кварца.
А о SYSTICK почитать например http://chipspace.ru/stm32-systick


Спасибо! Хорошо разжевано! sm.gif
Вот по больше таких примеров и описаний!
Go to the top of the page
 
+Quote Post
andries5
сообщение Jul 22 2013, 20:14
Сообщение #39


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Сейчас разбираюсь с таймерами на F0, подбираю подобные описания.
Go to the top of the page
 
+Quote Post
Artos5
сообщение Jul 22 2013, 20:16
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Здесь были? >

http://forum.easyelectronics.ru/viewtopic....f=35&t=7080

Там по одной ссылке есть очень хорошая книга по СТМ32 на Русском!
Go to the top of the page
 
+Quote Post
_D9_
сообщение Aug 16 2013, 17:21
Сообщение #41


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 16-02-06
Пользователь №: 14 373



вопрос снят)

Сообщение отредактировал _D9_ - Aug 16 2013, 17:45
Go to the top of the page
 
+Quote Post
KuAlex
сообщение Nov 6 2013, 04:12
Сообщение #42





Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060



Цитата(andries5 @ Jul 21 2013, 11:47) *
Создал проект, пробуйте.


Не могу запустить проект в симуляторе - *** error 65: access violation at 0x0000000C : no 'read' permission

Подскажите куда копать?

Пробовал с stm32f100 debug c помощью st-link проходило успешно, вот только меню периферии существенно отличалось - можно было наблюдать подробную информацию о состоянии портов, настройках и частотах. Здесь же голые регистры показаны. Этот момент от чего зависит?
Go to the top of the page
 
+Quote Post
Falkon_99
сообщение Nov 7 2013, 05:40
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 26-03-12
Из: Харьков
Пользователь №: 71 010



В симуляторе проэкт может не работать, например если при инициализации в коде есть бесконечный цикл ожидания готовности регистров. На реальной плате эта проверка легко проходит, а в симуляторе зависает. Может помочь галочка RUNtoMAIN, с которой вы пропустите начальный код STARTUP
Go to the top of the page
 
+Quote Post
KuAlex
сообщение Nov 8 2013, 01:30
Сообщение #44





Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060



Цитата(Falkon_99 @ Nov 7 2013, 07:40) *
В симуляторе проэкт может не работать, например если при инициализации в коде есть бесконечный цикл ожидания готовности регистров. На реальной плате эта проверка легко проходит, а в симуляторе зависает. Может помочь галочка RUNtoMAIN, с которой вы пропустите начальный код STARTUP


Дело в том что проект не стартовал совсем, в нулевом адресе. Галочка не помогла..
С другого проекта подглядел, здесь помогло. Установил параметр SARMCM3.DLL ->> "-REMAP" во вкладке Debug. Ошибки все равно идут, но симулирует, правда периферию показывает не так подробно как 32F100 и пользы не приносит. Что бы это значило?

И еще вопрос, есть шанс прошить F0 при помощи st-link установленного vlDiscovery или сразу заказывать программатор вместе с МК?
Go to the top of the page
 
+Quote Post
Artos5
сообщение Nov 12 2013, 07:54
Сообщение #45


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Добрый день дорогие друзья и товарищи!
Помогите пожалуйста чайнику...

Начну по порядку.
есть файлы:
1) main.c // тут есть функции индикации
2) STM32F0xx_it.c // тут содержатся обработчики прерывания

Во втором файле , такой обработчик:
Код
void SysTick_Handler(void)
{
indication_funс();
}


Код
void led_out (){

           clear_leds; // digit off
      
         switch (y) // select digit
          {
          
           case 0:
            
              IND_PORT->ODR  = led_buff[0];            
            digit_1;
           break;
           case 1:
            
              IND_PORT->ODR  = led_buff[1];            
            digit_2;
           break;
          
           case 2:
            
              IND_PORT->ODR  = led_buff[2];            
            digit_3;
           break;
          
          }
                          if (++y>2)y=0;
}

void indication_func()
  {
  

           temp1 = temp;

           temp_lcd1=temp_lcd2=temp_lcd3=0;
          while (temp1>99)
          {
            temp1-=100;
            temp_lcd3++;
          }

          while (temp1>9)
          {
            temp1-=10;
            temp_lcd2++;
          }

          while (temp1<10 && temp1!=0)
          {
            temp1--;
            temp_lcd1++;
          }

       if(temp<10)
       {
          led_buff[2]=led_table[temp_lcd1];
          led_buff[1]=led_table[10];
          led_buff[0]=led_table[10];
       }
       else if(temp>9 && temp<100)
       {
          led_buff[1]=led_table[temp_lcd1];
          led_buff[2]=led_table[temp_lcd2];
          led_buff[0]=led_table[10];
       }
       else if(temp>99)
       {
          led_buff[0]=led_table[temp_lcd1];
          led_buff[1]=led_table[temp_lcd2];
          led_buff[2]=led_table[temp_lcd3];
       }  
            led_out();
}


Хочу поместить в обработчик системного таймера функцию

Код
indication_func();


Никакими из всевозможных способов мне не получается это сделать....

Надо такое:
в прерывании работает индикация и разложение числа на разряды, а в основном цикле я только отправляю
в переменную значения.

Код
temp=111;


Помогите пожалуйста! Буду очень благодарен!

Сообщение отредактировал Artos5 - Nov 12 2013, 08:00
Go to the top of the page
 
+Quote Post
Artos5
сообщение Nov 12 2013, 08:54
Сообщение #46


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Вроде разобрался, только не пойму почему "ворнинг" выскакивает...


..\Source\stm32f0xx_it.c(104): warning: #223-D: function "indication_func" declared implicitly
Go to the top of the page
 
+Quote Post
KuAlex
сообщение Jan 27 2014, 04:41
Сообщение #47





Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060



Добрый день.
У меня проблема с использованием adc, микросхема - STM32F050F4, измерение не происходит.
В KEIL могу выбрать для ADC только регистр CCR (ADC->CCR) зато для ADC1 доступны регистры все
Код
// Включить тактирование порта B
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
// Вывод 1 на аналоговый вход
GPIOB->MODER |= GPIO_MODER_MODER1;


// Настройк ADC
ADC1->CR |=  ADC_CR_ADEN;
ADC1->CFGR2 |= ADC_CFGR2_JITOFFDIV2;

ADC1->CHSELR |= ADC_CHSELR_CHSEL9;

И при отладке в железе видно, что регистры не записываются в нужные значения

Код
// Главный цикл
int main(void)
{
    SysTick_Config(48000);
    while(1)
    {
     ADC1->CR |= ADC_CR_ADSTART;
        i=100;
    while(i);
        
        c=((ADC1->DR)>8);
        
        f[2]=c/100%10;
        f[1]=c/10%10;
        f[0]=c%10;
    }
}
//Обработчик прерывания системного таймера - индикация
void SysTick_Handler(void)
{
if(i)i--;
    c_i++;
    if(c_i==3) c_i=0;
        
GPIOA->BSRR = 0xffff0000; // сброс
GPIOA->BSRR = ((mask_led[f[c_i]])&0xff) | mask_ind[c_i];
return;
}

Проясните пожалуйста:
Что значит ADC1 и чем оно отличается от ADC ?
Каким образом мне записывать значения в регистры, так, чтоб они отображались и работали?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 27 2014, 07:59
Сообщение #48


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(KuAlex @ Jan 27 2014, 07:41) *
Добрый день.
У меня проблема с использованием adc, микросхема - STM32F050F4, измерение не происходит.
...
И при отладке в железе видно, что регистры не записываются в нужные значения
...
Каким образом мне записывать значения в регистры, так, чтоб они отображались и работали?

А тактирование АЦП включили? Нужную тактовую частоту подали?
Go to the top of the page
 
+Quote Post
KuAlex
сообщение Jan 27 2014, 17:52
Сообщение #49





Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060



Цитата(ViKo @ Jan 27 2014, 09:59) *
А тактирование АЦП включили? Нужную тактовую частоту подали?

По умолчанию тактирование включено от асинхронного собственного генератора 14 МГц.
Также пробовал подключать такты к шине AHB/2, эффект точно такой же.
Код
ADC1->CFGR2 |= ADC_CFGR2_JITOFFDIV2;

Проблема в том, что не записываются данные в регистры ADC после выполнения строк кода. Ни в режиме симулятора, ни в дебаге железа.
Код
ADC1->CR |=  ADC_CR_ADEN;
ADC1->CFGR2 |= ADC_CFGR2_JITOFFDIV2;

Проверял пути к адресам flash, начало ADC1 - 0x40012400. Соответствует документации. Битовые маски тоже годные.

Регистры портов и тактирования записываются корректно. Индикация работает, при записи в переменную "с" константы, она выводится.

Подозреваю проблема с настройками библиотек. Нужно ли их настраивать, если да, то каким образом ?
Прикрепил проект полностью
Прикрепленные файлы
Прикрепленный файл  prj_stm32f05.zip ( 169.78 килобайт ) Кол-во скачиваний: 56
 
Go to the top of the page
 
+Quote Post
KuAlex
сообщение Jan 28 2014, 21:05
Сообщение #50





Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060



Всем спасибо за участие, проблему решил. Оказалось нужно дополнительно включить такты на управление регистрами ADC
Код
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;

Теперь все в порядке
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 29 2014, 11:10
Сообщение #51


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(KuAlex @ Jan 29 2014, 00:05) *
Оказалось нужно дополнительно включить такты на управление регистрами ADC

Также, как и для всех других периферийных устройств. Если не работают - проверяйте тактирование в первую очередь.
Go to the top of the page
 
+Quote Post
KuAlex
сообщение Mar 10 2014, 14:43
Сообщение #52





Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060



Здравствуйте. Вопрос по прерыванию готовности результата группы измерений АЦП

Не могу найти данный обработчик в серии F0.
Стоит задача запустить группу преобразований и отправить через DMA обработать прерывание по окончанию преобразования группы измерений.
Каким образом вызвать такое прерывание если в списке векторов прерывания в библиотеке нашел только вызов оконного :
Код
ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */

Образцы работы с ADC + DMA есть для другой f10x серии, но там в библиотеке обработчик описан, а тут нет
Go to the top of the page
 
+Quote Post
Mister-dok
сообщение Jul 19 2015, 14:23
Сообщение #53





Группа: Новичок
Сообщений: 1
Регистрация: 19-07-15
Пользователь №: 87 632



вСЕМ ПРИВЕТ!
я начинаю изучать stm 32 f0 и вот возник вопрос,итак внимание: объясните в чем вызвана разница в синтаксисе(в том числе во включение тактирования портов)
пример 1
// Включить тактирование порта C
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;

// 9, 10 выводы - на выход (general purpose output mode)
GPIOC->MODER |= GPIO_MODER_MODER9_0 | GPIO_MODER_MODER10_0;


пример 2
GPIO_InitTypeDef GPIO_InitStruct_butt;
GPIO_InitTypeDef GPIO_InitStruct_led;

/*Enable or disable the AHB peripheral clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

вроде бы одно и тоже,но написано чуть по разному,тут мелькают практически все сообщения со вторым вариантом написания, первый вариант накопал допустим тут: http://teplofizik.diary.ru/p182430549.htm?oam#more1
как правильнее писать, и еще вопрос почему когда в кейле пытаюсь написать первым вариантом он не может понять что я инициализурую( ну короче вообще не компилится и команды красным подчеркивает) я так понимаю,что в каком-то служебном файлике команды прописаны как во втором варианте,если я прав подскажите как файлик называется,уже столько времени копаюсь,что ппц...
спасибо всем тем кто поставит на путь истинный laughing.gif !
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 22 2015, 06:48
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



пример 1 - работа напрямую с регистрами
пример 2 - вызов функций из ST-шной SPL (Standart Peripheral Library). По сути, делают то же самое
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 22 2015, 12:18
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (toweroff @ Jul 22 2015, 09:48) *
пример 1 - работа напрямую с регистрами
пример 2 - вызов функций из ST-шной SPL (Standart Peripheral Library). По сути, делают то же самое

Но второй вариант делает это через глубокий анус.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 22 2015, 19:44
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(zltigo @ Jul 22 2015, 15:18) *
Но второй вариант делает это через глубокий анус.

я знаю Вашу "любовь" к библиотекам, написанным не Вами, но для первого старта - посмотреть что и как - вполне себе
хотя... там действительно все как-то сделано... нипанашынски sm.gif
тоже делаю свое, хоть и с подсмотром некоторых моментов из SPL со сверкой с даташитом
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 23 2015, 08:17
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (toweroff @ Jul 22 2015, 22:44) *
я знаю Вашу "любовь" к библиотекам, написанным не Вами...

Увы, это жизненный опыт sad.gif. C середины 90x годов встречал только с разной степенью безумности писанные "библиотеки". Вот почти прямо сейчас вожусь с JN5168 чипом. С ним уже абсолютно вырожденный вариант - документации нет вообще - только либы и точка. Либы само-собой уже без исходников. Казалось-бы меньше знаешь - крепче спишь, но ведь дерьмо лезет все равно. API написано через анус, хотя для тех-же базовых функций предачи пакетов мог-ли-бы посмотреть хотя-бы лет тридцать назад специфицированный интерфейс пакетного драйвера. Так нет, написана какя-то фигня котороая как-бы с одной стороны как-бы показывет, что опыт проедшественников как-бы знаком, но с другой стороны, что ОН НЕ ПОНЯТ!!! Море байтовых пременых на 32bit контроллере, сруктруры БЕЗ правил паковки, но зато местами за неведомым хреном с напихаными выравнивающими полями. Один кусок "библиотеки" все-же есть в исходнике, ибо не смогли родить достойный API - пришлось отдавать пользователям шанс расхлебать. Так я чуть мозг не вывихнул думая, что в том нагромождении структур и очередей есть какой-то смысл и наихитрейшая хитрость. Но ее там нет. Совсем нет. Одна глупость нагромождения школярских рецептов программирования которые запихнули в автора сего творения преподаватели, но не смогли впихнуть ему мозга побольше.
QUOTE
, но для первого старта - посмотреть что и как - вполне себе
хотя... там действительно все как-то сделано... нипанашынски sm.gif
тоже делаю свое, хоть и с подсмотром некоторых моментов из SPL со сверкой с даташитом

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 21:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.02134 секунд с 7
ELECTRONIX ©2004-2016