串口是基本的通讯端口,基本上每个嵌入式处理都自带了至少一个串口了,R7F0C802x当然也不例外。本来以为R7F0C802x的串口是挺简单的东西,看来是太轻敌了,前前后后共花了一周的时间才把它搞定。下面就来总结一下R7F0C802x串口的基本情况。
首先可以参考
https://bbs.eeworld.com.cn/thread-444009-1-2.html帖子中的串口例子,不过这个例子中有个小问题,需要把
要把SCR01L =_00_SAU_MSB | _10_SAU_STOP_1 | _07_SAU_LENGTH_8;
改成SCR01L =_80_SAU_LSB | _10_SAU_STOP_1 | _07_SAU_LENGTH_8;
不然始终不能得到正确的结果。
下面我们来看看R7F0C802x的基本情况:R7F0C802x串行阵列单元0有两个串行通道。各通道可以实现3线串行(CSI)和UART通信。这里用的是UART通信。
要配置寄存器还是比较多的,总的可以参看下面表格:
基本上这个表格中的所有寄存器都要配置。首先需要处理的是串口的时钟,PER0.2也就是SAU0EN用来允许输入时钟的供应。SPS0来对时钟分频,已达到自己想要的时钟CK00,CK01。SPS0高四位第四位分别是用来得到时钟CK01,CK00。
下面一组SS0
、SSE0
、SE0
,其中SE0
寄存器用于确认各个通道的串行发送/
接收操作处于允许或禁止状态。对于这组寄存器,DS中早有说明。
ST0寄存器是对各个通道进行设置以允许停止通信/计数的触发寄存器。(停止串口) SS0寄存器是对各个通道进行设置以允许开始通信/计数的触发寄存器。(打开串口)SE0寄存器用于确认各个通道的串行发送/接收操作处于允许或禁止状态。在官方例程中是在void SAU_Start(void)中来控制串口。接下来是控制串行输出的寄存器 SOE0,SO0其中是SOE0设置是否允许或禁止各个通道的串行通信操作的输出。这里我们肯定要将它置为1的。SO0没有看明白。 下面是串口模式寄存器(SMR0nH,SMR0nL)串行通信操作设置寄存器 (SCR0nH, SCR0nL)(SMR0nH,SMR0nL)中设置时钟,是CSI还是UART模式。(SCR0nH, SCR0nL)中是设置的是我们最常见的参数数据发送/接收模式、数据和时钟相位、是否屏蔽错误信号、奇偶检验位、起始位、停止位和数据长度。
最后是发送和接收数据的寄存器(SDR0nH,SDR0nL)低8位用作发送/接收缓冲寄存器。接收过程中,由移位寄存器转换的并行数据将存储于低8位中,在发送过程中,发送至移位寄存器的数据将被设置到低8位。 总的来说,R7F0C802x的串口相对于其它MCU来说还是有点复杂的。不过这也难怪,R7F0C802x的IO端口实在是太少了,在实现功能与IO相调和的基本前提下,那就只有多设置几组寄存器了。