Программируем STM8S003, STM8S103.

Murtaza
Рядовой
Сообщения: 26
Зарегистрирован: 21 фев 2018, 09:26
Имя: Marti
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Murtaza »

ДОРОГОЙ AIDAR
Пожалуйста, подскажите, как изменить частоту ШИМ на STM8S003.
Мне нужна частота ШИМ 10 кГц.
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение 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;
} 
.
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение 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`.  */
Murtaza
Рядовой
Сообщения: 26
Зарегистрирован: 21 фев 2018, 09:26
Имя: Marti
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Murtaza »

THANk you SIR
LET me try
Murtaza
Рядовой
Сообщения: 26
Зарегистрирован: 21 фев 2018, 09:26
Имя: Marti
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Murtaza »

Здравствуйте, сэр, как получить целочисленное значение на TM1637?
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение aidar_i »

Murtaza писал(а): 26 сен 2025, 16:25 Здравствуйте, сэр, как получить целочисленное значение на TM1637?
используйте вход интежер
Selivan
Рядовой
Сообщения: 45
Зарегистрирован: 19 ноя 2017, 09:49
Откуда: Тула
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Selivan »

Здравствуйте. Возможно сделать для stm8 пользовательские блоки для энкодера и меню ?
lfgjikjjyj
Лейтенант
Сообщения: 402
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 134 раза

Re: Программируем STM8S003, STM8S103.

Сообщение lfgjikjjyj »

на неё дыхнуть нельзя там памяти нету
уже лет 5 валяется просто так
но таймер там прекрасный от 103 стоит с апаратным энкодером с комплементарками на трёхфазник и мертвым временем
на ней если что и делать то конкретно заточеное направление
датчики читать так себе затея возиться с пайкой есть для этого и обычные стм на 8пин
а вот замутить энкодер апаратный квадратурник на оптики работает изумительно
или работа с мотором в качестве формирователя для драйвера
но не под флпрогом там нет лишней памяти только конкретика в коде нужна
lfgjikjjyj
Лейтенант
Сообщения: 402
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 134 раза

Re: Программируем STM8S003, STM8S103.

Сообщение lfgjikjjyj »

Апаратный энкодер висит на ремапинге у него вроде как
Да и работает он тока на тим1
Тим2 унего немного болезненый по функционалу
Selivan
Рядовой
Сообщения: 45
Зарегистрирован: 19 ноя 2017, 09:49
Откуда: Тула
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Selivan »

Большое спасибо. Код копилируется и загружается в контроллер без ошибок. Но вот как сделать пользовательские блоки из этого кода - загадка. Боюсь, что самостоятельно не справлюсь. Опыта нет совсем.
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение aidar_i »

Selivan писал(а): 18 янв 2026, 17:41 Большое спасибо. Код копилируется и загружается в контроллер без ошибок. Но вот как сделать пользовательские блоки из этого кода - загадка. Боюсь, что самостоятельно не справлюсь. Опыта нет совсем.
Работу проверьте, тогда сделаю.
Selivan
Рядовой
Сообщения: 45
Зарегистрирован: 19 ноя 2017, 09:49
Откуда: Тула
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Selivan »

Как проверить? При вращении энкодера должен мигать светодиод?
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение aidar_i »

Selivan писал(а): 18 янв 2026, 18:12 Как проверить? При вращении энкодера должен мигать светодиод?
и через UART
Selivan
Рядовой
Сообщения: 45
Зарегистрирован: 19 ноя 2017, 09:49
Откуда: Тула
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Selivan »

При вращении энкодера светодиод не мигает, а проверка через UART выше моего понимания. Могу тестировать только пользовательские блоки на предмет их работоспособности. FLPROG для меня идеальный инструмент программирования без написания кода.
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение aidar_i »

Selivan писал(а): 18 янв 2026, 19:57 При вращении энкодера светодиод не мигает, а проверка через UART выше моего понимания. Могу тестировать только пользовательские блоки на предмет их работоспособности. FLPROG для меня идеальный инструмент программирования без написания кода.
А что Вы хотите подключить для вывода меню? Вообще какой проект хотите сделать? Полезет он в этот МК?
Selivan
Рядовой
Сообщения: 45
Зарегистрирован: 19 ноя 2017, 09:49
Откуда: Тула
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Selivan »

С Вашей помощью удачно подключил к stm8 OLED дисплей и DS18b20. Далее, нужно записывать в меню с помощью энкодера несколько значений температур и поддерживать их в холодильнике "Атлант" (используется для созревания сыра). Все это уже работает на Ардуино nano. Проект простой и много памяти не требует ( я так думаю, что пригодился бы не только мне).
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение aidar_i »

Selivan писал(а): 19 янв 2026, 05:53 С Вашей помощью удачно подключил к stm8 OLED дисплей и DS18b20. Далее, нужно записывать в меню с помощью энкодера несколько значений температур и поддерживать их в холодильнике "Атлант" (используется для созревания сыра). Все это уже работает на Ардуино nano. Проект простой и много памяти не требует ( я так думаю, что пригодился бы не только мне).
Энкодер применил из форума, работает. Но с ОЛЕД дисплеем не работает пока. Он блокирует, пока не разобрался. Сами тоже попробуйте с дисплеем. (Есть новая версия со встроенным счетчиком).
Энкодер.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Selivan
Рядовой
Сообщения: 45
Зарегистрирован: 19 ноя 2017, 09:49
Откуда: Тула
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Программируем STM8S003, STM8S103.

Сообщение Selivan »

Попробовал энкодер с дисплеем. Работает, но счет идет в одну сторону при повороте энкодера, т.е. значение счетчиков только увеличивается. (Есть новая версия)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
montirovka
Подполковник
Сообщения: 1320
Зарегистрирован: 15 фев 2021, 16:16
Откуда: Геленджик
Имя: Сергей
Благодарил (а): 161 раз
Поблагодарили: 519 раз

Re: Программируем STM8S003, STM8S103.

Сообщение montirovka »

Selivan писал(а): 22 янв 2026, 17:22 Попробовал энкодер с дисплеем. Работает, но счет идет в одну сторону при повороте энкодера, т.е. значение счетчиков только увеличивается.
А значение обоих счетчиков увеличивается?
aidar_i
Полковник
Сообщения: 3483
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 31 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Программируем STM8S003, STM8S103.

Сообщение aidar_i »

Selivan писал(а): 22 янв 2026, 17:22 Попробовал энкодер с дисплеем. Работает, но счет идет в одну сторону при повороте энкодера, т.е. значение счетчиков только увеличивается.
Без дисплея проверили?
Ответить

Вернуться в «Arduino. Другие МК»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость