![](/media/cache/profiles/nikki.png.50x50_q85.jpg)
I2C_2 bus scanner for STM32L476RG.
Diff: main.cpp
- Revision:
- 9:c403dc9b86cc
- Parent:
- 8:ead6147e31a4
diff -r ead6147e31a4 -r c403dc9b86cc main.cpp --- a/main.cpp Wed Mar 30 14:58:05 2016 +0000 +++ b/main.cpp Sat Nov 20 13:08:09 2021 +0000 @@ -1,53 +1,41 @@ -/* Scan I2C bus on specified pins and prints out -* the all address where an active device responds. -* - By Joseph Ellsworth CTO of A2WH - Take a look at A2WH.com Producing Water from Air using Solar Energy - March-2016 License: https://developer.mbed.org/handbook/MIT-Licence - Please contact us http://a2wh.com for help with custom design projects. - - -* Don't forget 3K pull-up resistors on sda,scl -* -* I tested this by soldering in a I2C chip known to respond at -* address dec=120 hex=70 and the utility got the ack as expected. -* when the chip was de-soldered it was no longer detected. -*/ - +/* I2C scanner for NUCLEO-L476RG + * + * November, 2021. + */ #include "mbed.h" -Serial pc(USBTX, USBRX); -Serial pc2(USBTX, USBRX); +#define D_SDA PB_14 +#define D_SCL PB_13 +#define MIN_ADD 0 +#define MAX_ADD 127 +#define DATA "00" +#define LENGTH 1 +#define SMALL_DELAY_MS 10 +#define BIG_DELAY 2 - #define D_SDA PB_7 - #define D_SCL PB_6 - // sda=PB7, scl=PB_6 Pins specific to Nucleo-F303K8 - // must change pins to match your board. - -I2C i2c(D_SDA, D_SCL); - +I2C i2c(D_SDA, D_SCL); DigitalOut myled(LED1); int ack; -int address; +int address; + void scanI2C() { - for(address=1;address<127;address++) { - ack = i2c.write(address, "11", 1); - if (ack == 0) { - pc.printf("\tFound at %3d -- %3x\r\n", address,address); + for(address = MIN_ADD; address < MAX_ADD; address++) { + ack = i2c.write(address << 1, DATA, LENGTH); + if (!ack) { + printf("\tFound at: %3d <--> %3x\r\n", address,address); } - wait(0.05); + wait_ms(SMALL_DELAY_MS); } } int main() { - pc.baud(9600); - pc.printf("I2C scanner \r\n"); + printf("I2C scanner \r\n"); scanI2C(); - pc.printf("Finished Scan\r\n"); + printf("Finished Scan\r\n"); // just blink to let us know the CPU is alive - while(1) { - wait(5.0); + while(true) { + wait(BIG_DELAY); myled = !myled; } }