STM32f103 использование портов I2C

Зеленые - входы АЦП. И не я эту тему поднял.
Меня интересует подключение РВ10-11, а то что волны пошли - я не виноват!!!

и что? Вы на основании цвета сделали вывод, что он толерантны к 5в?

про толерантность - вы, не юлите

Если вас интересует, как поднять на этих пинах вторую шину I2c - смотрите комментарии в примере i2c_scanner.ino, там все расписано:

/* 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>
#include <LiquidCrystal_I2C.h>

Wire.setSDA(PB11);
Wire.setSCL(PB10);

boolean lst_sig, osc_st ;
uint32_t counter = 0, fintime, currenttime = 0;
const int sig_pin=12, osc_pin=2;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup(){
Wire.begin();
lcd.init();
lcd.backlight();
pinMode(sig_pin, INPUT) ;
// pinMode(osc_pin, OUTPUT) ;
}

void loop(){
counter = 0 ;
lst_sig=digitalRead(sig_pin) ; fintime = millis()+1000 ;
if ((fintime+1) < millis()) {delay(1100) ; goto start ;}
while (millis()<fintime) {
// osc_st=!osc_st ; digitalWrite(osc_pin,osc_st) ;
if (digitalRead(sig_pin)!=lst_sig) {counter++ ; //lst_sig=!lst_sig ;
}

lcd.setCursor(0, 0);
lcd.print("frequency=");
lcd.print(counter/2);
delay(2000) ;

}
//это я синим светодиодом и осциллографом пробовал возможности lgt8 как частотомера, но чем хороша Ардуино - минимальной привязкой к железу.
Завтра почитаю ссылку повнимательней.

@ЛИУС-2 , неужели Вы не заметили, что вставленный Вами код выглядит совсем не так, как вставленный другими участниками форума?
Исправляйтесь. Иначе окажется, что фейс-контроль на форум Вы не прошли.

И, кстати, программка должна выглядеть несколько иначе. Но указать, где именно, я затрудняюсь, т.к. в Вашем коде нет номеров строк.

Не хочу устраивать срач, но напоследок еще раз отмечу: выходы I2C-2 только толерантные, но не ШИМ и не АЦП, если картинка не врёт!
И предлагаю больше не касаться того, что не касается I2C-2.
Но вроде бы этот вопрос прояснился…
Спасибо за участие!

Пардон, забыл про ```

Про АЦП никто и не говорит, а вот ШИМ на них можно настроить. Для контроллеров STM32 характерно, что одну и ту же функциональность можно приписать разным пинам. Это называется pin remaping.
Вот например, то что I2c-1 можно поднять и на PB6 PB7, и на PB8 PB9 - это как раз пример ремаппинга. Точно также и ШИМ часто можно “сдвинуть” на другие пины.

Ок, замечание по теме - ваш код в #24 неверный, я думаю он даже компилироваться не будет

абсолютно с Вами согласен, я аппаратный ШИМ и не использовал

///...
 ++pila ; //ШИМ инкремент (байт) ....for...
  digitalWrite(cur_out,((signal>pila) ? HIGH : LOW)) ; // как-то так, и всех делов...

Причем сразу на дюжину ног в цикле,
но меня интересовала оптимизация.
2 выходных дня по 3 часа потратил впустую на поиски в интернете, пока добрые и умные люди на Форуме не подсказали…

Я уж не знаю, оптимизация или нет, но пишется короче:

digitalWrite(cur_out, signal > ++pila) ; // как-то так, и всех делов...

Я писал вчера как черновик, сегодня подправил, пустил на компиляцию - и был разочарован:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

void setup(){
//  Wire.setSDA(PB11);  когда комментируем предложенные
//  Wire.setSCL(PB10);  строки, компилятор 
//предупреждает о возможной несовместимости, но
//срабатывает.


  Wire.begin();
  lcd.init();
  lcd.backlight(); 
//...
}

ПРЕДУПРЕЖДЕНИЕ: библиотека LiquidCrystal_I2C должна запускаться на архитектурах avr и может быть несовместима с вашей платой на архитектуре STM32F1.
Скетч использует 16948 байт (25%) памяти устройства. Всего доступно 65536 байт.
Глобальные переменные используют 2192 байт (10%) динамической памяти, оставляя 18288 байт для локальных переменных. Максимум: 20480 байт.

а когда они являются частью скетча, имеем

Несколько библиотек найдено для “Wire.h”
Используется: C:\Users\Aleksey\AppData\Local\Arduino15\packages\stm32duino\hardware\STM32F1\2022.9.26\libraries\Wire
Не используется: C:\Users\Aleksey\AppData\Local\Arduino15\packages\stm32duino\hardware\STM32F1\2022.9.26\libraries\WireSlave
exit status 1
‘class TwoWire’ has no member named ‘setSDA’
(Причём содержимое папок разное и даты 19 и 20 года, в то время как Арду на этот комп я ставил в конце 23-го.)
И откуда появился ‘class TwoWire’ ?

Все особенности аддона stm32 описаны в wiki. Про i2c здесь API · stm32duino/Arduino_Core_STM32 Wiki · GitHub

Он всегда там был. Это класс, к которому относится объект Wire.
А насчет ошибок - у вас какой пакет поддержки Стм32 установлен - от Stm или аддон Кларка?

И вообще, рановато видно, вам лезть в использование второй шины i2c, если вы сами не догадались открыть исходный текст библиотеки Wire, и посмотреть откуда там взялся этот класс.

Я конечно прошу пардону, но именно поэтому я и обратился за помощью к знатокам. А Ардуино я устанавливал по инструкции с одного из сайтов - отвечал ОК! И что она мне напихала - ХЗ! Вот уж что совершенно точно - так что с моими знаниями проще в китайской грамоте разобраться. Но не моя вина, что советы профессионалов годятся псу под хвост.
Auf Wiedersehen!

b707, я восхищаюсь вашим терпением.

Есть только один сайт GitHub - stm32duino/Arduino_Core_STM32: STM32 core support for Arduino
Остальные вторичны.

Вы только так кредиты не берите, а то ведь потом не расплатитесь.

Да мне-то чо, это ж ему дальше с этим жить, не мне :slight_smile: