如何使用stm32的HAL库接受和发送不定长的数据,这里使用空闲中断和DMA方式,网络上有很多教程,如果遇到只接收字符串最后一个字节的,可以将main函数的DMA初始化放在UART初始化前面。
抛去底层的位传输。多字节类型数据传输是低地址字节先传(STM32是小端,低字节在低地址),该数据的位也是按照分配的先后顺序从低位往高位填。在协议的实现中,巧用结构体、联合体来强转操作内存(字符数组),可以较为方便我们的理解,最后打包发送。协议数据的接收同理。
要从低功耗停止模式中恢复运行状态,uart配置一次之后串口的状态会锁定,若要重新初始化串口,可参考下面代码
MX_DMA_Init();
HAL_UART_DeInit();//huart1.gState = HAL_UART_STATE_RESET;
MX_USART1_UART_Init();