0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
1

Как запрограммировать STM32f103c8t6

12.09.2024, 12:33. Показов 790. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане!
Суть задачи в следующем. Имеется 4 у/з датчика (парктроник) Веста 2015г.в. Нужно визуализировать их работу на Андроид ММС. На STM32F103c8t6 инициализировал режим захвата на TIM2 иTIM4 + DMA. Данные с датчика имеют 8 бит. Далее следует передать по UART в ММС в формате B0;B1;B2;B3;B4;B5;B6;B7. B0;B1;B3 неизменяемые биты, B3;B4;B5;B6 данные с датчиков.
B7==(B1+B2+B3+B4+B5+B6)^FF. Не могу врубиться, как это запрограммировать. С микроконтроллерами STM32 только сейчас начал заниматься. Может кто-либо помочь в этом вопросе. Заранее благодарен!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2024, 12:33
Ответы с готовыми решениями:

Как начать программировать STM32F103C8T6
Всем привет! Пожалуйста подскажите как начать программировать STM32F103C8T6. Есть несколько...

Как запрограммировать STM32f103c8t6
Уважаемые форумчане! Суть задачи в следующем. Имеется 4 у/з датчика (парктроник) Веста 2015г.в....

Как настроить GPIO для каналов ADC в stm32f103c8t6?
Не понимаю, в каких регистрах находится настройка того, какой пин GPIO будет входом выбранного...

Как запрограммировать в HTML...?
Значит я в личном сайте создал главное меню, каторое разместил с левой стороны стороницы, а с...

26
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
27.09.2024, 12:23  [ТС] 2
Уважаемые форумчане!
Суть задачи в следующем. Имеется 4 у/з датчика (парктроник) Веста 2015г.в. Нужно визуализировать их работу на Андроид ММС. На STM32F103c8t6 инициализировал режим захвата на TIM2 иTIM4 + DMA. Данные с датчика имеют 8 бит. Далее следует передать по UART в ММС в формате B0;B1;B2;B3;B4;B5;B6;B7. B0;B1;B3 неизменяемые биты, B3;B4;B5;B6 данные с датчиков.
B7==(B1+B2+B3+B4+B5+B6)^FF. Не могу врубиться, как это запрограммировать. С микроконтроллерами STM32 только сейчас начал заниматься. Может кто-либо помочь в этом вопросе. Заранее благодарен!
0
3319 / 2420 / 550
Регистрация: 11.09.2009
Сообщений: 8,789
28.09.2024, 03:02 3
Цитата Сообщение от Михаил 25 Посмотреть сообщение
Не могу врубиться, как это запрограммировать.
Так про В2 ничего не известно. А В3 - неизменяемый, и он же с датчика. Поэтому наверное и не получается:
Цитата Сообщение от Михаил 25 Посмотреть сообщение
B0;B1;B2;B3;B4;B5;B6;B7. B0;B1;B3 неизменяемые биты, B3;B4;B5;B6 данные с датчиков.
B7==(B1+B2+B3+B4+B5+B6)^FF.
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
30.09.2024, 17:34  [ТС] 4
i8085, Спасибо, что отозвались. В теме допустил ошибку.
Далее следует передать по UART в ММС в формате B0;B1;B2;B3;B4;B5;B6;B7. B0;B1;B2; неизменяемые биты, B3;B4;B5;B6 данные с датчиков.
0
57 / 43 / 14
Регистрация: 12.12.2020
Сообщений: 439
30.09.2024, 17:38 5
Как то так помоему

C++
1
B=(B0<<7)|(B1<<6)|(B2<<5)|..|(B6<<1)|B7;
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
30.09.2024, 18:46  [ТС] 6
Alex1126, B7 - контрольная сумма, при её расчете B0 не учитывается.
B0 - стартовый байт
B1 - тип посылки
B2 - длина (кол-во байт)
B3;B4;B5;B6 - данные
B7 - контрольная сумма. B7= (B1+B2+B3+B4+B5+B6)^FF.
Все в шестнадцатеричной системе счисления.
0
57 / 43 / 14
Регистрация: 12.12.2020
Сообщений: 439
30.09.2024, 20:45 7
так биты или байты? Я уже запутался что надо. Вопрос то в чем?

