Difference between revisions of "STM32 Scan I²C bus"
Jump to navigation
Jump to search
(Created page with "Category:STM32Category:STM32 DevelopmentCategory:STM32CubeMXCategory:STM32CubeIdeCategory:STM32 HALCategory:I2C{{metadesc|How to scan an I2C bus using...") |
|||
Line 1: | Line 1: | ||
− | [[Category:STM32]][[Category:STM32 Development]][[Category:STM32CubeMX]][[Category:STM32CubeIde]][[Category:STM32 HAL]][[Category: | + | [[Category:STM32]][[Category:STM32 Development]][[Category:STM32CubeMX]][[Category:STM32CubeIde]][[Category:STM32 HAL]][[Category:I²C]]{{metadesc|How to scan an I2C bus using STM32 HAL}} |
− | Scanning an [[I2C]] bus using HAL is really simple. First configure [[ | + | Scanning an [[I2C]] bus using HAL is really simple. First configure [[I²C]] in [[Stm32CubeMX]]: |
[[File:I2c Config.png|400px]] | [[File:I2c Config.png|400px]] | ||
− | Once the [[ | + | Once the [[I²C]] has been configured, scanning the bus for slaves become a simple matter: |
<pre> | <pre> |
Revision as of 03:47, 4 June 2021
Scanning an I2C bus using HAL is really simple. First configure I²C in Stm32CubeMX:
Once the I²C has been configured, scanning the bus for slaves become a simple matter:
// Go through all possible i2c addresses for (uint8_t i = 0; i < 128; i++) { if (HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)(i<<1), 3, 5) == HAL_OK) { // We got an ack printf("%2x ", i); } else { printf("-- "); } if (i > 0 && (i + 1) % 16 == 0) printf("\n"); } printf("\n");
The HAL_I2C_IsDeviceReady will return HAL_OK if it receives an ACK or an error if not.
Output from above could be:
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 53 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 77 -- -- -- -- -- -- -- --