STM32F103C8T6 I2C

Arduino specifieke Software
Gebruikers-avatar
Berichten: 50
Geregistreerd: 22 Jun 2013, 00:04

STM32F103C8T6 I2C

Berichtdoor Duiker » 27 Mei 2024, 22:36

Hallo allemaal.

Ik heb een vraag over een STM32F103 waarbij ik een I2C display op de I2C poort aansluit Het gebruikte display is toevallig een LCD 2004. Dat is een 5V display.
Wanneer ik deze als volgt aansluit:

SCL = PB6
SCA = PB7

dan werkt het display prima.

Echter waneer ik deze aansluit op (PB8 en PB9) OF (PB10 en PB11) dan werkt het niet. Het heeft me wat hoofdbrekens gekost om hier achter te komen!
De vraag is Waarom werken de ander poorten niet?

Zou ik op de een of andere manier een van de I2C poorten kunnen selecteren? Want het komt me nogal vreemd over dat er 3 I2C poorten zijn. Aan een I2C bus hangt immer alles parallel.
We leven in het midden van de ruimte, maar aan de rand van de tijd.

Advertisement

Berichten: 188
Geregistreerd: 26 Aug 2015, 11:57

Re: STM32F103C8T6 I2C

Berichtdoor Frits1956 » 27 Mei 2024, 23:06

zijn de genoemde pinnen wel een uart?
Ik ken dit type board niet maar kan me niet voorstellen dat er oneindig veel hardware uart poorten zijn.
Een arduino Mega heeft bijvoorbeeld maar 4 van deze poorten

Gebruikers-avatar
Berichten: 50
Geregistreerd: 22 Jun 2013, 00:04

Re: STM32F103C8T6 I2C

Berichtdoor Duiker » 28 Mei 2024, 07:40

Afbeelding

Dit is de PinOut van de STM32. Ik zie 3 stuks I2C poort, maar ook 3 stuks SPI poort.
We leven in het midden van de ruimte, maar aan de rand van de tijd.

Berichten: 4087
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: STM32F103C8T6 I2C

Berichtdoor shooter » 28 Mei 2024, 12:58

Het ligt vooral aan welke library gebruikt wordt want je kunt niet zomaar poorten toewijzen, dat heeft te maken met welke timers bijv gebruikt worden.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 50
Geregistreerd: 22 Jun 2013, 00:04

Re: STM32F103C8T6 I2C

Berichtdoor Duiker » 28 Mei 2024, 13:20

Dit is de code die ik gebruik. I2C gebruikt dan PA7 en PA6. En dat werkt.

Code: Alles selecteren
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//LiquidCrystal_I2C lcd(0x38, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
//Setup 20 x 4 Serial LCD connections (Standaard SDA en SCL worden gebruikt)
LiquidCrystal_I2C lcd(0x27, 20, 4); // Set the LCD address to 0x27 for a 20 chars and 4 line display

//#define LED_BUILTIN

void setup() {
  lcd.init();
  lcd.begin(20,4);
  pinMode(LED_BUILTIN, OUTPUT);
 }
 
 // https://www.stm32duino.com/viewtopic.php?t=1705
 
void loop() {
  int DelayTime = 500;

  digitalWrite(LED_BUILTIN, HIGH);
  lcd.backlight();
  delay(DelayTime);

  lcd.setCursor(3,0);
  lcd.print("Hello YouTube!");
  lcd.setCursor(8,1);
  lcd.print("****");
  lcd.setCursor(0,2);
  lcd.print("This is a demo text");
  lcd.setCursor(8,3);
  lcd.print("****");

  digitalWrite(LED_BUILTIN, LOW);
  lcd.noBacklight();
  delay(DelayTime);
}


Wire.h moet ik wel gebruiken om I2C aan te sturen. Wat mij wel opvalt aan de PinOut is dat er maar 2 I2C poorten zijn, en geen 3. Poort 1 is dan wel weer dubbel uitgevoerd, waarvan PB8 en PB9 niet werken. Ik zie dat overal. Ook lees ik dat PB7 en PB6 de standaard poort is.
Verder wordt er naar dit document verwezen: https://github.com/stm32duino/Arduino_C ... 2/wiki/API

Als ik vervolgens dit probeer:

Code: Alles selecteren
#include <Wire.h>
//            SDA  SCL
TwoWire Wire2(PB9, PB8);

void setup() {
  Wire2.begin();
}


Dan doet het display nog steeds niets. (De code voor het aansturen van het display is niet veranderd)
We leven in het midden van de ruimte, maar aan de rand van de tijd.

Berichten: 4087
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: STM32F103C8T6 I2C

Berichtdoor shooter » 28 Mei 2024, 14:55

je gebruikt dan een andere lib namelijk two wire en je display staat op wire en niet wire2 dus dat moet je verzetten in de library, of opgeven in de aanroep van wire2
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 50
Geregistreerd: 22 Jun 2013, 00:04

Re: STM32F103C8T6 I2C

Berichtdoor Duiker » 28 Mei 2024, 15:06

Enne hoe doe ik dat?
We leven in het midden van de ruimte, maar aan de rand van de tijd.

Berichten: 4087
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: STM32F103C8T6 I2C

Berichtdoor shooter » 31 Mei 2024, 15:23

in wire staan de initialities van de poorten en doe moet je dus veranderen in wire
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 50
Geregistreerd: 22 Jun 2013, 00:04

Re: STM32F103C8T6 I2C

Berichtdoor Duiker » 31 Mei 2024, 18:19

@shooter, daar ga ik naar kijken. Overigens ben ik wel iets verder gekomen. Ik zag deze site: https://wiki.st.com/stm32mcu/wiki/Getti ... _functions Daar doet men dat op een iets andere manier. Eigenlijk is I2c niet eens het probleem, Maar SPI. Eigenlijk is SPI ook niet eens het probleem, maar het aansturen van een 320x240 display. Dat werkt nog steeds niet, en daar is het allemaal mee begonnen. Ik wilde de SPI pinnen veranderen, om dat beter oonder controle te krijgen. Dat lukte niet, daarom maar eens I2C geprobeerd. Dat lukte ook niet. En zodoende kwam ik met deze vraag. Nou ja, het houd me in ieder geval van de straat.
We leven in het midden van de ruimte, maar aan de rand van de tijd.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ujaximu en 8 gasten