Код
SendUart(B0);
SendUart(B1);
SendUart(B2);
SendUart(B3);
SendUart(B4);
SendUart(B5);
SendUart(B6);
B7= (B1+B2+B3+B4+B5+B6) & FF.
SendUart(B7);
0
3319 / 2420 / 550
Регистрация: 11.09.2009
Сообщений: 8,789
30.09.2024, 22:46 8
Цитата Сообщение от Михаил 25 Посмотреть сообщение
Все в шестнадцатеричной системе счисления.
Вы на каком языке пишете? В нём разве не предусмотрена запись чисел в шестнадцатиричном виде?
В чём затык-то? В том, что это микроконтроллер 16-разрядный? Как байты в 16-битные слова упаковать?
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
01.10.2024, 10:20  [ТС] 9
i8085, Не хочется засорять форум, если можно, то напишу в личку. Долгая история и последовательность размышления.
0
3319 / 2420 / 550
Регистрация: 11.09.2009
Сообщений: 8,789
01.10.2024, 11:52 10
Михаил 25, для долгих историй - форум. "Личка" для другого.
Попробуйте поднапрячься и объяснить поподробнее. Ну чесслово непонятно, что вы хотите спросить.
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
01.10.2024, 14:14  [ТС] 11
i8085, Ситуация следующая. На автомобиле установлена ММС на Андроид. В ней есть возможность отображать парктроник на мониторе. Разъем Tx, Rx свободны. Был приобретен парктроник Canbox OPS-114. заявленный, как поддерживающий такую функцию. Сразу проверить не получилось т.к. находился в командировке, прошло 3 месяца. Когда приехал домой и подключил, визуализация отсутствует. Предъявлять претензии продавцу - поздно. Настройки адаптера can bus - соответствуют. Подключил ноут с Terminal 1.9b записал логи. Протокол не соответствует настройкам кан адаптера. Frame должен выглядеть так 2E;22;04;data1;data2;data3;data4;контр. сумма:
Получаю 2E;0xc0;0xe0;0xff;0xf0; checksum 0x07.
Так, как контроллеры используемые в устройстве 2 шт. ноу-нейм, решил собрать блок визуализации на имеющемся штатном акустическом парктронике + блок на stm32f103c8t6 в режиме захвата. Беда в том, что у него канал захвата работает только с одним фронтом (восходящ. или падающ.) Для того чтобы вычислить время прохождения зондирующего + эхо сигнала, приходится использовать второй канал (indirect). С одного таймера получается только два канала парка. Чтобы получить 4 канала парка надо использовать еще один таймер,Tim3 или Tim4, но что-то в CubeIDE это не получается, по крайней мере у меня. Есть вариант запустить это через мультиплексор и использовать один таймер, но я
что-то никак не могу себе представить, как это все связать.
Время можно вычислить, произведя сброс счетчика и начав отсчет в момент фиксации падающего фронта, по приходу восходящего, происходит прерывание, счетчик останавливается, а результат заносится в DMA, в которой можно вычислить контрольную сумму и отправить по UART в ММС.
Был бы помоложе, может быть было легче учиться, когда я учился информатики не было, а ЭВМ были на лампах.
Извините за длинную тираду, пенсионерам учиться негде, в интернете могут научить светодиодом помигать, до Гитхаба еще не дорос.
0
3319 / 2420 / 550
Регистрация: 11.09.2009
Сообщений: 8,789
01.10.2024, 15:02 12
Цитата Сообщение от Михаил 25 Посмотреть сообщение
Получаю 2E;0xc0;0xe0;0xff;0xf0; checksum 0x07.
Насколько я понял, это лог, снятый ноутбуком с Canbox OPS-114?
То есть получается, что никакой информации о расстоянии датчик не выдаёт...
Ну хана полная получается. Как из этой фиксированной последовательности байт получить информацию, если её там нет?! ... Никак.

