28 #include <libopencm3/stm32/rcc.h> 29 #include <libopencm3/stm32/gpio.h> 30 #include <libopencm3/stm32/i2c.h> 31 #include <libopencm3/stm32/timer.h> 39 #define I2C_MASTER_I2C 2 45 #define I2C_MASTER_TIMER 4 46 #define I2C_MASTER_TIMEOUT 4 50 void i2c_master_setup(bool fast) 59 rcc_periph_clock_enable(RCC_AFIO);
78 timer_set_mode(
TIM(
I2C_MASTER_TIMER), TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP);
97 bool i2c_master_read(uint8_t slave,
const uint8_t* address,
size_t address_size, uint8_t* data,
size_t data_size)
100 if (address==NULL || address_size==0 || data==NULL || data_size==0) {
110 bool to_return =
false;
143 for (
size_t i=0; i<address_size; i++) {
183 for (
size_t i=0; i<data_size; i++) {
184 if (i==data_size-1) {
216 bool i2c_master_write(uint8_t slave,
const uint8_t* address,
size_t address_size,
const uint8_t* data,
size_t data_size)
219 if (address==NULL || address_size==0 || data==NULL || data_size==0) {
229 bool to_return =
false;
264 for (
size_t i=0; i<address_size; i++) {
278 for (
size_t i=0; i<data_size; i++) {
#define I2C_SCL_PORT(x)
get I2C port for SCL pin based on I2C identifier
library to communicate using I2C as master (API)
#define I2C(x)
get I2C based on I2C identifier
#define I2C_SDA_PIN(x)
get I2C port for SDA pin based on I2C identifier
global definitions and methods (API)
#define I2C_SDA_PORT(x)
get I2C port for SDA pin based on I2C identifier
#define RCC_TIM(x)
get RCC for timer based on TIM identifier
bool i2c_master_read(uint8_t slave, const uint8_t *address, size_t address_size, uint8_t *data, size_t data_size)
read from I2C slave
#define I2C_SCL_PIN(x)
get I2C pin for SCL pin based on I2C identifier
#define I2C_MASTER_I2C
I2C peripheral.
#define RCC_I2C_SCL_PORT(x)
get RCC for GPIO port for SCL based on I2C identifier
#define I2C_MASTER_TIMEOUT
timeout factor (compared to expected time)
#define I2C_MASTER_TIMER
timer peripheral
#define TIM(x)
get TIM based on TIM identifier
bool i2c_master_write(uint8_t slave, const uint8_t *address, size_t address_size, const uint8_t *data, size_t data_size)
write to I2C slave
#define RCC_I2C(x)
get RCC for I2C based on I2C identifier