Added readMemory and writeMemory implementation for STM32

This commit is contained in:
dario 2024-11-03 18:31:52 +01:00
parent bbb8f3505e
commit 92723fe164
2 changed files with 20 additions and 1 deletions

View File

@ -24,7 +24,9 @@ namespace sta
bool transfer(uint8_t value, uint32_t timeout = STA_MAX_TIMEOUT) override; bool transfer(uint8_t value, uint32_t timeout = STA_MAX_TIMEOUT) override;
bool transfer16(uint16_t value, uint32_t timeout = STA_MAX_TIMEOUT) override; bool transfer16(uint16_t value, uint32_t timeout = STA_MAX_TIMEOUT) override;
bool transfer(const uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override; bool transfer(const uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override;
bool writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override;
bool receive(uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override; bool receive(uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override;
bool readMemory(uint8_t regAddr, uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override;
bool fill(uint8_t value, size_t count, uint32_t timeout = STA_MAX_TIMEOUT) override; bool fill(uint8_t value, size_t count, uint32_t timeout = STA_MAX_TIMEOUT) override;
private: private:
I2C_HandleTypeDef * handle_; I2C_HandleTypeDef * handle_;

View File

@ -75,9 +75,17 @@ namespace sta
return res == HAL_OK; return res == HAL_OK;
} }
bool STM32I2C::writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
if (blocking_) {
return HAL_I2C_Mem_Write(handle_, address_, regAddr, 1, buffer, size, timeout) == HAL_OK;
} else {
return HAL_I2C_Mem_Write_IT(handle_, address_, regAddr, 1, buffer, size) == HAL_OK;
}
}
bool STM32I2C::receive(uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */) bool STM32I2C::receive(uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{ {
if (blocking_) { if (blocking_) {
if (master_) { if (master_) {
return HAL_I2C_Master_Receive(handle_, address_, buffer, size, timeout) == HAL_OK; return HAL_I2C_Master_Receive(handle_, address_, buffer, size, timeout) == HAL_OK;
@ -93,6 +101,15 @@ namespace sta
} }
} }
bool STM32I2C::readMemory(uint8_t regAddr, uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
if (blocking_) {
return HAL_I2C_Mem_Read(handle_, address_, regAddr, 1, buffer, size, timeout) == HAL_OK;
} else {
return HAL_I2C_Mem_Read_IT(handle_, address_, regAddr, 1, buffer, size) == HAL_OK;
}
}
bool STM32I2C::fill(uint8_t value, size_t count, uint32_t timeout /* = STA_MAX_TIMEOUT */) bool STM32I2C::fill(uint8_t value, size_t count, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{ {
// Initialize a buffer of size count and fill it with the value. // Initialize a buffer of size count and fill it with the value.