STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD,FE置位,NE没有置位
[复制链接]
本帖最后由 CC2503 于 2024-4-9 10:36 编辑
求助:STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD:LIN断开标志,RXNE读数据寄存器非空,IDLE监测到总线空闲,FE帧错误以上均被硬件置位,NE没有置位,接收到的数据一直为0,找不到原因了。
使用的USART1 RX PA0浮空输入,TX PA9复用推挽输出 速度10M,系统时钟16M 波特率111111,串口收发使用的CH341 12M,整个系统只是使用了串口收发一个功能。
以下为DEBUG:
初始化后USART1各寄存器状态
收到收据后SR寄存器状态
发送数据后SR寄存器状态
USART1部分代码如下:
void USART1_Conf(void)
{
USART1->CR1 &= ~USART_CR1_M;//一个起始位,8个数据位,n个停止位
USART1->CR2 &= ~USART_CR2_STOP;//设置1个停止位
USART1->BRR &= ~USART_BRR_DIV_Mantissa;//整数部分清0
USART1->BRR |= (9<<4);//设置整数部分 9 整数加小数部分为9.0000
USART1->BRR &= ~USART_BRR_DIV_Fraction;//小数部分清0
USART1->CR1 |= USART_CR1_UE;//USART1使能
USART1->CR1 |= USART_CR1_RE;//使能接收
USART1->CR1 &= ~USART_CR1_RWU;//接收器处于正常工作模式
}
int main(void)
{
unsigned long u;
RCC_Conf();
GPIO_Conf();
USART1_Conf();
while(1)
{
while(!(USART1->SR & USART_SR_RXNE));//等待收到数据可以读出
u=USART1->DR;
USART1->CR1 |= USART_CR1_TE;//使能发送
while(!(USART1->SR & USART_SR_TC));//等待发送完成
while(!(USART1->SR & USART_SR_TXE));//等待发送数据寄存器空
USART1->DR =u;//数据写进DR发送寄存器中
while(!(USART1->SR & USART_SR_TC));//等待发送完成
while(!(USART1->SR & USART_SR_TXE));//等待发送数据寄存器空
USART1->CR1 &= ~USART_CR1_TE;//关闭发送
}
}
|