X210ARM裸机串口通信详解

1、整个程序流程分析
(1)整个串口通信相关程序包含2部分:uart_init负责初始化串口,uart_putc负责发送一个字节
2、串口控制器初始化关键步骤
(1)初始化串口的Tx和Rx引脚所对应的GPIO(查原理图可知Rx和Rx分别对应GPA0_1和GPA0_0)
(2)GPA0CON(0xE0200000),bit[3:0] = 0b0010    bit[7:4] = 0b0010    
(3)初始化这几个关键寄存器UCON0 ULCON0 UMCON0 UFCON0 UBRDIV0 UDIVSLOT0
3、主要的几个寄存器
(1)ULCON0 = 0x3        // 0校验位、8数据位、1停止位
(2)UCON = 0x5        // 发送和接收都是polling mode
(3)UMCON0 = 0x0        // 禁止modem、afc
(4)UFCON0 = 0x0        // 禁止FIFO模式
(5)UBRDIV0和UDIVSLOT0和波特率有关,要根据公式去算的

4、在C源文件中定义访问寄存器的宏
定义好了访问寄存器的宏之后,将来写代码时直接使用即可。

5、串口Tx、Rx对应的GPIO的初始化
    给GPA0CON的相应bit位赋值为相应值,用C语言位操作来完成。
6、UCON、ULCON、UMCON、UFCON等主要控制寄存器
    依据上节中分析的值进行依次设置即可。
7、波特率的计算和设置
(1)第一步,用PCLK_PSYS和目标波特率去计算DIV_VAL: DIV_VAL = (PCLK / (bps x 16)) ?1
(2)第二步,UBRDIV0寄存器中写入DIV_VAL的整数部分
(3)第三步,用小数部分*16得到1个个数,查表得uBDIVSLOT0寄存器的设置值
8、串口发送和接收函数的编写
(1)写发送函数,主要发送前要用while循环等待发送缓冲区为空才能发送。
9、综合调试
使用USB调试过程中,发现无法打印出相应字符,且CRT中显示:uart negotiation error,而之前USB调试过的LED闪烁程序完全没有问题。刚开始怀疑USB调试出了问题,于是换用SD卡启动,然后发现使用SD卡时,CRT中只显示No boot Image,并未打印出字符。于是便怀疑串口的问题,确保串口是自己设置的COM,且取消了流控,然而发现还是未打印出字符。

最后,想起自己以前听过的一句话,硬件的问题,一般重启或再次插拔就能解决。于是自己重新插拔USB转串口线,发现终于成功了。附截图一张:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值