[Nucleo-F411RE] 第5篇--用stm32CubeMx创建工程配置USART

板子:Nucleo-F411RE

官方例程:

            STM32CubeF4-master\Projects\STM32F411RENucleo\Examples\UART\UART_Printf\MDK-ARM

作用:

        把代码里的printf和UART连起来,代码printf的字符串可以PC终端软件上打印。

实际使用问题:

        1.自己用CubeMX创建例程,printf不能打印字符,最后是发现没有在魔术棒 / Targer 选项页中勾选use MicroLIB(printf函数的问题)

           STM32开发---Keil中使用printf 卡死的解决办法_果果小师弟的博客-CSDN博客

        2.我在搞串口时,希望通过PC的串口小助手把字符串发送到单片机UART2(PA2:TX,PA3:RX),然后单片机再打印到电脑。

现象是:发送的字符数一直不对,有时只发送1个,有时只发送2个字符。如下图:

---------------------------------------------

函数说明

1.HAL_UART_Receive_IT(&huart1, proRxBuffer, 3);

函数说明:

      通过huart1 接收3个元素(uint8_t 或uint16_t),存在proRxBuffer中,接收3个元素后,执行回调函数HAL_UART_RxCpltCallback函数。

[Nucleo-F411RE] 第5篇--用stm32CubeMx创建工程配置USART_第1张图片

2.HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

函数说明:

            阻塞式,在timeout时间内,代码停在原地方。

例如:

            HAL_UART_Receive(&huart1, proRxBuffer, 3, 0xffff);
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);   //亮灯

串口助手依次发送1,2,3,接收到3后,灯才会亮,并且不会执行HAL_UART_RxCpltCallback函数。

[Nucleo-F411RE] 第5篇--用stm32CubeMx创建工程配置USART_第2张图片

 小结:

HAL_UART_Receive和HAL_UART_Receive_IT是单片机接收的函数,区别是:

        1.HAL_UART_Receive是阻塞的,HAL_UART_Receive_IT不是阻塞的

        2.HAL_UART_Receive接收完后,不会调用HAL_UART_RxCpltCallback,

           HAL_UART_Receive_IT接收完Size个数据后会调用HAL_UART_RxCpltCallback函数。

题外话:

        看到的很多博客上size参数都是1,接收单个数据,然后callback函数里面又调用HAL_UART_Receive_IT接收一个数据。看那博客上写的"开启接收中断",个人觉得这种说法不对或者很难理解。

       后面想了下为什么那样写。因为HAL_UART_Receive和HAL_UART_Receive_IT是一次性接收size个字符,而串口助手里面不知道"玩家"实际会输入几个字符,所以采用了单个字符接收,用callback函数嵌套调用HAL_UART_Receive_IT接收,每接收一个元素完又自动调用HAL_UART_RxCpltCallback。

-----------

先写到这儿

你可能感兴趣的:(stm32,单片机,stm32F411RE,stm32CubeMX)