Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 26.04.2022
Сообщений: 33

Создание считывателя импульсов на STM32 bluepill в Arduino IDE

23.01.2023, 13:12. Показов 1383. Ответов 14

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые участники форума. Возник такой вопрос. Недавно перешёл с Arduino на Stm32, дабы переход произошёл более плавно, использую среду программирования Arduino IDE. Перешёл на Stm32 по причине её более высокой мощности.

Вопрос вот в чём. Необходимо переделать вот эту программу на Ардуино, которая отвечает за считывание импульсов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <Wire.h> 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <EEPROM.h>
 
#define max_t1 16000 //задаём время прерывания 1 мсек
 
byte b3;
byte b2;
byte b1;
byte b0;
 
unsigned long pulse=0;
unsigned int msec=0;                //0 - Gain=1   1 - Gain=2
byte cont=0;
byte comh,coml;
 
void setup() {
  delay(300);
  //настраиваем 16-битный таймер Т1
  TCCR1A=0;
  TCCR1B=(1<<CS10)|(1<<WGM12);
  OCR1A=max_t1-1;
  TIMSK1=1<<OCIE1A;
  TCNT1=0;
 
  //настраиваем COM порт
  Serial.begin(57600);
  //Serial.attachSerialInterrupt(SerialInterrupt);
  sei();
 
  attachInterrupt(0, Counter, RISING);
  
  
  
  delay(300);
 
}
void Counter() {
  if (pulse<8000000) {pulse++;}
}
//Обработка событий таймера раз в милисекунду
ISR(TIMER1_COMPA_vect) {
  byte SSREG=SREG;
  b0 = pulse & 255;
  b1 = pulse >> 8;
  b1 = b1 & 255;
  b2 = pulse >> 16;
  b2 = b2 & 255;
  b3 = pulse >> 24;
  b3 = b3 & 255;
  Serial.write(b0);
  Serial.write(b1);
  Serial.write(b2);
  Serial.write(b3);
  pulse=0;
  SREG=SSREG;
} 
 
 
void loop() {  
}

Переделать под Stm32. Не могу разобраться конкретно с тем, как сделать
C++
1
ISR(TIMER1_COMPA_vect)
и
C++
1
2
3
4
5
TCCR1A=0;
TCCR1B=(1<<CS10)|(1<<WGM12);
OCR1A=max_t1-1;
TIMSK1=1<<OCIE1A;
TCNT1=0;
Эти настройки
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2023, 13:12
Ответы с готовыми решениями:

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

Проблема с прошивкой stm32 через Arduino ide
Всем привет. Сразу скажу, что не эксперт в этом деле, поэтому ошибка может быть банальна :) В общем заливал прошивку на stm32 через...

Проблема отслеживания кнопки stm32 + arduino IDE
Добрый день. Учусь программировать микроконтроллер stm32f103c6t6 купленный на алике. В качестве среды прошивки использую Arduino IDE. ...

14
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
23.01.2023, 13:22
нормальное кино...
я тут с запорожца на танк пересел.... где тут и чего нажимать?
ну.... для начала, что за плата и на каком камне...
0
0 / 0 / 0
Регистрация: 26.04.2022
Сообщений: 33
23.01.2023, 13:34  [ТС]
SergP01, STM32F103C8T6 Blue pill
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
23.01.2023, 13:44
https://istarik.ru/blog/stm32/124.html
0
0 / 0 / 0
Регистрация: 26.04.2022
Сообщений: 33
23.01.2023, 13:51  [ТС]
SergP01, спасибо за наводку, но там используется CubeMX. Через ArduinoIDE никак?
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
23.01.2023, 13:55
Цитата Сообщение от RobinTT Посмотреть сообщение
спасибо за наводку, но там используется CubeMX. Через ArduinoIDE никак?
с вашим уровнем- никак....
или сами ищите проекты частотомеров.......
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 906
Записей в блоге: 16
23.01.2023, 15:01
Цитата Сообщение от RobinTT Посмотреть сообщение
Через ArduinoIDE никак?
вам бы почитать RM по таймерам.. там все что вам нужно есть... а вот как это на ардуине писать - наверное придется гуглить....