Может в датчик какой-нибудь код сначала вдуть надо, так сказать "отсосать", чтоб дальше полилось, извините за вульгарность?
На датчик техническое описание какое-нибудь есть?
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
01.10.2024, 16:07  [ТС] 13
i8085, Да, нет изменения присутствуют в зависимости от расстояния до препятствия, но я не вижу во фрейме ни типа посылки, ни длины данных в байтах. Частота импульсов, которые считает счетчик (расстояние) выше, соответственно данные приходят, которые ММС не понимает. Связь от основного блока до скажем адаптера передается по Lin, затем преобразуется в UART и передается в ММС. В адаптере Lin - Uart стоит 14 пиновый микроконтроллер без маркировки, похож на PIC16f505 или подобный, других 14 пиновых на ум не приходит. Может там по- другому ведется подсчет импульсов, не так как я представляю. Закономерность данных вычислил, при передаче через Terminal, срабатывают те сектора, какие хочу запустить.
2E, тип, длина данные, кс, где
2E — стартовый байт
22 — байт с типом посылки
04 — байт длины
данные — данные
кс — контрольная сумма, сумма всех байт помимо стартового, и в конце XOR FF.
0
ValeryS
01.10.2024, 20:34
  #14
 Комментарий модератора 
Цитата Сообщение от Михаил 25 Посмотреть сообщение
Не хочется засорять форум, если можно, то напишу в личку.
Правила п 4.6
Обсуждение вопросов - только в теме на форуме. Приглашения к обсуждению еще где-либо (в том числе и с помощью системы личных сообщений) запрещены, за исключением коммерческих разделов.
п 4.12
Не стоит просить или предлагать выслать ответ в icq, e-mail и другие средства общения. Эта просьба все равно не будет выполнена, а сообщение будет отредактировано модератором.
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
01.10.2024, 21:17  [ТС] 15
ValeryS, Спасибо! Учту, на будущее.
0
3319 / 2420 / 550
Регистрация: 11.09.2009
Сообщений: 8,789
01.10.2024, 23:22 16
Цитата Сообщение от Михаил 25 Посмотреть сообщение
Закономерность данных вычислил, при передаче через Terminal, срабатывают те сектора, какие хочу запустить.
Если эта загадочная фраза означает, что вы с ноутбука при помощи Terminal 1.9b имитируете код с датчика вида "2E 22 04 data1 data2 data3 data4 контр. сумма" (8 байт), передавая его по UART в ММС, и можете правильно установить отображение, задавая data1 data2 data3 data4, то это значит, что вы точно знаете, что надо передавать по UART в ММС. Знаете, что и в каком формате должно содержаться в data1 data2 data3 data4. Это верно?

Если "да", тогда следующий вопрос: Означают ли фразы
Цитата Сообщение от Михаил 25 Посмотреть сообщение
Получаю 0x2E;0xC0;0xE0;0xFF;0xFF; checksum 0x07. ... изменения присутствуют в зависимости от расстояния до препятствия,
что 0xC0 0xE0 0xFF 0xFF - это те самые данные, в том же порядке, те самые 4 байта, которые можно вставить в посылку Terminal 1.9b, добавив спереди 0x2E 0x22 0x04, а сзади байт контрольной суммы, передать с него эти 8 байт в MMC, и тот их примет и правильно отобразит?

Если "да", то получается ваш вопрос в том, как из последовательности из 6 (шести) байт 0x2E data1 data2 data3 data4 checksum_A сделать последовательность из 8 (восьми) байт 0x2E 0x22 0x04 data1 data2 data3 data4 checksum_B ? Так что ли? (Поверить не могу... )

Добавлено
И ещё вопрос. Вы нигде последовательность битов младший-старший не путаете? Решил тут посчитать "checksum 0x07" для 0xc0;0xe0;0xff;0xf0; ... не получается. Простая сумма этих 4 байт равна 0x038F. Если отбросить старший байт, то 0x8F. Инвертируй, не инвертируй, ну никак у меня 0x07 не получается. 0x70, хоть убейся...
Какой алгоритм подсчёта контрольной суммы?
Цитата Сообщение от Михаил 25 Посмотреть сообщение
сумма всех байт помимо стартового, и в конце XOR FF.
?
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
02.10.2024, 00:41  [ТС] 17
i8085,Знаете, что и в каком формате должно содержаться в data1 data2 data3 data4. Это верно?
По - первому вопросу да.
Означают ли фразы что 0xC0 0xE0 0xFF 0xFF - это те самые данные, в том же порядке, те самые 4 байта, которые можно вставить в посылку Terminal 1.9b, добавив спереди 0x2E 0x22 0x04, а сзади байт контрольной суммы, передать с него эти 8 байт в MMC, и тот их примет и правильно отобразит?
По - второму нет.
Это не эначения, к которым в начале можно подставить 3 первых байта и к.с. Эти данные ММ не примет. Конвертировать через массивы не желательно. Поэтому и решил использовать родной блок парктроника добавив к нему своего рода адаптер на stm32 в режиме захвата внешнего сигнала. С увеличением расстояния увеличивается интервал между последним импульсом пачки ультразвука и приходом эхо сигнала, счетчик посчитает количество импульсов это и есть данные дистанции. Ну и с таймером картина вырисовывается буду использовать мультиплекс/ демультиплекс CD4051B, в этом случае будет использован один таймер, проще настройка

