43 uint16_t ccr_value = 0;
50 ccr_value = i2c_clock_hz / (2 * 100000);
53 t_rise = (i2c_clock_hz / 1000000) + 1;
64 ccr_value = i2c_clock_hz / (25 * 400000);
67 t_rise = ((i2c_clock_hz * 300) / 1000000000) + 1;
78 if(i2c_instance ==
I2C1) {
81 else if(i2c_instance ==
I2C2) {
84 else if(i2c_instance ==
I2C3) {
93 uint16_t
volatile dummy_read = 0;
101 dummy_read = i2c_instance->
I2C_SR1;
104 i2c_instance->
I2C_DR = (slave_addr << 1);
108 dummy_read = i2c_instance->
I2C_SR1;
109 dummy_read = i2c_instance->
I2C_SR2;
114 i2c_instance->
I2C_DR = *tx_buffer;
126 uint16_t
volatile dummy_read = 0;
132 i2c_instance->
I2C_DR = *tx_buffer;
144 uint16_t
volatile dummy_read = 0;
152 dummy_read = i2c_instance->
I2C_SR1;
155 i2c_instance->
I2C_DR = ((slave_addr << 1) | 0x1);
163 dummy_read = i2c_instance->
I2C_SR1;
164 dummy_read = i2c_instance->
I2C_SR2;
167 *rx_buffer = i2c_instance->
I2C_DR;
172 dummy_read = i2c_instance->
I2C_SR1;
173 dummy_read = i2c_instance->
I2C_SR2;
182 *rx_buffer = i2c_instance->
I2C_DR;
188 *rx_buffer = i2c_instance->
I2C_DR;
206 else if(en_status ==
DISABLE) {
216 const char i2c[] =
"I2C";
218 uint8_t pos_counter = 0;
220 while(pos_counter != i2c_len) {
221 name[pos_counter] = i2c[pos_counter];
225 if(i2c_instance ==
I2C1) name[pos_counter] =
'1';
226 else if(i2c_instance ==
I2C2) name[pos_counter] =
'2';
227 else if(i2c_instance ==
I2C3) name[pos_counter] =
'3';
230 name[pos_counter] =
'\0';
251 if(i2c_instance ==
I2C1) {
254 else if(i2c_instance ==
I2C2) {
257 else if(i2c_instance ==
I2C3) {
uint32_t get_str_len(char const *str)
Returns the length of a string, excluding the null terminator.
EN_STATUS_te
Represents an enabled or disabled state.
static void i2c_set_pclk(I2C_REGDEF_ts const *i2c_instance, EN_STATUS_te en_status)
Enables or disables the peripheral clock for an I2C instance.
void i2c_deinit(I2C_REGDEF_ts const *i2c_instance)
Deinitializes the I2C peripheral and disables its clock.
void i2c_init(I2C_CFG_ts *i2c_cfg)
Initializes the I2C peripheral with the given configuration.
void i2c_get_name(I2C_REGDEF_ts const *i2c_instance, char *name)
Returns the name string of an I2C peripheral instance.
void i2c_master_send_continue(I2C_REGDEF_ts *i2c_instance, uint8_t *tx_buffer, uint32_t len)
Continues a transmission without a new START or address phase.
void i2c_master_set_comm(I2C_REGDEF_ts *i2c_instance, EN_STATUS_te en_status)
Enables or disables the I2C peripheral and controls bus ownership.
void i2c_master_receive(I2C_REGDEF_ts *i2c_instance, uint8_t slave_addr, uint8_t *rx_buffer, uint32_t len)
Blocking I2C master receive.
void i2c_master_send(I2C_REGDEF_ts *i2c_instance, uint8_t slave_addr, uint8_t *tx_buffer, uint32_t len)
Blocking I2C master transmit.
void rcc_set_pclk_apb1(RCC_APB1ENR_te periph_position, EN_STATUS_te en_status)
Enables or disables the peripheral clock for an APB1 peripheral.
void rcc_reset_periph_apb1(RCC_APB1RSTR_te periph_position)
Resets an APB1 peripheral via RCC_APB1RSTR.
uint32_t rcc_get_apb1_clk(void)
Returns the current APB1 (low-speed) peripheral bus clock frequency in Hz.
STM32F401RE I2C driver public API.
STM32F401RE RCC driver public API.
Configuration structure for initializing an I2C peripheral.
I2C_CLOCK_STRECH_te clock_strech
I2C peripheral register map.
uint32_t volatile I2C_OAR1
uint32_t volatile I2C_SR1
uint32_t volatile I2C_CCR
uint32_t volatile I2C_CR2
uint32_t volatile I2C_SR2
uint32_t volatile I2C_TRISE
uint32_t volatile I2C_CR1