diff options
Diffstat (limited to 'stm-rtc.c')
-rw-r--r-- | stm-rtc.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -32,17 +32,35 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "stm32f4xx_hal.h" +#include "stm-init.h" #include "stm-rtc.h" I2C_HandleTypeDef hi2c_rtc; +/* I2C2 init function (external RTC chip) */ +void rtc_init(void) +{ + hi2c_rtc.Instance = I2C2; + hi2c_rtc.Init.ClockSpeed = 10000; + hi2c_rtc.Init.DutyCycle = I2C_DUTYCYCLE_2; + hi2c_rtc.Init.OwnAddress1 = 0; /* Will operate as Master */ + hi2c_rtc.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + hi2c_rtc.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED; + hi2c_rtc.Init.OwnAddress2 = 0; + hi2c_rtc.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED; + hi2c_rtc.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED; + + if (HAL_I2C_Init(&hi2c_rtc) != HAL_OK) { + Error_Handler(); + } +} + HAL_StatusTypeDef rtc_device_ready(uint16_t i2c_addr) { return HAL_I2C_IsDeviceReady (&hi2c_rtc, i2c_addr, 10, 1000); } -HAL_StatusTypeDef rtc_enable_oscillator() +HAL_StatusTypeDef rtc_enable_oscillator(void) { uint8_t buf[2]; HAL_StatusTypeDef res; @@ -78,7 +96,7 @@ HAL_StatusTypeDef rtc_read_bytes (const uint16_t i2c_addr, uint8_t *buf, const u { HAL_StatusTypeDef res; - while (HAL_I2C_Master_Receive (&hi2c_rtc, i2c_addr, buf, len, 1000) != HAL_OK) { + while (HAL_I2C_Master_Receive (&hi2c_rtc, i2c_addr, buf, len, timeout) != HAL_OK) { res = HAL_I2C_GetError (&hi2c_rtc); if (res != HAL_I2C_ERROR_AF) { return res; |