[原创] R7F0C802x Easy Start --串口开发小计

youki12345   2014-9-9 22:00 楼主
      串口是基本的通讯端口,基本上每个嵌入式处理都自带了至少一个串口了,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通信。
要配置寄存器还是比较多的,总的可以参看下面表格:
    1.jpg
      基本上这个表格中的所有寄存器都要配置。首先需要处理的是串口的时钟,PER0.2也就是SAU0EN用来允许输入时钟的供应。SPS0来对时钟分频,已达到自己想要的时钟CK00,CK01SPS0高四位第四位分别是用来得到时钟CK01,CK00
    下面一组SS0SSE0SE0,其中SE0寄存器用于确认各个通道的串行发送/接收操作处于允许或禁止状态。对于这组寄存器,DS中早有说明。    2.jpg       
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相调和的基本前提下,那就只有多设置几组寄存器了。





https://bbs.eeworld.com.cn/thread-471646-1-1.html 欢迎加入我的团队

回复评论 (5)

楼主:这个串口如果要和PC上位机连接,是否还要通过RS232芯片转接?
点赞  2014-9-10 21:58
引用: wenyangzeng 发表于 2014-9-10 21:58
楼主:这个串口如果要和PC上位机连接,是否还要通过RS232芯片转接?

是的,电平不一样啊。

https://bbs.eeworld.com.cn/thread-471646-1-1.html 欢迎加入我的团队
点赞  2014-9-11 10:01
谢谢
点赞  2014-9-11 11:53
RL78搞串口很久了,还是有问题
点赞  2014-11-2 13:16
你什么问题啊?
https://bbs.eeworld.com.cn/thread-471646-1-1.html 欢迎加入我的团队
点赞  2014-11-4 22:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复