кстати, на стм32 тоже есть EXTI и это можно реализовать так же как вы делали на ардуине... думаю что если частота не большая - то это будет тоже просто
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
23.01.2023, 15:46
Цитата Сообщение от RobinTT Посмотреть сообщение
Недавно перешёл с Arduino на Stm32
Arduino это не процессор это семейство процессоров
и в результате есть "железные комбинации"
Цитата Сообщение от RobinTT Посмотреть сообщение
C
1
2
3
4
5
6
//настраиваем 16-битный таймер Т1
  TCCR1A=0;
  TCCR1B=(1<<CS10)|(1<<WGM12);
  OCR1A=max_t1-1;
  TIMSK1=1<<OCIE1A;
  TCNT1=0;
вот это для какого процессора?
Цитата Сообщение от RobinTT Посмотреть сообщение
C
1
2
sei();
attachInterrupt(0, Counter, RISING);
а это для какого?

Цитата Сообщение от RobinTT Посмотреть сообщение
дабы переход произошёл более плавно, использую среду программирования Arduino IDE.
ну и как, более плавно?
это все равно что всю жизнь писал для Винды, а решил писать для Линукс, при этом использовать WinAPI.
изучать нужно устройство процессоров, его адресное пространство, ...
0
0 / 0 / 0
Регистрация: 26.04.2022
Сообщений: 33
23.01.2023, 15:47  [ТС]
ВитГо, вот дело в том, что и перешёл на stm32 для того, чтобы задавать бОльшие частоты, чем на ардуино
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
23.01.2023, 16:20
Цитата Сообщение от RobinTT Посмотреть сообщение
чтобы задавать бОльшие частоты, чем на ардуино
нет такого проца - айдурино... это название линейки конструктора.... типа как Лего....
и там могут быть разные процы... и прочая фигня... для развлечения молодёжи....
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 906
Записей в блоге: 16
23.01.2023, 19:06
Цитата Сообщение от SergP01 Посмотреть сообщение
нет такого проца - айдурино... это название линейки конструктора.... типа как Лего...
имхо это тоже не верное утверждение

ардуина это некий уровень абстракции от железа...
как тот же хал
а так - тот же си... ну может чуток упрощенный
так что не понимаю изжоги от термина "ардуино"... по меньшей мере изжога должна быть такая же как и на "HAL"...
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
23.01.2023, 19:57
Цитата Сообщение от ВитГо Посмотреть сообщение
по меньшей мере изжога должна быть такая же как и на "HAL"..
ну HAL . немного перегрузили..
идея интересная.... сделать обёртку для всех процов....
только тяжёлая получилась.. даже профи тонут... а про чайников - молчу..

если почитать доки на проц... то прога, которая моргает светодиодом.... будет занимать - примерно строк 15
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 906
Записей в блоге: 16
23.01.2023, 20:26
Цитата Сообщение от SergP01 Посмотреть сообщение
если почитать доки на проц... то прога, которая моргает светодиодом.... будет занимать - примерно строк 15
причем на ассемблере :-) и ниже все таки программа для 2х перемигивающихся светодиодов :-)
Кликните здесь для просмотра всего текста

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@.CharSet=CP1251
@GNU AS
 
@ +--------------------------------------------------------+
@ |    Демонстрационная программа для STM32 VL Discovery   |
@ |           микроконтроллер  STM32F100RBT6               |
@ |            (без настройки тактирования)                |
@ +--------------------------------------------------------+
@ |            Мигание светодиода                          |
@ |                                                        |
@ | Используемый порт: GPIOC                               |
@ | Используемые пины: 9, 8 (перемигивание)                |
@ |                                                        |
@ +--------------------------------------------------------+
 
