数据寄存器

STM32F4学习笔记7——USART Part2

天涯浪子 提交于 2019-11-30 18:16:23
硬件流控制 使用 nCTS 输入和 nRTS 输出可以控制 2 个器件间的串行数据流。如图显示了在这种模式 下如何连接 2 个器件: 分别向 USART_CR3 寄存器中的 RTSE 位和 CTSE 位写入 1,可以分别使能 RTS 和 CTS 流 控制。 RTS 流控制 如果使能 RTS 流控制 (RTSE=1),只要 USART 接收器准备好接收新数据,便会将 nRTS 变 为有效(连接到低电平)。当接收寄存器已满时,会将 nRTS 变为无效,表明发送过程会在 当前帧结束后停止。下图图显示了在使能 RTS 流控制的情况下进行通信的示例。 CTS 流控制 如果使能 CTS 流控制 (CTSE=1),则发送器会在发送下一帧前检查 nCTS。如果 nCTS 有效 (连接到低电平),则会发送下一数据(假设数据已准备好发送,即 TXE=0);否则不会进 行发送。如果在发送过程中 nCTS 变为无效,则当前发送完成之后,发送器停止。 当 CTSE=1 时,只要 nCTS 发生变化,CTSIF 状态位便会由硬件自动置 1。这指示接收器是 否已准备好进行通信。如果 USART_CR3 寄存器中的 CTSIE 位置 1,则会产生中断。下图 显示了在使能 CTS 流控制的情况下进行通信的示例。 注意:停止帧的特殊行为:当使能 CTS 流后,发送器发送停止信号时将不检查 nCTS 输入状态。

stm32学习笔记-USART

给你一囗甜甜゛ 提交于 2019-11-30 18:15:43
接口通过三个引脚与其他设备连接在一起(见图248)。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。 TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。 ● 总线在发送或接收前应处于空闲状态 ● 一个起始位 ● 一个数据字(8或9位),最低有效位在前 ● 0.5,1.5,2个的停止位,由此表明数据帧的结束 ● 使用分数波特率发生器 —— 12位整数和4位小数的表示方法。 ● 一个状态寄存器(USART_SR) ● 数据寄存器(USART_DR) ● 一个波特率寄存器(USART_BRR),12位的整数和4位小数 ● 一个智能卡模式下的保护时间寄存器(USART_GTPR) 25.6517/754 关于以上寄存器中每个位的具体定义,请参考寄存器描述第节:USART寄存器描述。 发送配置步骤: 1. 通过在USART_CR1寄存器上置位UE位来激活USART 2. 编程USART_CR1的M位来定义字长。 3. 在USART_CR2中编程停止位的位数。 4. 如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)

2019-2020-1 20199314 <Linux内核原理与分析>第二周作业

感情迁移 提交于 2019-11-30 16:06:02
操作系统如何工作 一、计算机的三个法宝 1.存储程序计算机 2.函数调用堆栈机制(高级语言可以实现的基础机制) 3.中断 在第一周的作业中对存储程序计算机也就是通俗意义上的冯诺依曼计算机进行了介绍。 第二周的作业中介绍了函数堆栈的结构和寄存器。在这里就不再复述。 二、汇编代码的分析(难点及问题) 本次实验中接触到的是高级语言程序编译成汇编语言的代码,其中就遇到了以下问题。 1.堆栈增长方向的问题 在之前的学习中堆栈都是向下增长的,堆栈上方是高地址下方是低地址,如左图。而在本章中图2-1,堆栈方向为了直观一点变为下方是高地址上方是低地址,如右图。 而对堆栈为什么采用向下增长产生了疑惑。明明不太直观,为什么还是选择向下增长。直到我在网上找了很多资料才找到合理解释的理由。这样设计可以使得堆和栈能够充分利用空闲的地址空间。如果栈向上涨的话,我们就必须得指定栈和堆的一个严格分界线,但这个分界线怎么确定呢?平均分?但是有的程序使用的堆空间比较多,而有的程序使用的栈空间比较多。所以就可能出现这种情况:一个程序因为栈溢出而崩溃的时候,其实它还有大量闲置的堆空间呢,但是我们却无法使用这些闲置的堆空间。所以呢,最好的办法就是让堆和栈一个向上涨,一个向下涨,这样它们就可以最大程度地共用这块剩余的地址空间,达到利用率的最大化!原文衔接如下。 http://www.cnblogs.com/Quincy

【计算机组成原理】中央处理器CPU

不问归期 提交于 2019-11-30 15:20:06
一、CPU的功能和基本结构 1、功能 当用计算机解决某个问题是,我们首先必须为他编写程序,程序是一个指令序列,这个序列明确告诉计算机应该执行什么操作,在什么地方找到用来操作的数据,一旦把程序装入内存器,就可以由计算机来自动完成取出指令和执行指令的任务。专门用来完成此项工作的计算机部件称为中央处理器,通常简称CPU。 虚线框就是CPU结构 CPU通过地址总线 数据总线来访问存储器或者输入输出端口。 ALU:执行运算 两个数一个来自缓存寄存器DR 一个来自累加器AC 运算结果暂时存放到累加器中 状态条件寄存器:0标志位 溢出标志位 等 缓冲寄存器DR:信息进出CPU都有在这蹲点,不论是指令还是数据进CPU都要先进缓存寄存器DR。 指令寄存器:当前正在执行的指令,这里的指令中包含操作码和地址码,将操作码送入指令译码器就知道指令是做什么的,指令译码器把翻译结果告诉操作控制器和时序产生器,他们再按照时间顺序向计算机的执行部件发出执行命令。 程序计数器:下一条将要执行指令的地址 地址寄存器:存放CPU正在访问的内存的地址,一般和地址总线直接相连 CPU的基本部分由运算器 cache和控制器三大部分组成。 二、指令的执行过程 1.指令周期的基本概念 问题:计算机读取的指令和数据都是存在存储器里面的二进制代码,计算机如歌区分这二进制代码是指令还是数据? 计算机能自动的工作

https://blog.csdn.net/xiaohe511/article/details/51385779

≡放荡痞女 提交于 2019-11-30 13:19:08
Slave FIFO 固件需要设置的相关寄存器 IFCONFIG EPxFIFOPFH/L PINFLAGSAB PORTACFG PINFLAGSCD INPKTEND FIFORESET FIFOPINPOLAR EPxCFG EPxFIFOBCH:L EPxFIFOCFG EPxAUTOINLENH:L EPxBCH:L REVCTL (bits 0 and 1 must be initialized to 1 for operation as described in this chapter) 一. CPUCS(E600)CPU控制和状态寄存器 bit b7 b6 b5 b4 b3 b2 b1 b0 name 0 0 PORTCSTB CLKSPD1 CLKSPD0 CLKINV CLKOE 8051RES r/w r r rw rw rw rw rw r default 0 0 0 0 0 0 1 0 PORTCSTB : 128 脚或 100 脚的 RD , WR 输出使能; CLKSPD[1:0] : 8051CPU 频率选择, CLKSPD[1:0] 00 01 10 11 CPU 频率 12MHz 24MHz 48MHz Reserved CLKINV : CLKOUT 反相; CLKOE : CLKOUT 输出使能; 8051RES: 位为 1 来复位 EZ

2019-05-16-日常零碎知识点

喜夏-厌秋 提交于 2019-11-30 12:19:57
版权声明:本文为 Jiawei Xu 于2019年5月16日所写,未经允许不得转载。 Linux网络编程 socketaddr socktaddr_in socketaddr_un UNIX Domain Socket,虽然网络socket也可以用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。Unix Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的。 使用UNIX Domain Socket的过程和网络socket十分相似,也要先调用socket()创建一个socket文件描述符,address family指定为AF_UNIX,type可以选择SOCK_DGRAM或SOCK_STREAM,protocol参数仍然指定为0即可。 UNIX Domain

一、计算机网络概论

别说谁变了你拦得住时间么 提交于 2019-11-30 07:38:27
1.计算机硬件基本组成(考点较少,了解基本组成即可,功能熟悉就行) (1)基本概述 计算机系统由硬件和软件组成。硬件由 运算器,控制器,存储器,输入输出设备 5大部件组成,这是由冯·诺依曼提出的经典计算机结构模型。 其中, 运算器和控制器 被集成在一起成为 中央处理单元-CPU 。CUP是 硬件 系统的核心,用于 数据加工处理 ,能完成各种 算数逻辑运算及控制 功能。 (2)各部件的作用如下:  控制器 :整机的指挥中心,它使计算机的各个部件自动协调工作。 运算器 :对数据信息进行处理的部件,用来进行算术运算和逻辑运算。 存储器 :存放程序和数据,是计算机实现“存储程序控制”的基础。  输入设备 :将人们熟悉的信息形式转换成计算机可以接受并识别的信息形式的设备。 输出设备 :将计算机处理的结果(二进制信息)转换成人类或其它设备可以接收和识别的信息形式的设备. (3)中央处理单元-CPU 包括运算器,控制器,寄存器组合内部总线。 1)、控制器 一般包括指令控制逻辑,时序控制逻辑,总线控制逻辑和中断控制逻辑等。 功能 (1)取指令 (2)分析指令 (3)执行指令,发出各种操作命令 (4)控制程序输入及结果输出 (5)总线管理 (6)处理异常和特殊请求 2)、运算器的功能 由算数逻辑单元、累加寄存器、数据缓冲寄存器和状态条件寄存器等组成,实现算术运算和逻辑运算

