Страница 2 из 5
Re: Программируем STM8S003, STM8S103.
Добавлено: 16 июл 2025, 17:28
Murtaza
ДОРОГОЙ AIDAR
Пожалуйста, подскажите, как изменить частоту ШИМ на STM8S003.
Мне нужна частота ШИМ 10 кГц.
Re: Программируем STM8S003, STM8S103.
Добавлено: 17 июл 2025, 07:32
aidar_i
ШИМ 10кГц. Испытайте оба кода, если работает в ПБ добавлю.
Попробуйте этот код:
Показать
Код: Выделить всё
void setup() {
// Настройка вывода PC3 как выход
GPIOC->CR1 |= (1 << 3); // Включение подтяжки
GPIOC->DDR |= (1 << 3); // Направление - выход
GPIOC->CR2 |= (1 << 3); // Быстрый режим переключения
GPIOC->ODR &= ~(1 << 3); // Начальное состояние - низкий уровень
// Настройка таймера TIM1 для ШИМ 10 кГц
TIM1->PSCRH = 0; // Предделитель 0 (частота таймера = Fmaster / (PSCR + 1))
TIM1->PSCRL = 0; // Fmaster = 16 МГц для STM8S103
// ARR вычисляем для 10 кГц: ARR = (Fmaster / Fpwm) - 1 = (16 000 000 / 10 000) - 1 = 1599
TIM1->ARRH = (1599 >> 8); // Установка верхнего байта ARR
TIM1->ARRL = (1599 & 0xFF); // Установка нижнего байта ARR
// Настройка канала 3 для ШИМ
TIM1->CCMR3 = TIM1_OCMODE_PWM1 | TIM1_CCMR_OCxPE; // Режим PWM1, включение предзагрузки
TIM1->CCER2 |= TIM1_CCER2_CC3E; // Включение канала 3
// Установка начального коэффициента заполнения (50%)
TIM1->CCR3H = 0; // Сначала записываем старший байт
TIM1->CCR3L = 800; // CCR = 800 (50% от 1599)
TIM1->CR1 |= TIM1_CR1_CEN; // Запуск таймера
}
void loop() {
// Здесь можно динамически менять коэффициент заполнения
// Например: TIM1->CCR3L = new_value;
}
.
Re: Программируем STM8S003, STM8S103.
Добавлено: 17 июл 2025, 07:58
aidar_i
ШИМ 1 кГц:
Показать
Код: Выделить всё
void setup() {
// Настройка вывода PC3 как выход
GPIOC->CR1 |= (1 << 3); // Включение подтяжки
GPIOC->DDR |= (1 << 3); // Направление - выход
GPIOC->CR2 |= (1 << 3); // Быстрый режим переключения
GPIOC->ODR &= ~(1 << 3); // Начальное состояние - низкий уровень
// Настройка таймера TIM1 для ШИМ 1 кГц
TIM1->PSCRH = 0; // Предделитель 0 (частота таймера = Fmaster / (PSCR + 1))
TIM1->PSCRL = 0; // Fmaster = 16 МГц для STM8S103
// ARR вычисляем для 1 кГц: ARR = (Fmaster / Fpwm) - 1 = (16 000 000 / 1 000) - 1 = 15 999
TIM1->ARRH = (15999 >> 8); // Установка верхнего байта ARR (0x3E)
TIM1->ARRL = (15999 & 0xFF); // Установка нижнего байта ARR (0x7F)
// Настройка канала 3 для ШИМ
TIM1->CCMR3 = TIM1_OCMODE_PWM1 | TIM1_CCMR_OCxPE; // Режим PWM1, включение предзагрузки
TIM1->CCER2 |= TIM1_CCER2_CC3E; // Включение канала 3
// Установка начального коэффициента заполнения (50%)
TIM1->CCR3H = (8000 >> 8); // Старший байт CCR (8000 / 256 = 31)
TIM1->CCR3L = (8000 & 0xFF); // Младший байт CCR (8000 % 256 = 64)
TIM1->CR1 |= TIM1_CR1_CEN; // Запуск таймера
}
void loop() {
// Здесь можно динамически менять коэффициент заполнения (0-15999)
// Например:
// TIM1->CCR3H = (new_value >> 8);
// TIM1->CCR3L = (new_value & 0xFF);
}
/* Если `CCR3 ≤ 255` → можно писать только в `CCR3L`, а `CCR3H = 0`.
- Если `CCR3 > 255` → **обязательно** записывать и `CCR3H`, и `CCR3L`. */
Re: Программируем STM8S003, STM8S103.
Добавлено: 17 июл 2025, 08:57
Murtaza
THANk you SIR
LET me try
Re: Программируем STM8S003, STM8S103.
Добавлено: 26 сен 2025, 16:25
Murtaza
Здравствуйте, сэр, как получить целочисленное значение на TM1637?
Re: Программируем STM8S003, STM8S103.
Добавлено: 26 сен 2025, 17:34
aidar_i
Murtaza писал(а): 26 сен 2025, 16:25
Здравствуйте, сэр, как получить целочисленное значение на TM1637?
используйте вход интежер
Re: Программируем STM8S003, STM8S103.
Добавлено: 14 янв 2026, 16:30
Selivan
Здравствуйте. Возможно сделать для stm8 пользовательские блоки для энкодера и меню ?
Re: Программируем STM8S003, STM8S103.
Добавлено: 14 янв 2026, 18:30
lfgjikjjyj
на неё дыхнуть нельзя там памяти нету
уже лет 5 валяется просто так
но таймер там прекрасный от 103 стоит с апаратным энкодером с комплементарками на трёхфазник и мертвым временем
на ней если что и делать то конкретно заточеное направление
датчики читать так себе затея возиться с пайкой есть для этого и обычные стм на 8пин
а вот замутить энкодер апаратный квадратурник на оптики работает изумительно
или работа с мотором в качестве формирователя для драйвера
но не под флпрогом там нет лишней памяти только конкретика в коде нужна
Re: Программируем STM8S003, STM8S103.
Добавлено: 18 янв 2026, 12:51
lfgjikjjyj
Апаратный энкодер висит на ремапинге у него вроде как
Да и работает он тока на тим1
Тим2 унего немного болезненый по функционалу
Re: Программируем STM8S003, STM8S103.
Добавлено: 18 янв 2026, 17:41
Selivan
Большое спасибо. Код копилируется и загружается в контроллер без ошибок. Но вот как сделать пользовательские блоки из этого кода - загадка. Боюсь, что самостоятельно не справлюсь. Опыта нет совсем.
Re: Программируем STM8S003, STM8S103.
Добавлено: 18 янв 2026, 17:48
aidar_i
Selivan писал(а): 18 янв 2026, 17:41
Большое спасибо. Код копилируется и загружается в контроллер без ошибок. Но вот как сделать пользовательские блоки из этого кода - загадка. Боюсь, что самостоятельно не справлюсь. Опыта нет совсем.
Работу проверьте, тогда сделаю.
Re: Программируем STM8S003, STM8S103.
Добавлено: 18 янв 2026, 18:12
Selivan
Как проверить? При вращении энкодера должен мигать светодиод?
Re: Программируем STM8S003, STM8S103.
Добавлено: 18 янв 2026, 18:54
aidar_i
Selivan писал(а): 18 янв 2026, 18:12
Как проверить? При вращении энкодера должен мигать светодиод?
и через UART
Re: Программируем STM8S003, STM8S103.
Добавлено: 18 янв 2026, 19:57
Selivan
При вращении энкодера светодиод не мигает, а проверка через UART выше моего понимания. Могу тестировать только пользовательские блоки на предмет их работоспособности. FLPROG для меня идеальный инструмент программирования без написания кода.
Re: Программируем STM8S003, STM8S103.
Добавлено: 18 янв 2026, 21:26
aidar_i
Selivan писал(а): 18 янв 2026, 19:57
При вращении энкодера светодиод не мигает, а проверка через UART выше моего понимания. Могу тестировать только пользовательские блоки на предмет их работоспособности. FLPROG для меня идеальный инструмент программирования без написания кода.
А что Вы хотите подключить для вывода меню? Вообще какой проект хотите сделать? Полезет он в этот МК?
Re: Программируем STM8S003, STM8S103.
Добавлено: 19 янв 2026, 05:53
Selivan
С Вашей помощью удачно подключил к stm8 OLED дисплей и DS18b20. Далее, нужно записывать в меню с помощью энкодера несколько значений температур и поддерживать их в холодильнике "Атлант" (используется для созревания сыра). Все это уже работает на Ардуино nano. Проект простой и много памяти не требует ( я так думаю, что пригодился бы не только мне).
Re: Программируем STM8S003, STM8S103.
Добавлено: 21 янв 2026, 17:22
aidar_i
Selivan писал(а): 19 янв 2026, 05:53
С Вашей помощью удачно подключил к stm8 OLED дисплей и DS18b20. Далее, нужно записывать в меню с помощью энкодера несколько значений температур и поддерживать их в холодильнике "Атлант" (используется для созревания сыра). Все это уже работает на Ардуино nano. Проект простой и много памяти не требует ( я так думаю, что пригодился бы не только мне).
Энкодер применил из форума, работает. Но с ОЛЕД дисплеем не работает пока. Он блокирует, пока не разобрался. Сами тоже попробуйте с дисплеем. (Есть новая версия со встроенным счетчиком).
Энкодер.flp
Re: Программируем STM8S003, STM8S103.
Добавлено: 22 янв 2026, 17:22
Selivan
Попробовал энкодер с дисплеем. Работает, но счет идет в одну сторону при повороте энкодера, т.е. значение счетчиков только увеличивается. (Есть новая версия)
Re: Программируем STM8S003, STM8S103.
Добавлено: 22 янв 2026, 18:43
montirovka
Selivan писал(а): 22 янв 2026, 17:22
Попробовал энкодер с дисплеем. Работает, но счет идет в одну сторону при повороте энкодера, т.е. значение счетчиков только увеличивается.
А значение обоих счетчиков увеличивается?
Re: Программируем STM8S003, STM8S103.
Добавлено: 22 янв 2026, 19:56
aidar_i
Selivan писал(а): 22 янв 2026, 17:22
Попробовал энкодер с дисплеем. Работает, но счет идет в одну сторону при повороте энкодера, т.е. значение счетчиков только увеличивается.
Без дисплея проверили?