Можете сделать урок по работе с таймерами - переполнение и сравнение и внутреннее прерывание / типы /? Считаю, что это фундаментальная тема в изучении контроллера.
Там у меня функции для формирования запросов от мастера к слейву. Потом может преобразователь usart->rs485 спаяю и в рамках практики покажу, как работать с ним
@@Solderingironspb Преобразователи 485е нескольких видов есть тут вопросов нет. Нужен модбас на стм32. Моя версия не стабильно работает опыта мало еще видимо.
В режиме мастера нужно правильно задать вопрос устройству + рассчитать crc16. А потом просто слушать, что прилетит, согласно протоколу. Разберемся, но чуть позже. Пока не до этого
00:15 - это проблема не ардуины (как железки), а софтового ядра. А именно функция analogWrite() так написана. Посмотрите файл wiring_analog.c и все поймете. В этом случае надо просто использовать регистры таймера напрямую, а не эту функцию.
@@Solderingironspb оболочка, если Вы имеете ввиду IDE, тоже ни при чем. И компилятор, и вся остальная "обвязка". Кроме ядра, ну или можно сказать, набора пользовательских функций, библиотеки. У них (разработчиков) задача просто иная стояла - максимально все упростить для пользователя и убрать рутину под капот. В результате - очень низкий порог вхождения и в итоге - широкая распространенность. Ну а обратная сторона - в том числе и то, что Вы описали.
Да, я не про IDE с компилятором, а именно про ядро и библиотеки) К примеру, у меня коллега берет ардуино уно, сносит с них ардуиновский загрузчик, ставит кварц на 20 Мгц и программирует их уже на чистом си в atmel studio. Пишет свои библиотеки и четко понимает, что и как работает. При таком подходе, я вообще ничего плохого к атмегам не имею) такое хоть в промышленность. А по поводу ардуино...я все еще считаю, что ардуино - это прекрасная возможность начать что-то делать. Люблю именно за быстрый старт, за то, что за год работы с ней, можно действительно наклепать множество интересных проектов (главное голову включать). И я считаю правильным, что если человек начнет изучение мира мк именно с ардуино. Нужно всегда идти от простого к сложному, иначе развитие будет ну очень медленным)
Может светодиоды неправильно подключены. У меня подключение через резистор к плюсу 3.3 вольт Сделал все почти как в видео (на STM32F030) - вроде работает.
Добрый день, а как сместить начало импульса, чтобы один канал стартанул с 0 мксек, а канал 2 стартанул с 10мксек, то есть сдвинуты относительно друг друга на 10 мксек
Попробуйте так (Не тестировал.) uint8_t flag_start; //очередь старта unsigned long Time; // переменная времени int main(void) { flag_start = 1; Time = HAL_GetTick(); while (1) { if (flag_start == 1) { TIM2->CCR2 = 1023; //задаем значение шим Time = HAL_GetTick(); // запоминаем время flag_start = 2; // очередь сдвигаем на +1 } if (flag_start == 2 && HAL_GetTick() - Time >= 10) //если с прошлого момента прошло 10 мс и очередь настала { Time = HAL_GetTick(); //запоминаем время TIM2->CCR3 = 1023; //задаем значение шим flag_start = 3; // очередь сдвигаем на +1(чтоб не перезапускать шим каждые 10 мс) } } }
Очень крутое объяснение ШИМ
Спасибо, что так подробно объясняешь.
сколько копаюсь - более понятного объяснения не встречал!
ждем видосы про уарт с проверкой целостности пакета. Продолжайте в том же духе!
Спасибо) я как раз сейчас с усартом разбираюсь. Заходите в группу вк, мы там бывает обсуждаем насущные вопросы по темам) Ссылка в описании.
Только я что-то изучу, как по этой теме выходит подробный урок. 👍
Можете сделать урок по работе с таймерами - переполнение и сравнение и внутреннее прерывание / типы /? Считаю, что это фундаментальная тема в изучении контроллера.
Это можно все сделать. Я просто сейчас пока с ремонтом и переездом очень занят. Как с этими делами разберусь, так начну снова снимать видео.
@@Solderingironspb ОК
Timerclock это не частота МК. Это частота шины таймера. А шина за делителем висит и может отличаться от частоты МК
Спасибо! Хорошее замечание). Да...я не учел, что мы же частоту APB1 и APB2 тоже менять можем...
С указателями еще можно делать так для упрощения #define Ts p->Ts
Смотрю на гитхабе есть modbus расскажи пожалуйста про него ооочень надо.
Там у меня функции для формирования запросов от мастера к слейву. Потом может преобразователь usart->rs485 спаяю и в рамках практики покажу, как работать с ним
@@Solderingironspb Преобразователи 485е нескольких видов есть тут вопросов нет. Нужен модбас на стм32. Моя версия не стабильно работает опыта мало еще видимо.
В режиме мастера нужно правильно задать вопрос устройству + рассчитать crc16. А потом просто слушать, что прилетит, согласно протоколу. Разберемся, но чуть позже. Пока не до этого
Попробуй из iso646.h or bitor итд.)
Странно, что итерация на осциллограмме заметна глазу. Или я что-то упустил?
Подскажите пожалуйста, с периодом понятно TIM2->CCR1=..., а вот как изменять частоту в цыкле?
Регистр PSC и ARR
А какую максимальную частоту так можно генерировать на выводе стмки? Платка тоже Blu Pill
36 МГц
00:15 - это проблема не ардуины (как железки), а софтового ядра. А именно функция analogWrite() так написана. Посмотрите файл wiring_analog.c и все поймете. В этом случае надо просто использовать регистры таймера напрямую, а не эту функцию.
Под словом "arduino", я и имел ввиду оболочку для AVR.
@@Solderingironspb оболочка, если Вы имеете ввиду IDE, тоже ни при чем. И компилятор, и вся остальная "обвязка". Кроме ядра, ну или можно сказать, набора пользовательских функций, библиотеки. У них (разработчиков) задача просто иная стояла - максимально все упростить для пользователя и убрать рутину под капот. В результате - очень низкий порог вхождения и в итоге - широкая распространенность. Ну а обратная сторона - в том числе и то, что Вы описали.
Да, я не про IDE с компилятором, а именно про ядро и библиотеки) К примеру, у меня коллега берет ардуино уно, сносит с них ардуиновский загрузчик, ставит кварц на 20 Мгц и программирует их уже на чистом си в atmel studio. Пишет свои библиотеки и четко понимает, что и как работает. При таком подходе, я вообще ничего плохого к атмегам не имею) такое хоть в промышленность. А по поводу ардуино...я все еще считаю, что ардуино - это прекрасная возможность начать что-то делать. Люблю именно за быстрый старт, за то, что за год работы с ней, можно действительно наклепать множество интересных проектов (главное голову включать). И я считаю правильным, что если человек начнет изучение мира мк именно с ардуино. Нужно всегда идти от простого к сложному, иначе развитие будет ну очень медленным)
Сделал всё по видео, но почему то у меня светодиоды не включаются.
Может светодиоды неправильно подключены. У меня подключение через резистор к плюсу 3.3 вольт
Сделал все почти как в видео (на STM32F030) - вроде работает.
Если заранее написать программу, а потом просто рассказать на видео то будет гораздо быстрее.
Добрый день, а как сместить начало импульса, чтобы один канал стартанул с 0 мксек, а канал 2 стартанул с 10мксек, то есть сдвинуты относительно друг друга на 10 мксек
Без использования задержки делей
Здравствуйте. Именно 10 микросекунд, а не миллисекунд?
@@Solderingironspb ну это как пример, а так задача состоит в смещение на определенное время в миллисекундах, без использования делея
Попробуйте так (Не тестировал.)
uint8_t flag_start; //очередь старта
unsigned long Time; // переменная времени
int main(void)
{
flag_start = 1;
Time = HAL_GetTick();
while (1)
{
if (flag_start == 1)
{
TIM2->CCR2 = 1023; //задаем значение шим
Time = HAL_GetTick(); // запоминаем время
flag_start = 2; // очередь сдвигаем на +1
}
if (flag_start == 2 && HAL_GetTick() - Time >= 10) //если с прошлого момента прошло 10 мс и очередь настала
{
Time = HAL_GetTick(); //запоминаем время
TIM2->CCR3 = 1023; //задаем значение шим
flag_start = 3; // очередь сдвигаем на +1(чтоб не перезапускать шим каждые 10 мс)
}
}
}
Спасибо, попробую и отпишусь