acm32与st不同的是acm32发送break头不能自动硬件复位。
解决方法
主要流程:
1)- 配置 UART_BCNT 寄存器的 BCNT_VALUE 为 13。
2)- 同步使能 UART_CR3.BRK 位和 UART_BCNT. BCNT_START 位。
3)- 访问 UARTISR.BCNTI 位,等待置 1;或者使能中断,等待 BCNTI 中断。
4)- 清零 UART_CR3.BRK 位。
UART1->CR3 |= 1<<5; //FIFO使能
UART1->CR3 |= (5<<10); //仅剩1个数据到完全为空变化时才会产生中断
UART1->CR3 |= (5<<13); //接收 FIFO 变非空(接收FIFO收到1个数据)
UART1->BCNT = 13;
UART1->BCNT |= 1<<24;//比特计时
UART_SendBreak(UART1);
等待比特计时结束,软件清零
if(((UART1->ISR) & 1<<12)) {
UART1->CR3 &= ~UART_CR3_BRK;
UART1->ISR |= (1<<12);
}