Skip to content

Commit f484f52

Browse files
authored
Use UART receiver timeout for data reception. (#299)
1 parent 1b9210c commit f484f52

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

core/embed/trezorhal/usart.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
#include "irq.h"
1010
#include "usart.h"
1111

12-
#define USART_TIMEOUT 0x100000
12+
#define BAUD_RATE 115200
13+
#define UART_ONE_BIT_TIME_US (1000000 / BAUD_RATE)
14+
// max timeout is 0xffffffff * UART_ONE_BIT_TIME_US
15+
#define UART_TIMEOUT_MS (2)
1316

1417
UART_HandleTypeDef uart;
1518
UART_HandleTypeDef *huart = &uart;
@@ -60,7 +63,7 @@ void ble_usart_init(void) {
6063
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
6164

6265
huart->Instance = UART4;
63-
huart->Init.BaudRate = 115200;
66+
huart->Init.BaudRate = BAUD_RATE;
6467
huart->Init.WordLength = UART_WORDLENGTH_8B;
6568
huart->Init.StopBits = UART_STOPBITS_1;
6669
huart->Init.Parity = UART_PARITY_NONE;
@@ -122,7 +125,10 @@ void ble_usart_init(void) {
122125
HAL_NVIC_ClearPendingIRQ(UART4_IRQn);
123126
HAL_NVIC_EnableIRQ(UART4_IRQn);
124127

125-
__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE);
128+
HAL_UART_EnableReceiverTimeout(huart);
129+
HAL_UART_ReceiverTimeout_Config(
130+
huart, (UART_TIMEOUT_MS * 1000) / UART_ONE_BIT_TIME_US);
131+
__HAL_UART_ENABLE_IT(huart, UART_IT_RTO);
126132
HAL_UART_Receive_DMA(huart, dma_uart_rev_buf, sizeof(dma_uart_rev_buf));
127133
}
128134

@@ -276,8 +282,8 @@ void UART4_IRQHandler(void) {
276282
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_WUF)) {
277283
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
278284
}
279-
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) {
280-
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_IDLE);
285+
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF)) {
286+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
281287
HAL_UART_Abort(huart);
282288
usart_fifo_len =
283289
sizeof(dma_uart_rev_buf) - __HAL_DMA_GET_COUNTER(huart->hdmarx);

0 commit comments

Comments
 (0)