STM32F4 UART基础(HAL库)_Lishaoyin-CSDN博客
-------------------
然后说下自己demo测试的,下面加while和不加while纯属熟悉函数,实际熟悉感受下。
1.HAL_StatusTypeDef HAL_UART_Receive (UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) 函数
demo:
while (1)
{
while(HAL_UART_Receive(&huart1, chaoRxBuffer, 9, 3*1000) != HAL_OK);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); //灯gpio
HAL_Delay(1000);
}
------------------
Function Description :Receives an amount of data in blocking mode
函数参数: 串口,数据接收buf, 接收9个数据, timeout时间为3秒
实际效果:
1.一次发送9个数据,灯翻转状态
2.先发送3个数据,然后过3秒发送6个数据,灯保持原有状态没有翻转
3.3秒内,先发送4个数据,再发送5个数据,灯状态发生翻转
结论:
1.对于HAL_UART_Receive(&huart1, chaoRxBuffer, 9, 3*1000);
阻塞3秒后退出阻塞,进行下一步。
2.对于while(HAL_UART_Receive(&huart1, chaoRxBuffer, 9, 3*1000) != HAL_OK);
发送数据开始计时,在计时周期3秒内发送参数9个数据就会退出阻塞。超过计时时间未发送【参数3】设置的9个数据,就重新计算接收到的数据个数,直到接收【参数3】设置的9个数据才算HAL_OK退出阻塞。
2. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
while (1)
{
while(HAL_UART_Receive_IT(&huart1, chaoRxBuffer, 10) != HAL_OK);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(1000);
}
----------
HAL_UART_Receive_IT(&huart1, chaoRxBuffer, 10);
非阻塞模式,接收10个数据后,会调用HAL_UART_RxCpltCallback
HAL_UART_Receive_IT:
非阻塞模式,但是上面while这种可以让它变成阻塞模式,例如先发5个,再发5个,收到10个就HAL_O, 调用HAL_UART_RxCpltCallback,同时进行下一步。
明天更。