»
(008) CubeIDE Implementation of USB Peripherals*
(018) C99 pointer*
(019) C99 With only value assignment*
(022) POSIX pthread multi-threads mutex*
(023) POSIX pthread multi-threads programming*
(027) C99 time and wait*
(028) High-precision calculation with GMP*
(029) Web Service Lib*
(030) International Components for Unicode (ICU)*
(031) Performance of C is higher than C++, because...*
(035) STM32 UART Continually Receiving Data
HAL库函数:
(单个字节的例子)
使能UART接收单字节的中断:
HAL_UART_Receive_IT(&huartX, &rx_uint8, 1);
UART单字节接收完成的中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == huartX.Instance) {
// 处理接收到的字节数据
// 重新使能UART接收中断
HAL_UART_Receive_IT(huart, &rx_uint8, 1);
}
}
//其中,DMA的优势:DMA拷贝接收数据寄存器RDR的单字节内容到内存的过程,不需要管理。
//HAL_UART_Receive_IT函数调用过程中的最后一个参数可以按需求改为非单字节的更大的数。
//同样,在缓冲区不为单字节的情况下,只有当缓冲区被填满或者被填半满的时候才会调用HAL_UART_RxCpltCallback或者HAL_UART_RxHalfCpltCallback中断函数。
//当然,ARM系列CPU中,数据传输基本上以8个位为一个传输单元。如果您的能力特别强,可以考虑以5、6、7、8个位为一次传输的基本传输单元。