ARM裸机编程基于FS4412——UART

一、UART初始化
找到对应引脚
在这里插入图片描述
在这里插入图片描述
分别设置对应引脚功能为TXD和RXD
GPA1CON地址:0x11400020
将0-7位先置零再置成0x22:GPA1CON = GPA1CON & ~0xff | 0x22;
在这里插入图片描述
设置UART控制器的参数
1、数据位
2、奇偶校验位
3、停止位
ULCON2地址:0x13820000;
ULCON2 = 0x03;在这里插入图片描述
4、波特率
系统提供的时钟源:100MHz ,而我们只需要115200Hz,所以得要分频
HZ是赫兹,频率单位,1MHZ(兆赫)=1000KHZ(千赫)=1000000HZ
在这里插入图片描述
这两个寄存器就是当波特率分频时分别存放波特率除数波特率除数的小数
在这里插入图片描述
1MHz / 115200 / 16 = 54.253472(此处的16是在1/115200这个时间内采样16次)

UBRDIV2的地址:0x13820028
所以直接赋值:UBRDIV2 = 53(上面的除数是54,但是寄存器从0开始的,此处是十进制)
在这里插入图片描述
UFRACVAL2的地址:0x1382002C
所以直接赋值:UFRACVAL2 = (0.253*16) = 4
在这里插入图片描述

5、接发方式:轮询方式
UCON2的地址:0x13820004
直接设置:UCON2 = UCON2 & ~0xf | 0x05(置位前记得清空,别人给你口袋塞钱,万一你口袋是满的,就塞不进了额)
在这里插入图片描述

在这里插入图片描述

二、发送数据(uartPutc(char c))
轮询:
如果发送缓冲区为空就给缓冲区赋值,如果不空,则得一直循环等待它为空
状态寄存器:UTRSTATn (n = 0 to 4)
在这里插入图片描述
发送缓冲区:当发送缓冲区为空时,此位自动置1,0代表不空,
这样就好办了,
啪的一下我就写个等待循环
while(!(UTRSTAT2 & 0x02))// 这样如果缓冲区不空,我就一直等待它空为止,如果空了,循环就结束了

为空了就好办了接下来就给发送缓冲区赋值
char c;
UTXH2 = c;
在这里插入图片描述

在这里插入图片描述
//不存在的源码
//main.c
uart初始化;
while(1)
{
// uartPutc(“a”);
char c = uartGetc();
uartPutc(c+1);
}

三、接收数据
URXHn (n = 0 to 4):接收缓存区寄存器
在这里插入图片描述
char uartGetc()
{
while(!(UTRSTAT2 & 0x01));
return URXH2;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值