5.2.6UART寄存器编程(下)
已完成第一二步。
1把UART模块和所用到的port时钟打开
2把物理引脚指定给uart这个功能使用
有哪些寄存器来控制,如果把通讯做起来
在ARM的KL25里
可以分成4类BDL BDH设置波特率和每个比特多宽的
UARTx_D是用来读写我们串行通信数据的
C1-C4配置UART模块如何工作
S1和S2是获得这个模块当前工作状态的
1发送时钟/16,因为以一个波特率工作时候,接受时候要以16倍速度去看受到数据,换而言之发送会用1/16来一个比特一个比特的发送我们的数据
2接着会有一系列寄存器,最大寄存器是data register是和我们总线连在
4底下还有下一个小小的电路parity gen,也就是产生我们的奇偶校验位,如果使用奇偶校验位要根据移位寄存器存的值算一算有多少个1,要不要加1或加0.
5控制逻辑会保证上面的器件能有序运行
6控制逻辑会有副产品也就是中断产生,和串行通讯IO一样,也是工作在中断下的
接受会以 我么发送时钟的16倍来看待我们从引脚接受的数据。通过一些附加电路,来检测奇偶校验位的正确,以及产生一些接受的中断,最终目的是把接受的数据copy到数据寄存器
由总线把它读走加以使用
数据寄存器
映射在地址上的8比特位宽的寄存器
如果一个存储器对应一个地址,写入一个字节,我们待会读读到肯定是它。
如果我们中间有中断把它改了,也是改过以后的值
寄存器的读和写意味完全不一样的操作
写操作时写进来数据是用来copy给移位寄存器shifit register到发送引脚
读操作不是读写的值而是读我们接受引脚从电路接受到的数据copy回来的备份
如果我们对一个寄存器写个值再读个值,他不等同与存储器写个值,把原值读出来。
但在uart_x这个寄存器我们做的事从串口发一个字节,再读一个字节别人给你的反馈
波特率的设置
BDH Baud rate high register
BDL Baud rate low register
高低两个各8bit的寄存器,这两个寄存器BDH后5个寄存器和BDL8个寄存器可以组成13比特的二进制数,值从0-8191可以设置。我们要的波特率的值。就是我们的原时钟除这个13比特的值。再除16就是我们的波特率。
我们使用的原时钟是10.485兆,除设定的值,除16就是波特率
所以我们和计算机连,我们约定好计算机那边和微控制器都有一个比特率来通讯,这边用波特率发,那边用波特率收就是异步BDH和BDL要连续赋值,但对一个赋值会忽略掉
UART控制寄存器
PE是否使用奇偶校验,使用奇校验还是偶校验
前面几个使用uart中断,中断的子开关
标绿一个TE一个RE
这两个打开就是打开了发送器和接收器
uart状态寄存器
后面低位几个比特,是状态中断的标志位,后面几个比特是中断发生标志位的flag
比特7是TXD的data buffer empty flag,发送器的数据缓存空了的标志位,意思是之前要发送的数据已经发送完了,此时你可以发送下一个字节了。正确案例如上。
while检查的是uart的s1寄存器跟它高位也就是TDRF这一位通过与运算看看有没有变为1,没变1发送寄存器没有空,没有空意味着前面数据没有发送完。这种方式称为阻塞式数据通信
比特5,数据接收的缓存寄存器满的标志位
5.2.6UART寄存器编程(下)相关推荐
- keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)
[朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...
- 嵌入式学习笔记——使用寄存器编程操作GPIO
使用寄存器编程操作GPIO 前言 GPIO相关的寄存器 GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I) 位操作 GPIO 端口输出类型寄存器 (GPIOx_OTYPER) ...
- 记录学习(转载) STM32---程序如何在内部运行寄存器编程的理解
作者:王犀牛 链接:https://www.zhihu.com/question/26562480/answer/33433568 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- STM32---程序如何在内部运行寄存器编程的理解
作者:王犀牛 链接:https://www.zhihu.com/question/26562480/answer/33433568 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 并发编程下的性能定律(翻译)
并发编程下的性能定律(翻译) 理解Amdahl定律 如果你想利用多核的优势在尽可能少的时间运行尽可能多的指令,那么就需要以并行的序列分离代码.然而,大多的算法需要运行一些串行代码来调整并行执行.例如, ...
- Linux编程下open()函数的用法
Linux编程下open()函数的用法 open(打开文件) 相关函数: read,write,fcntl,close,link,stat,umask,unlink,fopen 表头文件 : #i ...
- 在Visual C++中用ADO进行数据库编程(下)
在Visual C++中用ADO进行数据库编程(下) 5. 记录集的遍历.更新 根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,bi ...
- 非零基础自学Golang 第18章 HTTP编程(下) 18.2 HTTP服务端 18.2.2 启动HTTP服务器 18.2.3 启动HTTPS服务器
非零基础自学Golang 文章目录 非零基础自学Golang 第18章 HTTP编程(下) 18.2 HTTP服务端 18.2.2 启动HTTP服务器 18.2.3 启动HTTPS服务器 第18章 H ...
- 一、C++面向对象高级编程(下) (侯捷)
侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...
最新文章
- Oracle报错:类型长度大于最大值解决办法
- 自定义注解,aop实现注解锁
- CSS 字体(font)实例
- linux mysql端口启动失败怎么办,Linux下apache mysql等服务修改默认端口后无法正常启动解决办法...
- 图像色彩空间之RGB与HSI
- 配置druid的过程以及问题
- unistd.h的close(0)导致std::cout被关闭
- C++中的config设计
- 数据库事务特征、数据库隔离级别,以及各级别数据库加锁情况(含实操)--read uncommitted篇...
- Excel 培训笔记
- 高考数学九大知识模块的易错考点【修正版】【知识体系辅导】
- 牛客网数据库SQL实战45—— 将titles_test表名修改为titles_2017
- Python基础知识练习(含答案)
- 硬仗荣获旧金山烈酒大赛(SFWSC)双金奖殊荣,硬仗酒蜚声海内外
- 开发一个android app需要的技术
- [BZOJ1123][POI2008]BLO(tarjan求点双+树形dp)
- Java 第十一届 蓝桥杯 省模拟赛 小明植树(DFS)
- 对于有些网站无法打开F12或者firebug的现象解答
- 体会一下hop-by-hop逐跳头中的路由器告警选项(Router Alert Option)的玩法
- 组态王虚拟服务器,组态王客户端服务器是什么
热门文章
- 万众电子期刊在线阅读系统(awd复现)
- 如何修改mind map pro 的快捷键 how to edit shortcut of mind map pro
- RationalDMIS 7.0量块程序(力合)
- 完美卸载2011 绿色版软件下载 完美卸载官网
- windows num_workers
- gcc 中-O -O1 -O2 -O3 -Os -Ofast -Og优化的原理
- 阿里云大数据专业认证(ACP),值得报名吗?
- 变频器VF模式和矢量模式的区别
- 正负图表,让数据展示更炫酷
- spreadsheet php,PhpSpreadsheet的简单使用