summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-03-17 14:58:45 +0700
committerhathach <[email protected]>2026-03-17 14:58:45 +0700
commita3b2b4217630eea3f514ee042ee399e9ee397b8a (patch)
tree1d54c86d222a34aca5edc9e58b858577f04319e8 /hw
parent151a5ad1984a9706aedbe9d26411c33202760007 (diff)
add hil host cdc test
Diffstat (limited to 'hw')
-rw-r--r--hw/bsp/stm32h7/boards/stm32h743eval/board.h20
-rw-r--r--hw/bsp/stm32h7/family.c20
2 files changed, 34 insertions, 6 deletions
diff --git a/hw/bsp/stm32h7/boards/stm32h743eval/board.h b/hw/bsp/stm32h7/boards/stm32h743eval/board.h
index d2f61a5ce..3914d7aac 100644
--- a/hw/bsp/stm32h7/boards/stm32h743eval/board.h
+++ b/hw/bsp/stm32h7/boards/stm32h743eval/board.h
@@ -205,13 +205,25 @@ static int32_t board_i2c_deinit(void) {
}
static int32_t i2c_readreg(uint16_t DevAddr, uint16_t Reg, uint8_t *pData, uint16_t Length) {
- TU_ASSERT (HAL_OK == HAL_I2C_Mem_Read(&i2c_handle, DevAddr, Reg, I2C_MEMADD_SIZE_8BIT, pData, Length, 10000));
- return 0;
+ for (int retry = 0; retry < 3; retry++) {
+ if (HAL_OK == HAL_I2C_Mem_Read(&i2c_handle, DevAddr, Reg, I2C_MEMADD_SIZE_8BIT, pData, Length, 10000)) {
+ return 0;
+ }
+ HAL_Delay(10);
+ }
+ TU_ASSERT(0);
+ return -1;
}
static int32_t i2c_writereg(uint16_t DevAddr, uint16_t Reg, uint8_t *pData, uint16_t Length) {
- TU_ASSERT(HAL_OK == HAL_I2C_Mem_Write(&i2c_handle, DevAddr, Reg, I2C_MEMADD_SIZE_8BIT, pData, Length, 10000));
- return 0;
+ for (int retry = 0; retry < 3; retry++) {
+ if (HAL_OK == HAL_I2C_Mem_Write(&i2c_handle, DevAddr, Reg, I2C_MEMADD_SIZE_8BIT, pData, Length, 10000)) {
+ return 0;
+ }
+ HAL_Delay(10);
+ }
+ TU_ASSERT(0);
+ return -1;
}
static int32_t i2c_get_tick(void) {
diff --git a/hw/bsp/stm32h7/family.c b/hw/bsp/stm32h7/family.c
index c94c2e755..a95674217 100644
--- a/hw/bsp/stm32h7/family.c
+++ b/hw/bsp/stm32h7/family.c
@@ -275,9 +275,25 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) {
}
int board_uart_read(uint8_t *buf, int len) {
- (void) buf;
- (void) len;
+#ifdef UART_DEV
+ int count = 0;
+ // clear overrun error if any
+ if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_ORE)) {
+ __HAL_UART_CLEAR_FLAG(&UartHandle, UART_CLEAR_OREF);
+ }
+ for (int i = 0; i < len; i++) {
+ if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) {
+ buf[i] = (uint8_t) UartHandle.Instance->RDR;
+ count++;
+ } else {
+ break;
+ }
+ }
+ return count;
+#else
+ (void) buf; (void) len;
return 0;
+#endif
}
int board_uart_write(void const *buf, int len) {