1 遇到问题
在使用USART轮询发送数据完成后进入待机模式,会出现最后1个字节无法完整发送完成的情况,经过实验后,是标志位的选择不合理。以下记录了“发送数据完成标志”、“发送数据缓冲器为空标志”的学习、调试过程。
2 寄存器定义
3 实验现象3.1 使用“TXBE”正常发送3个字节数据
关键代码 | USART_TxData(USART1, '1'); while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET); |
现象 |
|
结论 | 数据未完全发送完,标志位已置1 |
3.2 使用“TXC”正常发送3个字节数据
关键代码 | USART_TxData(USART1, '1'); while(USART_ReadStatusFlag(USART1, USART_FLAG_TXC) == RESET); |
现象 |
|
结论 | 在每一个字节发送完成后再置1 |
3.3 使用“TXBE”正常发送3个字节数据后立刻进入standby模式
关键代码 | USART_TxData(USART1, '1'); while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET); PMU_EnterSTOPMode(PMU_REGULATOR_ON,PMU_STOP_ENTRY_WFI); |
现象 |
|
结论 | 无法发完数据 |
3.4 使用“TXC”正常发送3个字节数据后立刻进入standby模式
关键代码 | USART_TxData(USART1, '1'); while(USART_ReadStatusFlag(USART1, USART_FLAG_TXC) == RESET); PMU_EnterSTOPMode(PMU_REGULATOR_ON,PMU_STOP_ENTRY_WFI); |
现象 |
|
结论 | 可以发完数据 |