已完成第一二步。
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寄存器编程(下)相关推荐

  1. keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)

    [朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...

  2. 嵌入式学习笔记——使用寄存器编程操作GPIO

    使用寄存器编程操作GPIO 前言 GPIO相关的寄存器 GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I) 位操作 GPIO 端口输出类型寄存器 (GPIOx_OTYPER) ...

  3. 记录学习(转载) STM32---程序如何在内部运行寄存器编程的理解

    作者:王犀牛 链接:https://www.zhihu.com/question/26562480/answer/33433568 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  4. STM32---程序如何在内部运行寄存器编程的理解

    作者:王犀牛 链接:https://www.zhihu.com/question/26562480/answer/33433568 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  5. 并发编程下的性能定律(翻译)

    并发编程下的性能定律(翻译) 理解Amdahl定律 如果你想利用多核的优势在尽可能少的时间运行尽可能多的指令,那么就需要以并行的序列分离代码.然而,大多的算法需要运行一些串行代码来调整并行执行.例如, ...

  6. Linux编程下open()函数的用法

    Linux编程下open()函数的用法 open(打开文件)  相关函数:  read,write,fcntl,close,link,stat,umask,unlink,fopen 表头文件 : #i ...

  7. 在Visual C++中用ADO进行数据库编程(下)

    在Visual C++中用ADO进行数据库编程(下)         5. 记录集的遍历.更新 根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,bi ...

  8. 非零基础自学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 ...

  9. 一、C++面向对象高级编程(下) (侯捷)

    侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...

最新文章

  1. Oracle报错:类型长度大于最大值解决办法
  2. 自定义注解,aop实现注解锁
  3. CSS 字体(font)实例
  4. linux mysql端口启动失败怎么办,Linux下apache mysql等服务修改默认端口后无法正常启动解决办法...
  5. 图像色彩空间之RGB与HSI
  6. 配置druid的过程以及问题
  7. unistd.h的close(0)导致std::cout被关闭
  8. C++中的config设计
  9. 数据库事务特征、数据库隔离级别,以及各级别数据库加锁情况(含实操)--read uncommitted篇...
  10. Excel 培训笔记
  11. 高考数学九大知识模块的易错考点【修正版】【知识体系辅导】
  12. 牛客网数据库SQL实战45—— 将titles_test表名修改为titles_2017
  13. Python基础知识练习(含答案)
  14. 硬仗荣获旧金山烈酒大赛(SFWSC)双金奖殊荣,硬仗酒蜚声海内外
  15. 开发一个android app需要的技术
  16. [BZOJ1123][POI2008]BLO(tarjan求点双+树形dp)
  17. Java 第十一届 蓝桥杯 省模拟赛 小明植树(DFS)
  18. 对于有些网站无法打开F12或者firebug的现象解答
  19. 体会一下hop-by-hop逐跳头中的路由器告警选项(Router Alert Option)的玩法
  20. 组态王虚拟服务器,组态王客户端服务器是什么

热门文章

  1. 万众电子期刊在线阅读系统(awd复现)
  2. 如何修改mind map pro 的快捷键 how to edit shortcut of mind map pro
  3. RationalDMIS 7.0量块程序(力合)
  4. 完美卸载2011 绿色版软件下载 完美卸载官网
  5. windows num_workers
  6. gcc 中-O -O1 -O2 -O3 -Os -Ofast -Og优化的原理
  7. 阿里云大数据专业认证(ACP),值得报名吗?
  8. 变频器VF模式和矢量模式的区别
  9. 正负图表,让数据展示更炫酷
  10. spreadsheet php,PhpSpreadsheet的简单使用