.syntax unified     @ синтаксис исходного кода
.thumb              @ тип используемых инструкций Thumb
.cpu cortex-m3      @ процессор
 
.INCLUDE  "/src/inc/rcc.inc"
.INCLUDE  "/src/inc/gpio.inc"
.section .asmcode
 
@ основная программа
.global Start
Start:              @ поместите код своей программы ниже
 
                    @ включим тактирование GPIO C   (при помощи BitBanding)
                         LDR          R0, = PERIPH_BASE + PERIPH_BB_BASE + ( RCC_BASE + RCC_APB2ENR ) * 32
                         MOV          R1, 1
                         STR          R1, [ R0, RCC_APB2ENR_IOPCEN_N * 4 ]
 
                    @ Настройка пина 9 GPIO C на выход с частотой 50 мгц
                         LDR          R0, = PERIPH_BASE + GPIOC_BASE
                         LDR          R1, [ R0, GPIO_CRH ]
                         MOV          R2, GPIO_MODE_OUT50
                         BFI          R1, R2, GPIO_CRH_MODE9_N, 4
                         BFI          R1, R2, GPIO_CRH_MODE8_N, 4
                         STR          R1, [ R0, GPIO_CRH ]
 
MAIN_LOOP:               @ главный цикл мигания, начало цикла
 
                    @ зажгем 1-ый потушим 2-ой светодиод
                         MOV         R1, 1 << 8
                         STR          R1, [ R0, GPIO_ODR ]
 
                    @ пауза
                         LDR          R1, = 0xfffff
pause1:                  SUBS         R1, R1, 1
                         BNE          pause1
 
                    @ потушим 1-ый и зажгем 2-ой светодиод
                         MOV          R1, 2 << 8
                         STR          R1, [ R0, GPIO_ODR ]
 
                    @ пауза
                         LDR          R1, = 0xfffff
pause2:                  SUBS         R1, R1, 1
                         BNE          pause2
 
                         B            MAIN_LOOP    @ циклимся на начало мигания

но автору нужна ардуина... :-(
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
23.01.2023, 20:53
Цитата Сообщение от ВитГо Посмотреть сообщение
причем на ассемблере :-)
нихрена..на С
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 906
Записей в блоге: 16
23.01.2023, 20:58
Цитата Сообщение от SergP01 Посмотреть сообщение
нихрена..на С
ну я всегда говорил что на си вы пишите дофига лишнего :-) а тут компиляция в 72 байта и тоже мигание :-)

а если кто при написании программ на стм32 пользует cmsis - тот на асме легко начнет писать, потому что асм как раз это cmsisи есть.. только инструкции записи\чтения другие :-)

p.s. но это конечно до тех пор пока вы не начнете что нить придумать с сетевыми протоколами, интернетом и еще чем нить - там с асмом наверное будет тяжко :-(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2023, 20:58
Помогаю со студенческими работами здесь

ARDUINO IDE + STM32 или о нежном переходе с AVR :)
Тема в первую очередь для фанатов быстрых решений на AVR и ARDUINO (типа меня) и тех кто ещё на AVR или ещё выбирает,сомневается,...

Программирование Arduino и RFID считывателя
Нужна помощь с программированием, как сделать выход из цикла While с помощью карты uidDec = 1234567890; while ( uidDec ==...

Что нужно купить для Arduino и считывателя RFID/NFC?
Всем привет! Мне понравились проекты на ардуино и возникло желание поработать с считывателями RFID и/или NFC, но я не знаком с ардуино и...

Общение с барометром MS5540 на STM32 (Arduino to STM32)
Получил от китайца сей аппарат, пошел тут же гуглить что нибудь готовое, но не тут то было. Информации по нем очень мало, даже на Arduino...

stm32 счетчик импульсов.
Ребят. А счетчик импульсов в стандартной библиотеке функцией TIM_TIxExternalClockConfig настраивается? Там их много больно разных :).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru