如题,HC32L190 LPUART0无法收到数据。这是初始化程序:
static void Uartinit(void){
M0P_SYSCTRL->PERI_CLKEN0_f.LPUART0 = 1;
M0P_LPUART0->SCNT_f.SCNT = 32;
M0P_LPUART0->ICR = 0;//清除全部中断
M0P_LPUART0->SCON_f={
.RCIE = 1,//接收中断使能
.REN = 1,//接收使能
.SM = 3,//9位数据位
.OVER = 2,//4 采样分频
.HDSEL = 1,//半双工,<--注意这里采用了半双工模式,接收线和发送线是同一根线
};
EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
} //串口引脚配置
static void PortInit(void) {
M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = 1;
M0P_GPIO->PBDIR_f.PB00 = 0;
M0P_GPIO->PBADS_f.PB00 = 0;
M0P_GPIO->PBDR_f.PB00 = 1;
M0P_GPIO->PBOD_f.PB00 = 1;//od,并且外接了上拉电阻
M0P_GPIO->PBPU_f.PB00 = 1;
M0P_GPIO->PB00_SEL = 3;
M0P_GPIO->PBDIR_f.PB01 = 0;
M0P_GPIO->PBADS_f.PB01 = 0;
M0P_GPIO->PBDR_f.PB01 = 1;
M0P_GPIO->PBBCLR = 1<<1;
}
可以看到调试断点命中。
在使能中断后,会立即跳入串口中断:
使用逻辑分析仪观察串口线,可见,完全没有任何信号,串口线始终为高电平。
观察寄存器可以看到,确实收到了一个数据:
为什么会收到这个数据?
我尝试接收数据,由外部设备发送数据给我:
可以看到,中断命中,但是发生了帧错误。
多次尝试,都会发生这一问题。
可以进入中断,但是不能收到正确的数据。
为了确认波特率正确,我使用这个串口发送一些数据:
sbuf[0] = 0xaa;
sbuf[1] = 0x11;
sbuf[2] = 0x22;
sbuf[3] = 0x44;
Rs485::sendDatas(sbuf, 4);
可以看到,发送出的数据波特率正确,并被逻辑分析仪捕获。
以上。
应该如何解决这个问题?
|