最近从ST官方顺了一块STM32C031开发板,在使用其部署Modbus-RTU从站时,认真阅读了STM32C031的技术开发手册,发现这款诞生于新时代的芯片,不单单仅在工艺上面采用了新产品线,而且设计理念上面也进行了更新。赞一下!
在阅读USART章节时,看到了USART_RQR寄存器及RXFRQ位的功能,这个新增功能非常适合我们对硬件操作。
对于其它品牌的MCU,设计了FIFO功能,但FIFO功能需要嵌入式软件工程师自己管理。对于年轻,初次使用硬件外设功能的工程师则是一种折磨,调试过程也是一种煎熬。具体来说,Usart硬件FIFO将会一直工作,并保存串口接收数据,但此数据有可能是脏数据,因此,在正式启用串口接收功能时,必须要先清除FIFO里面已有的数据。其它品牌的MCU则采用了最原始的方案——循环读取。
view plaincopy to clipboardprint?
while(1)
{
if(check fifo is empty?) == empty
{
break; // FIFO clear done!
}
tmp = Usart_data_get(usart1);
(unused)tmp;
}
view plaincopy to clipboardprint?
LL_USART_RequestRxDataFlush(USART1);
就是这样简单的一条语句即完成了上述复杂而阻塞的while()循环。这对于嵌入式软件开发人员简直方便的不要不要的。