С чего начать изучать стм?
11.02.2017, 15:28
|
#31
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: С чего начать изучать стм?
Сообщение от eddy
|
|
неправильная у вас мигалка
|
Это пчелы неправильные  А мигалка правильная 
А у вас букав много в мигалке.
И попробуйте объясните начинающему, че такое "сисьтик"  Кстати, действительно, чето шибко много там с сисьтиком накручено. Както просче все это должно выглядеть...
|
|
|
|
11.02.2017, 15:29
|
#32
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: С чего начать изучать стм?
majorka65, часто (но однократно) используемые конструкции красиво будет оформить в отдельный (общий для всех проектов) заголовочный файл как static inline функции. В итоге удобней будет новые проекты создавать.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
11.02.2017, 15:34
|
#33
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: С чего начать изучать стм?
Сообщение от NewWriter
|
|
чето шибко много там с сисьтиком накручено
|
Самый минимум. Вообще, конечно, правильней систик (я так и делаю в проектиках) использовать как системный таймер (прерывание раз в миллисекунду инкрементирует счетчик), а мигалку на каком-нибудь другом таймере сделать.
Хотя, не скрою: самое первое знакомство с микроконтроллерами я обычно на простейшей мигалке делаю: в прерывании систик инвертирую сигнал на ноге светодиода. Если период мигания совпадает с расчетным, значит, ничего в настройках тайминга я не напортачил, и можно уже к более серьезным вещам переходить.
А с настройками таймеров у меня совсем недавно был прикол: мигалка для STM32F042 неправильно работала на 030. Посмотрел, а там делители совсем по-другому сделаны.
Вот тебе и совместимость внутри одной серии! Уж могли бы STM хотя бы общую архитектуру внутри серий одинаковой делать, чтобы простейший код, написанный под один камень, работал на всех камнях серии. Понятно, что всякие HSI48 не везде есть, но уж общую схему базового тактирования могли бы одинаковой сделать!
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
11.02.2017, 15:40
|
#34
|
|
Частый гость
Регистрация: 11.02.2017
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: С чего начать изучать стм?
Уважаемые , а может перестанете ругаться и снизойдете до меня ?
Можно вас попросить накидать по пунктам -как создать свой проект с нуля в Kel, не используя SPL и CubeMX.
Или я слишком много прошу.
Заранее большое спасибо.
|
|
|
|
11.02.2017, 16:01
|
#35
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: С чего начать изучать стм?
Сообщение от eddy
|
|
Посмотрел, а там делители совсем по-другому сделаны.
|
Эммм... Делители? Какие, в таймере? Не, ну что вы, в таймере то PSC одинаково работает как в F030, так и в F746.
Да и AHB/APB, если по умолчанию, то коэфф. деления 1:1
Общая схема тактирования применительно к таймерам тоже одинакова от F030 до F746, отличие только в количестве участков тактирования и всевозможных делителей.
|
|
|
|
11.02.2017, 17:06
|
#36
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: С чего начать изучать стм?
Сообщение от NewWriter
|
|
Делители? Какие, в таймере?
|
Да, делитель на 8. В стандартном CMSIS что-то криво было, поэтому в 030 тот же код, что и для 042, в 8 раз быстрей заставлял systick крутиться. Я чуть подшаманил, стало нормально.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
11.02.2017, 18:20
|
#37
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: С чего начать изучать стм?
Сообщение от eenote
|
|
как создать свой проект с нуля в Kel, не используя SPL и CubeMX
|
Можно прямо в Кейле скачать пример "мигающего светодиода" под родственный микроконтроллер, внимательно рассмотреть и создать новый проект по образу и подобию. Или этот пример использовать как шаблон, подкорректировав настройки под нужный микроконтроллер.
|
|
|
|
Сказали "Спасибо" oleg110592
|
|
|
11.02.2017, 18:40
|
#38
|
|
Частый гость
Регистрация: 11.02.2017
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: С чего начать изучать стм?
Такс проект сделал, скомпилировал и проверил в железе.
Hello world - запущен.
Можно продвигаться дальше.
Если все не против я скоро завалю вас вопросами.
|
|
|
|
11.02.2017, 18:55
|
#39
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: С чего начать изучать стм?
Относительно мигания "SOS" и системного таймера..
Вот такой вариант. Настройка частоты сисьтаймера не меняется, всё-же это ведь системный таймер, но в его обработчке есть флаги отсчета интервалов.
Причем, поскольку все остальные интервалы кратны интервалу "точки", то можно убрать из сисьтаймера кратные интервалы, а их отсчитывать в цикле ожидания. Тут уж кому как нравится.
Нажмите, чтобы открыть спойлер
|
PHP код:
|
#include "stm32f0xx.h"
volatile uint32_t systimer_ms = 0; //переменная счетчик мс
struct Morse_flags { // флаги для интервалов Морзе
unsigned int dot :1; // флаг "точки"
unsigned int dash :1; // флаг "тире"
unsigned int letter_spacing :1; // флаг "межбуквенный интервал"
unsigned int word_spacing :1; // флаг "межсловный интервал"
} timerflag; // структура для таймера
/*============== Основная программа ==============*/
int main(void)
{
/*-- Настройка порта PA ----*/
RCC-›AHBENR |= RCC_AHBENR_GPIOAEN; // включено тактирование порта А
GPIOA-›MODER |= GPIO_MODER_MODER0_0; // PA0 настроен на выход
/*-- настройка системного таймера для интервалов --*/
SysTick_Config(SystemCoreClock/1000); //Настройка системных тиков (1 kHz)
while (1)
{
/*-- Три "точки" --*/
for (int imp = 0; imp ‹ 3; imp++)
{
GPIOA-›BSRR = GPIO_BSRR_BS_0; // включили св.диод
timerflag.dot = 0; // сбросили флаг таймера "точки"
while (timerflag.dot == 0) {} // ожидание истечения интервала "точки"
GPIOA-›BSRR = GPIO_BSRR_BR_0; // выключили св.диод
timerflag.dot = 0; // сбросили флаг таймера
while (timerflag.dot == 0) {} // ожидание истечения интервала паузы
}//-----
/*-- Три "тире" --*/
for (int imp = 0; imp ‹ 3; imp++)
{
GPIOA-›BSRR = GPIO_BSRR_BS_0; // включили св.диод
timerflag.dash = 0; // сбросили флаг таймера "тире"
while (timerflag.dash == 0) {} // ожидание истечения интервала "тире"
GPIOA-›BSRR = GPIO_BSRR_BR_0; // выключили св.диод
timerflag.dot = 0; // сбросили флаг таймера
while (timerflag.dot == 0) {} // ожидание истечения интервала паузы
}//-----
/*-- Три "точки" --*/
for (int imp = 0; imp ‹ 3; imp++)
{
GPIOA-›BSRR = GPIO_BSRR_BS_0; // включили св.диод
timerflag.dot = 0; // сбросили флаг таймера "точки"
while (timerflag.dot == 0) {} // ожидание истечения интервала "точки"
GPIOA-›BSRR = GPIO_BSRR_BR_0; // выключили св.диод
timerflag.dot = 0; // сбросили флаг таймера
while (timerflag.dot == 0) {} // ожидание истечения интервала паузы
}//-----
/*-- Межсловный интервал --*/
timerflag.word_spacing = 0; // сбросили флаг таймера
while (timerflag.word_spacing == 0) {} // ожидание истечения межсловного интервала
}//--------------
}//================================================== =====================
/*============== Интервалы системного таймера ===============*/
void SysTick_Handler(void)
{
systimer_ms++; //инкремент по 1 мс
if (!(systimer_ms % 150)) // если 150 мс прошло,
{
timerflag.dot = 1; // то флаг точки
}
if (!(systimer_ms % (150 * 3))) // если 450 мс прошло,
{
timerflag.dash = 1; // то флаг тире
}
if (!(systimer_ms % (150 * 7))) // если 1050 мс прошло,
{
timerflag.word_spacing = 1; // то флаг межсловного интервала
}
}
|
Последний раз редактировалось NewWriter; 12.02.2017 в 17:51.
|
|
|
|
11.02.2017, 19:05
|
#40
|
|
Прописка
Регистрация: 10.03.2016
Сообщений: 114
Сказал спасибо: 14
Сказали Спасибо 46 раз(а) в 41 сообщении(ях)
|
Re: С чего начать изучать стм?
Сообщение от NewWriter
|
Относительно мигания "SOS" и системного таймера..
Вот такой вариант. Настройка частоты сисьтаймера не меняется, всё-же это ведь системный таймер, но в его обработчке есть флаги отсчета интервалов.
Причем, поскольку все остальные интервалы кратны интервалу "точки", то можно убрать из сисьтаймера кратные интервалы, а их отсчитывать в цикле ожидания.
|
Пепел ардуины упорно стучит в чьё-то сердце. Обычный таймер и DMAR, вот и всё что нужно для этого. И хоть "Юстас Алексу" на немецком и с рязанским акцентом.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:02.
|
|