Added readMemory and writeMemory implementation for STM32

This commit is contained in:
dario 2024-11-03 18:31:52 +01:00
parent 9444654dc0
commit 6a50c3644e
2 changed files with 25 additions and 7 deletions

View File

@ -21,14 +21,15 @@ namespace sta
public:
STM32I2C(I2C_HandleTypeDef * handle, Mutex * mutex=nullptr);
void transfer(uint8_t value) override;
void transfer16(uint16_t value) override;
void transfer(const uint8_t * buffer, size_t size) override;
void receive(uint8_t * buffer, size_t size) 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 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 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 hasAddress(int address);
void addressScan();
void fill(uint8_t value, size_t count) override;
private:
I2C_HandleTypeDef * handle_;
};

View File

@ -80,9 +80,17 @@ namespace sta
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 */)
{
if (blocking_) {
if (master_) {
return HAL_I2C_Master_Receive(handle_, address_, buffer, size, timeout) == HAL_OK;
@ -98,6 +106,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 */)
{
// Initialize a buffer of size count and fill it with the value.