Добавлено через 5 минут
i8085, Чек сумму не я считал, это данные лог анализатора Sealea Logic.
По мануалу Lin bus сумма всех байт и инверсия

Добавлено через 20 минут
i8085, Для моего случая: 2E;0x22;0x04;0x08;0x10;0x18;0x20 Check sum= 89
сумма всех байт помимо стартового B0 (2E), и в конце XOR FF.

Добавлено через 23 минуты
i8085, Хотел видео скинуть, но что-то не получается.
0
Модератор
Эксперт по электронике
8945 / 6711 / 921
Регистрация: 14.02.2011
Сообщений: 23,658
02.10.2024, 00:50 18
Цитата Сообщение от Михаил 25 Посмотреть сообщение
и в конце XOR FF.
это же обыкновенная инверсия
Цитата Сообщение от Михаил 25 Посмотреть сообщение
0x22;0x04;0x08;0x10;0x18;0x20
=0x76
!0x76=0x89
0x76+0x89=0xFF

Добавлено через 1 минуту
Цитата Сообщение от Михаил 25 Посмотреть сообщение
Хотел видео скинуть, но что-то не получается.
в "расширеном режиме" есть теги Ютуба и Рутуба
0
3319 / 2420 / 550
Регистрация: 11.09.2009
Сообщений: 8,789
02.10.2024, 09:59 19
Цитата Сообщение от Михаил 25 Посмотреть сообщение
По - второму нет.
Это не эначения, к которым в начале можно подставить 3 первых байта и к.с.
Воот. Однозначно понятно. Не те.
А вот дальше - зачем мне про парктроник с адаптером, если речь о формате числа? Тема сисек не раскрыта. ©
Понятно только, что числа не те.
Вообще не те, нет в них информации о дистанции и никаким алгоритмом их нельзя преобразовать к нужным, т.е. датчик выдаёт ненужный числовой мусор, или есть такой алгоритм?

Дальше вы перекинулись на временные интервалы, описание работы ультразвукового датчика расстояния, подсчёт импульсов... Это написано для чего? Вы будете делать свой датчик, с нужным "правильным" выходным протоколом?

Попробуйте всё-таки ещё поднапрячься и описать кратенько и только по делу, что же за задачу решаем. Преобразование кодов или разработку датчика? Или что?
0
0 / 0 / 0
Регистрация: 25.07.2017
Сообщений: 16
02.10.2024, 15:58  [ТС] 20
i8085, Честно, говоря, я уже больше склоняюсь сделать свой блок парктроника. с штатными датчиками.
Какие контроллеры стоят в этом приборе, как он считает мне неизвестно. Перепрограммировать в принципе можно, нужно будет иметь программатор + панельки для контроллера. Да и чувствительность штатных датчиков выше. Как-то так.
Буду делать свой.
0
02.10.2024, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2024, 15:58
Помогаю со студенческими работами здесь

Как запрограммировать экспоненту
Добрый вечер! Помогите пожалуйста с вопросом: как запрограммировать функцию exp(x). Это...

Как запрограммировать кнопку...
Такой вопрос: как запрограммировать кнопку на запуск какого-либо приложения, находящегося на...

как запрограммировать EEPROM
Помогите пожалуйста разобраться. У меня программа состоит из одного файла который содержит 3...

Как запрограммировать интеграл в C++
Помогите запрограммировать интеграл на фото, пожалуйста.

Как в 1С запрограммировать поиск?
В подборе номенклатуры для заказа покупателя в управлении торговлей, надо добавить строку поиска...

Как запрограммировать факториал на C++
Как запрограммировать вот это:


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru