STM32 F103C8T6

ssss
Offline
Зарегистрирован: 01.07.2016

Ivanii пишет:

Вообще конечно класно, у СТМ32 шустрая математика, большая и быстрая переферия, но реальных задач где СТМ32 лучше АТмег я не вижу...

Прочтите несколько первых страниц этой темы, дабы не повторяться в поднадоевшем холиваре. Никто же никого не заставляет юзать СТМ32.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ivanii пишет:

обрабатывать звук никто в здравом уме не станет ни на ATmega328P ни на STM32F103C.

Ну, видать, у меня со "здравым умом" что-то случилось:

http://arduino.ru/forum/proekty/konstruktsiya-vykhodnogo-dnya-prostoi-spektranalizator-480-polos-60-db-na-stm32f103-i-

Цитата:

32 КБ флеша это гдето 3000 - 8000 строк СВОЕГО кода, если не пихать мусор в скетч.

Во-первых, 3к-8к строк - это не так много.

А во-вторых, есть такая вещь, как табличная функция. Особенно актуальная для МК, минимум, по двум причинам:

- в них, как правило, нет аппаратной поддержки плавающей точки,

- нередко требуется функция "под конкретное железо", т.е. даже не имеющая аналитического выражения.

А табличная функция сама по себе способна сожрать тысячи строк, а вместе с ними и десятки килобайт.

Цитата:

Для меня блинк на СТМ32 вообще стал откровением:

ATmega328P как UNO "Скетч использует 930 байт (2%) памяти устройства. Глобальные переменные используют 9 байт"

STM32F103C8T6 как STM32F103C "Скетч использует 14356 байт (21%) памяти устройства. Глобальные переменные используют 3088 байт (15%) динамической памяти" что!? 14 КБ флеша и 3 КБ оперативки!!!

Да, у меня, когда я впервые с этим столкнулся, тоже был шок.

Но постепенно я себя убедил, что 20к-3к - это больше, чем 2048-9.

Цитата:

Меня пока устраивают(работают без ошибок) согласователи из 1-2х резисторов, а вот в схемах на STM32 согласователи на микросхемах вижу постоянно.

Это если пользоваться шилдами для Ардуино, где уже стоят преобразователи 3.3->5 именно для подключения к AVR.

Kost286
Offline
Зарегистрирован: 20.09.2016

Ну нифига себе ваша Ардуина скока памяти съедает. Я специально сейчас посмотрел на TruStudio - 2040 байт потратил для миганмия светодиодом. Это без оптимизации.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Kost286 пишет:

Ну нифига себе ваша Ардуина скока памяти съедает. Я специально сейчас посмотрел на TruStudio - 2040 байт потратил для миганмия светодиодом. Это без оптимизации.

Ну и как это влияет на применение. Сначала напиши реальную программу которая "не влезет", а потом начинай "старые песни".

nikantovik
Offline
Зарегистрирован: 19.06.2015

andriano пишет:

PS. Мне кажется, если бы с самого начала Ардуина развивалась на STM32, сейчас проблем было бы намного меньше:

- не потребовалось бы согласования по уровням с периферией, которая почти вся работает на 3.3В,

- возможно было бы обойтись меньшим числом различных контроллеров,

- возможно было бы провести гораздо более глубокую унификацию софта,

- ну и ресурсы...

На меня, я думаю, обрушаться с критикой сторожилы всея ардуино. Но все таки осмелюсь сказать что есть "ардуина"  изначально развитая на STM32 (и не только), это MBED. Порог вхождения такой же легкий, а во многом даже более удобный. Куча готовых библиотек. Сообщество (правда на англицком).  Постоянно развивается.

nik182
Offline
Зарегистрирован: 04.05.2015

Порог вхождения в мбед выше. Что бы что-то найти типа аналогрид нужно как минимум знать английский на хорошем уровне. Как только потребовалось сделать шаг в сторону, проще стало куб с атоликом взять. По крайней мере всё в твоих руках. 

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

Порог вхождения в мбед выше. Что бы что-то найти типа аналогрид нужно как минимум знать английский на хорошем уровне. Как только потребовалось сделать шаг в сторону, проще стало куб с атоликом взять. По крайней мере всё в твоих руках. 

Я не к тому чтобы поспорить, просто интересно что в этом сложного?

Определение пина AnalogIn  AI (PA_1)

а считывание данных AI.read()

https://os.mbed.com/docs/mbed-os/v5.12/apis/analogin.html#analogin-hello-world

да и в описании API на сайте можно интуитивно по примерам разобраться.

По секрету, я оч плохо знаю англиский ))

Кстати, насчет порога вхождения https://habr.com/ru/post/420435/

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nikantovik пишет:

...есть "ардуина"  изначально развитая на STM32 (и не только), это MBED. Порог вхождения такой же легкий, а во многом даже более удобный.

nikantovik пишет:

Кстати, насчет порога вхождения https://habr.com/ru/post/420435/

Вот прямо по этой ссылке:

Цитата:

  1. Скачать и поставить MinGW, arm-none-eabi-gcc и GNU make (для пользователей Windows 10 первый пункт не нужен, достаточно из Магазина поставить свежую Ubuntu)
  2. Скачать и распаковать последний релиз RIOT с Гитхаба
  3. cd RIOT/examples/hello-world
  4. make BOARD=nucleo-l152re
  5. залить полученный HEX-файл любым способом на Nucleo (в свежих версиях ST-Link это можно сделать просто киданием его на виртуальный диск)

У Ардуино 1 и 2 пункт умещаются в один, а 3, 4 и 5 - во второй. Т.е. скачать, распаковать и нажать кнопку. Без всякой командной стироки.

И, кстати, самый серьезный пункт в "доардуиновскую эпоху" был 5: "залить любым способом". Когда мой сын занимался микроконтроллерами, а это было в "доардуиновскую эпоху", самым сложным было как раз это - в качестве программатора использовался какой-то микроконтроллер, который:

- использовался в нестандартном режиме,

- уже был снят с производства, поэтому была проблема его найти,

- ну и в него тоже надо было как-то залить прошивку.

Кстати, для прошивки Ардуины ST-Link необязателен, и это один из важнейших факторов "уровня вхождения".

nikantovik
Offline
Зарегистрирован: 19.06.2015

andriano пишет:

 

Вот прямо по этой ссылке:

Цитата:

  1. Скачать и поставить MinGW, arm-none-eabi-gcc и GNU make (для пользователей Windows 10 первый пункт не нужен, достаточно из Магазина поставить свежую Ubuntu)
  2. Скачать и распаковать последний релиз RIOT с Гитхаба
  3. cd RIOT/examples/hello-world
  4. make BOARD=nucleo-l152re
  5. залить полученный HEX-файл любым способом на Nucleo (в свежих версиях ST-Link это можно сделать просто киданием его на виртуальный диск)

У Ардуино 1 и 2 пункт умещаются в один, а 3, 4 и 5 - во второй. Т.е. скачать, распаковать и нажать кнопку. Без всякой командной стироки.

И, кстати, самый серьезный пункт в "доардуиновскую эпоху" был 5: "залить любым способом". Когда мой сын занимался микроконтроллерами, а это было в "доардуиновскую эпоху", самым сложным было как раз это - в качестве программатора использовался какой-то микроконтроллер, который:

- использовался в нестандартном режиме,

- уже был снят с производства, поэтому была проблема его найти,

- ну и в него тоже надо было как-то залить прошивку.

Кстати, для прошивки Ардуины ST-Link необязателен, и это один из важнейших факторов "уровня вхождения".

Я говорил  про MBED, а вы зачем-то из статьи выдернули кусок про RIOT и машете им как крассной тряпкой. Тем более ниже про RIOT написано 

"В принципе, это был сложный путь..."

Что бы начать программировать в MBED вообще ничего устанавливать не надо. Там онлайн компилятор. Достаточно зарегиться. ST Link да, нужен. В родных платах он встроен. 

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

nikantovik пишет:

ST Link да, нужен. В родных платах он встроен. 

Если есть любой USB-UART конвертер, то не нужен. Можно загружать через UART хоть голый микроконтроллер. Или MBED не поддерживает встроенный загрузчик STM32 ? А Arduino IDE поддерживает загрузчик STM32 или тоже нет? Я просто никогда не пробовал, загружал только фирменными утилитами.

nikantovik
Offline
Зарегистрирован: 19.06.2015

Jeka_M пишет:

Если есть любой USB-UART конвертер, то не нужен. Можно загружать через UART хоть голый микроконтроллер. Или MBED не поддерживает встроенный загрузчик STM32 ? А Arduino IDE поддерживает загрузчик STM32 или тоже нет? Я просто никогда не пробовал, загружал только фирменными утилитами.

Если напрямую из онлайн MBED IDE то нужен ST Link V2-1 (который можно состряпать самому из maple mini ну или из f103c8t6 120 кб),  а если загружать из Platformio то там все варианты возможны (и UART и обычный ST Link)

b707
Offline
Зарегистрирован: 26.05.2017

nikantovik - вы не о том совсем. Лучше скажите - у концепции MBED есть хоть какие-то преимущества перед Ардуино? Ардуино все обвиняют в неэффективности работы с реальным МК

Насколько я знаю. MBED это еще более монструозная и далекая от реального железа конструкция. заточенная на то, чтобы тупые пользователи вообще не углублялись в нюансы периферии конкретного контроллера В итоге тот код, что в каком-нибудь Кэйле занимает 8К - в MBED дай бог в 100к флеша влазит.

Короче - один фреймворк для кухарок (Ардуино) у нас уже есть. Зачем нам второй?

 

А вообще - у вас же есть своя тема в Отвлеченных для рекламы MBED. Зачем вы сюда, извиняюсь, "ходите" ? :)

nikantovik
Offline
Зарегистрирован: 19.06.2015

b707 пишет:

nikantovik - вы не о том совсем. Лучше скажите - у концепции MBED есть хоть какие-то преимущества перед Ардуино? Ардуино все обвиняют в неэффективности работы с реальным МК

Насколько я знаю. MBED это еще более монструозная и далекая от реального железа конструкция. заточенная на то, чтобы тупые пользователи вообще не углублялись в нюансы периферии конкретного контроллера В итоге тот код, что в каком-нибудь Кэйле занимает 8К - в MBED дай бог в 100к флеша влазит.

Короче - один фреймворк для кухарок (Ардуино) у нас уже есть. Зачем нам второй?

 

А вообще - у вас же есть своя тема в Отвлеченных для рекламы MBED. Зачем вы сюда, извиняюсь, "ходите" ? :)

Ну то что на меня обрушаться с критикой я об этом сразу сказал )) 

Да это фреймворк, а то что ардуино для кухарок и тупых пользователей  вы тем самым оскорбили  всех пользователей ардуино. А среди них очень грамотные люди на этом сайте есть!. Оскорбление не лучший способ вести конструктивную беседу. Насчет преимуществ перед ардуино, то вы видать не прочитали статью ссылку на которую я выше оставил.

MBED OS занимает не мало места, но и FREE RTOS тоже на 8кб не поместиться.

А если использовать библиотеку MBED без оськи, то к примеру под Platformio на STM32f103c8t6 (зная некоторые фишки) блинк получается всего 7 кб. На ардуино меньше?

nik182
Offline
Зарегистрирован: 04.05.2015

Дело не килобайтах. Я чесно пытался посидеть на мбеде пару месяцев. С 411 нуклеей и блю пилом. Нуклею в ардуине не запрграмируешь, а блю пил вполне. Поимел кучу головной боли при попытках сделать что то отличное от блинка. То что на ардуине я делаю за пол часа с блюпилом в мбеде потребовало несколько дней и чтения кучи доков на ангийском, при том что дэйташиты на нем я читаю свободно без словарей. Вобщем уже больше года только письма приходят от туда об очередной версии ОС. С ней я пытался разобраться, но оказалось что на FreeRTОS разобраться проще и быстрее из куба. Это личное мнение. Если надо что то быстро проверить, то я предпочитаю ардуиновскую иде. 

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

Это личное мнение...

Каждый имеет право на личное мнение. Я поделился своим, может кто-то попробует MBED  и понравиться. Я не против ардуино, самого ни раз выручала. Так же как и не против кейлов, кокосов и т.д. просто мне кажеться что уж много времени они отнимают. Но как вы и сказали это мое личное мнение, ни кому ни чего не навязываю, 

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

То что на ардуине я делаю за пол часа с блюпилом в мбеде потребовало несколько дней и чтения кучи доков на ангийском, при том что дэйташиты на нем я читаю свободно без словарей. . 

Я ,если честно, не понимаю куда проще....

https://os.mbed.com/users/hudakz/code/STM32F103C8T6_Hello/

а API все задокументированы так, что знание англицкого не нужно... или я вундеркинд )))  (что врятли!)

https://os.mbed.com/docs/mbed-os/v5.12/apis/drivers.html

без обид (надеюсь)

nik182
Offline
Зарегистрирован: 04.05.2015

Отлично. На нуклее303 включить 3 канала DAC и выдать напряжения. Я не смог на мбеде. В кубе ровно за 5 минут. 

ssss
Offline
Зарегистрирован: 01.07.2016

А что... куб уже стал поддерживать ардуину?

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

Отлично. На нуклее303 включить 3 канала DAC и выдать напряжения. Я не смог на мбеде. В кубе ровно за 5 минут. 

А сколько интересно времени уйдет на то чтобы сконфигурировать пин

AnalogOut  aout (PA_5)

и считать или записать данные

aout.read() 

aout.write()

https://os.mbed.com/docs/mbed-os/v5.12/apis/analogout.html

думаю меньше пяти минут ))

ssss
Offline
Зарегистрирован: 01.07.2016

Давайте не плодить сущности. Кто и за сколько натыкает код вообще не предмет спора, тут больше больше дело привычки и навыков. КУБ вообще никакого кода не генерирует, кроме инита периферии. А тело основной проги можно допиливать долго и нудно, несмотря на очень быстрый старт. Так что... бег, при состоянии прогрессируещего поноса, не является олимпийским видом спорта.

nik182
Offline
Зарегистрирован: 04.05.2015

Два канала включить не проблема. Третий канал DAC проблема.

Не куб ардуину, а ардуину научили брать кубовую генерацию инициализации перефирии, ну а остальное ручками дописывается в ардуино иде.    

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

Два канала включить не проблема. Третий канал DAC проблема.

а какая именно nucleo 303 у вас? всмысле буквенный индекс?

nik182
Offline
Зарегистрирован: 04.05.2015

Как плата нано. К8 кажется. Я сейчас от неё далеко. 

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

Два канала включить не проблема. Третий канал DAC проблема.

 

насколько я понял в расширенной версии mbed-dev это вопрос решен...

В реале, на железе проверю при первой возможности )

nik182
Offline
Зарегистрирован: 04.05.2015

Ну это лишнее. Я уже всё сделал и свободных плат больше нет. Просто полтора года назад именно этот нюанс не позволил полностью поверить в мбед. 

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

Просто полтора года назад именно этот нюанс не позволил полностью поверить в мбед. 

Радует именно то что они не стоят на месте )

nikantovik
Offline
Зарегистрирован: 19.06.2015

nikantovik пишет:

nik182 пишет:

Два канала включить не проблема. Третий канал DAC проблема.

 

насколько я понял в расширенной версии mbed-dev это вопрос решен...

В реале, на железе проверю при первой возможности )

Проверено в Platformio. Все три канала конфигурируются без проблем и работают на железе )

nik182
Offline
Зарегистрирован: 04.05.2015

Прости, я не знаю что такое платформио, но и тогда всё нормально конфигурилось, компилилось и заливалось в плату. Вот только работали только 2 канала. Третий ни как не хотел выдавать напряжение в реальном железе. 

nikantovik
Offline
Зарегистрирован: 19.06.2015

nik182 пишет:

Прости, я не знаю что такое платформио...

https://platformio.org

отличная штука. поддерживает кучу фреймворков. cube, ардуино в том числе и mbed

На виндовсе правда тормозит, а вот на линуксе очень даже шустро работает.

krepton85
Offline
Зарегистрирован: 02.02.2016

Ребята, помогите, что за фигня с библиотекой wire для stm32 стандартный скетчь сканер i2c не видит slave с адресом 0х78 (10 битная шина i2c).

Вот пример скетча: 

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//



/* Example pinmap for Bluepill I2Cs (by Testato)

 I2C-1 standard pins: PB7(sda) PB6(scl)
 Use it by "Wire" without pin declaration
  Wire.begin();

 I2C-1 alternative pins: PB9(sda) PB8(scl)
 Remap the first I2C before call begin()
  Wire.setSDA(PB9);
  Wire.setSCL(PB8);
  Wire.begin();

 I2C-2: PB11(sda) PB10(scl)
 Remap the second I2C before call begin()
  Wire.setSDA(PB11);
  Wire.setSCL(PB10);
  Wire.begin();

 If you want to use the two I2Cs simultaneously, create a new instance for the second I2C
  TwoWire Wire2(PB11,PB10);
  Wire2.begin();
 
*/


#include <Wire.h>


void setup() {

  Serial.begin(115200);
  //Wire.setSDA(PB9);
  //Wire.setSCL(PB8);
  Wire.begin();
  Wire.setClock(100000);
  Serial.println("\nI2C Scanner");
}


void loop() {
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++) {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
      
    Wire.beginTransmission(address);
    
    error = Wire.endTransmission(true);
    
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) 
        Serial.print("0");
      Serial.println(address, HEX);

      nDevices++;
    }
    else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) 
        Serial.print("0");
      Serial.println(address, HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found");
  else
    Serial.println("done");

  delay(5000);           // wait 5 seconds for next scan
}

 

Мега 2560 без проблем видит этот slave 0x78 с этим же скетчем. Естественно др. скетчи в stm32  так же не работают с этим slave, др. slave находит без проблем, например OLED SSD1306 дисплей по i2c 0х3с работает отлично.

Нашел в библиатеках wire.cpp & twi.c выбор режима шины i2c 7 бит или 10 I2C_ADDRESSINGMODE_7BIT изменил на 10, но ничего не дало, даже oled дисплей перестал работать. Как же заставить работать с 10 битным slave-ом stm32?

Проверил i2c сниффером, вместо slave c адресом 0х78 создал на меге slave с аналогичным адресом, подключил его к stm32 сканер по прежнему ничего не увидел, но в логах i2c sniffer  видно что stm32 шлет запрос на адрес 0x78 и получает на его ответ ACK, но зачем то игнорит ACK. Познее проверил тоже самое но с адресом 0х77 тут все отлично, находит сканер. В чем же дело?

b707
Offline
Зарегистрирован: 26.05.2017

krepton85 - вполне возможно, что дело в разнице уровней - на СТМ32 это 3.3в, а на меге 5в, поэтому сигналы с Меги ваше I2C устройство видит, а с СТМ нет

А скетч сканера, что вы привели - очень простой и "не работать" там нечему

ssss
Offline
Зарегистрирован: 01.07.2016

Чаво???????

Либо скетч корявый... адресация... либо сама либа... А сам СТМ32 тут каким то боком виноват???

krepton85
Offline
Зарегистрирован: 02.02.2016

Нет. С мегой тоже не видит 0x78 адрес. Дело не в уровнях, пробовал и через конвертор уроаней, тоже самое, кто то специально в библиотеке заблокировал работу с адресами выше чем 0х77.

b707
Offline
Зарегистрирован: 26.05.2017

krepton85 пишет:
кто то специально в библиотеке заблокировал работу с адресами выше чем 0х77.

ну если вы знаете, что там блокировка - так разблокируйте, исходники библиотеки открыты

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ты определись какта

krepton85 пишет:

Мега 2560 без проблем видит этот slave 0x78 с этим же скетчем. 

Или 

krepton85 пишет:

С мегой тоже не видит 0x78 адрес.

Хрен тебя поймёшь

krepton85
Offline
Зарегистрирован: 02.02.2016

Да немного запутал вас, прошу прощения. Есть чип от картриджа с тонером, который определяется по i2c шине по 0х78 адресу. Так вот STM32 при любом раскладе не видит этот адрес, и чип от тонер-картриджа, и мегу2560 каторую я использовал для проверки в качестве slave с таким же адресом как и тонер-чип(папробуйте у себя такой эксперемент в связке по i2c stm32 и slave например на AVR c адресом 0х78). А вот если скетчь - сканер i2c залить в Мегу то сканер без проблем находит тонер-чип по адресу 0х78.

