CH563的串口问题

问题1:示例中,怎么只有ch563启用FIFO发送的例子,没有启用FIFO接收的例子呢?

问题2:我用示例中的代码,串口1,。

    while(1){

        RcvNum  = Seril1Rcv( rcvbuf );                                          /* 等待接收数据,并通过串口1发送出去 */

        Seril1Send( rcvbuf, RcvNum );

    }

为什么我向芯片发送数据A1 A2 A3后,芯片不断定地返回A1 A2 A3,应该是只返回一次才对呀,。正常情况下,读取了芯片接收缓存区的数据后应该是清零了,为什么不会自动清零呢,示例中也没有找到可以手动清缓存的代码。感觉这串口还不如51单片机人性化,怎么都不能清掉接收缓存里的数据。

问题1:只要使能串口的FIFO,数据接收就是进入FIFO的。参考UART1_INT例子,是在中断函数中去处理的。且串口兼容 16C550,有很多处理方式可以借鉴。UART1中的Seril1Rcv其实就是FIFO模式接收的

问题2:如果是UART1例子中,接受完数据之后循环能够一直运行,观察Seril1Rcv函数可知接收方式是有数据就处理,没数据就退出,所以Seril1Send能够一直被调用,需要再增加逻辑控制


后来把波特率从115200改成9600就正常了。也不知道是什么原因,反正不能理解。


不同波特率并不会造成类似的结果,建议在检查一下代码逻辑


搞不清楚,反正就是挺怪。9600就是正常的,用115200就不行


如果没有修改底层代码,那么不论波特率是多少,都应该如我所说,这个while循环就是会一直发送数据才对。

可以把代码发到wsh@wch.cn帮你看一下

注明个人信息


只有登录才能回复,可以选择微信账号登录