博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARM裸机编程基于FS4412——UART
阅读量:3950 次
发布时间:2019-05-24

本文共 1013 字,大约阅读时间需要 3 分钟。

一、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;
}

转载地址:http://bjgwi.baihongyu.com/

你可能感兴趣的文章
SSM框架和SSH框架的区别
查看>>
漫画版Elasticsearch原理
查看>>
Elasticsearch-基础介绍及索引原理分析
查看>>
过滤敏感词算法
查看>>
linux学习之shell脚本if判断参数-n,-d,-f等
查看>>
linux学习之windos文件在linux里面乱码解决
查看>>
idea快捷键
查看>>
linux学习之shell遍历数组
查看>>
python函数取参及默认参数使用
查看>>
python中判断是否为路径与是否为文件用法
查看>>
linux学习之shell中的${},##, %% , :- ,:+, ? 的使用
查看>>
linux学习之eval使用
查看>>
Python 中 pass的使用
查看>>
Spring 配置详解
查看>>
Spring面向切面aop编程
查看>>
Spring学习之Filter、Interceptor、Aop实现与区别
查看>>
tomcat中catalina是什么
查看>>
tomcat和应用集成
查看>>
Spring 添加@Autowired注释, 注入对象却为空
查看>>
springSecurity学习
查看>>