Сканер на stm 32 выдает ошибку error=4 "Unknown error at address 0x78" и далее все адреса сканирует с этой ошибкой, начиная с 0 по 126 адрес, даже если подключить oled дисплей, то и на его такая же реакция, пока не перезагружу плату stm32.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

i2c шина подтянута резисторами к плюсу? 

krepton85
Offline
Зарегистрирован: 02.02.2016

Да, по 10к каждый, в связке с мегай резисторы не нужны, она сама их подключает, это я заметил, а вот в stm32 резисторов подтягивающих нет на i2c, думаю так специально сделали т.к. шина i2c здесь талерантна и к 5 вольтам и 3,3 вольт, по этому пользователь сам выбирает к какому питанию подтянуть.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а от какого картриджа чип?

krepton85
Offline
Зарегистрирован: 02.02.2016

lexmark mx310

В общем вырезана в библиатеках поддержка 10 битной шины i2c все адреса с 0х78 - 0х7B не видятся на шине i2c в STM32.

b707
Offline
Зарегистрирован: 26.05.2017

krepton85 пишет:

 

В общем вырезана в библиатеках поддержка 10 битной шины i2c все адреса с 0х78 - 0х7B не видятся на шине i2c в STM32.

Вы уже второй раз это пишете. Откуда дровишки-то? В исходниках нашли?

Если нашли - почему не поправите?

krepton85
Offline
Зарегистрирован: 02.02.2016

Если бы я знал в каком именно месте то поправил бы.

Вот этот пакет для плат использую: https://github.com/stm32duino/Arduino_Core_STM32/

b707
Offline
Зарегистрирован: 26.05.2017

попробуйте законнектить с адресом 0xF0
 то есть сдвинуть адрес влево на 1  ( 0x78 << 1 )   = 0xF0

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

krepton85,  адрес  0x78 -не выходит за рамки 7-битной адресации (max 0x7F) . Косяк у вас очевидно в аппаратной части.

krepton85
Offline
Зарегистрирован: 02.02.2016

Комбинация бит 11110ХХ адреса зарезервирована для 10-битной адресации. Можно почитать здесь: https://ru.wikipedia.org/wiki/I%C2%B2C

b707
Offline
Зарегистрирован: 26.05.2017

dimax пишет:

krepton85,  адрес  0x78 -не выходит за рамки 7-битной адресации (max 0x7F) . Косяк у вас очевидно в аппаратной части.

Димакс, там не все так просто. 7битный адрес посылается в байте, для некоторых адресов 7бит посылаются выравненные по нижней границе байта, для некоторых - по верхней

b707
Offline
Зарегистрирован: 26.05.2017

krepton85 пишет:

Комбинация бит 11110ХХ адреса зарезервирована для 10-битной адресации. Можно почитать здесь: https://ru.wikipedia.org/wiki/I%C2%B2C

так вы попробовали или просто так спорите?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

krepton85, а как вы включали 10 битную адресацию? Привидите полный скетч.

b707
Offline
Зарегистрирован: 26.05.2017

Тогда наоборот сдвинуть адрес вправо 0x78 >> 1 = 0x3C

Вся это вытекает из того, что старший бит адреса - это Read/Write bit - некоторые библиотеки и производители железа включают его в адрес, а некоторые нет - вот и выходит, что одни пишут на девайсе адрес 0x78, а другие  0x3C, хотя на самом деле это одно и то же

krepton85
Offline
Зарегистрирован: 02.02.2016

Нет, нет, нет, тут бит направления передачи данных не причем и функции Wire.begin(adress), Wire.beginTransmission(adress)

даже из стандартной библиатеки Wire не имеют доступа при установке адреса к этому биту. 10 битная шина данных совместима с 7 битной, за счет зарезервированных адресов формата 11110ХХ , где ХХ являются старшими битами 10 битного адреса , а остальные  8 младших битов передаются как данные (2-ым байтом).

В любом случае slave должен ответить на 7 битный запрос ACK, а потом принять остальных 8 бит (младших) своего адреса и так же их подтвердить ACK. И все это так и работает, но почему игнорит ACK stm32?