指针

こ雲淡風輕ζ 提交于 2019-11-30 06:20:01
对于学习c/c++的同学,指针是不可避免的而且也是必须掌握的 指针可以说是c/c++中很精华的一个东西 如果对于指针不了解那么这门编程语言可以是说你是不合格的 好,首先我们弄清几个问题 1.c/c++为什么要有指针这东西? 2.指针到底是个什么东西? 3.指针到底有什么用? 4.指针到底怎么用? 1.c/c++为什么要有指针这东西? 其中涉及一些硬件的东西,计算机组成原理。了解一下就好了,我也不是很懂。百度的 原文 https://blog.csdn.net/dangbai01_/article/details/79501037 早期的CPU(也许并没有真正的实现)并不如今天的强大, 内存读写的指令可能只有: “从*常数*0x1234地址处读入1字节到寄存器a”, 或者“把寄存器b的值写入*常数*地址0x5678这个地方”。 那个时候没有变量这一说,所有的内存读写都得指定好常数,也就是得把具体的数字(也称为字面量,literal)写死在程序里。 换言之,你如果想清空100字节的内存,而每条指令只能对内存中某一个字节进行写入,那就得写100条指令。随着要处理的数据的膨胀,程序也得跟着膨胀,而这是不可接受的。 流程跳转 为了解决清空大量内存的问题,人们发明了控制流程的指令 比如“如果寄存器c的值为0,则略过下一条指令”和“无条件跳转到首地址为0x9012”的地方,从那个地方继续运行”。

NRF24L01模块----6通道通讯测试

偶尔善良 提交于 2019-11-30 02:50:49
一、MCU与NRF24L01通讯 采用SPI通讯协议,速率最大为10M,与普通SPI元器件稍有不同的是,多了一个CE引脚,用来开启接收、发送,以及使器件进入待机模式。具体看IC DATASHEET说明。 写寄存器指令格式为 :1、SPI写寄存器地址 + 0x20 2、SPI写参数 读寄存器指令格式为 :1、SPI写寄存器地址 2、SPI读参数 但少数几个指令,只需写入一个参数,如: 读STATUS寄存器 : 不能使用NOP指令,读取出来参数不正确。 应使用读普通寄存器的方式,STATUS寄存器地址为0x07; 二、数据的发送 当设置芯片的寄存器,“CE”引脚需要为低电平。 用到以下几个寄存器: 1、将接收端地址写入发送地址寄存器“ TX_ADDR ” 2、将接收端地址写入PIPE0通道地址寄存器“ RX_ADDR_P0 ”,开启自动应答后,PIPE0将接收接收端的应答信号。 3、使能“EN_AA”寄存器开启自动应答,使能“ EN_RXADDR ”中PIPE0对应的bit。 4、设置重发寄存器“ SETUP_RETR ”,设置重发次数以及时间间隔。 5、设置发送频道的频率“ RF_CH ”,以及发送功率、速率“ RF_SETUP ” 6、设置配置寄存器“ CONFIG ”,开启中断以及设置发送。 如果以上寄存器设置完毕,拉低“CE”将需要发送的数据通过“ WR_TX_PLOAD

NRF24L01 无线通信模块使用

ε祈祈猫儿з 提交于 2019-11-30 02:50:08
NRF24L01驱动代码下载: http://download.csdn.net/detail/ieczw/7029597 NRF24L01调试了近一个星期!多多少少有点浪费感情,因为由于板子的问题害的我一直无法调通,后来又找了两块板子,立马搞好!当然我的程序很大成分上是参考老一辈革命家的;但是在这之间,由于板子的问题,迫使我对NRF24L01的datasheet进行了一番研究! NRF24L01与控制器的通信采用的SPI通信协议,这个协议具体细节大家可能都懂,不懂的可以之间百度;他们的通信模型是这样的: NRF*之间基本上可以互相通信,只要你地址设置的没有问题!他有六个通道,每一个通道都有自己的缓冲区,这六个通道可以同时跟不同的NRF进行通信,但是通信的两个之间的TX_ADDR和RX_ADDR一定要相同; 这幅图能够充分的说明这个问题;Point1 to Point2,Point1和Point2的通道地址一定要一样;具体的设置在下面这个寄存器里面配置: NRF24L01有RX模式,TX模式,Standby-I模式,Standby-II模式,掉电模式;他们之间的模式转换如下图: 这张图看着可能没有一点感觉,比较乱,下面这张可能会比较清晰一点: 只要我们想切换到什么模式就可以根据这个对寄存器进行配置;不过在配置的过程中,一点要注意适当的延时,我这次也被这个延时纠结了半天;