嵌入式学习笔记 您所在的位置:网站首页 寄存器是干什么的 嵌入式学习笔记

嵌入式学习笔记

2023-12-18 11:28| 来源: 网络整理| 查看: 265

文章目录 前言USART的相关寄存器介绍状态寄存器:USARTX->SR具体位代表的含义实际代码 数据寄存器 USARTX->DR波特率寄存器 USARTX->BRR控制寄存器 (USART_CR)控制寄存器1(USART_CR1)控制寄存器2(USART_CR2) GPIO的复用模式查询对应GPIO管脚配置为复用模式 编程实现串口收发一个字节串口打印乱码接收一个字符运行效果 M4系列目录

前言

上一篇中,对串口做了个概述,主要是介绍了串口通信的特征,异步串行全双工通信,然后就是结合串口的框图梳理了一下STM32中USART的配置流程以及发送接收数据的流程,本文将接着上篇的内容,对串口的寄存器做个介绍,然后实现一个简单的收发实验。

USART的相关寄存器介绍

根据之前GPIO的经验,咱们可以打开中文编程手册去找到对应的章节,然后依次看一下寄存器的每个位的功能。具体的位置在手册的第20章。 在这里插入图片描述

状态寄存器:USARTX->SR

首先第一个寄存器,就是状态寄存器,其作用就是用于描述USART的工作状态,为编程者提供一个串口的实时状态,前面分析框图的时候,有提到过,发送时需要判断上一帧有没有发送完毕;接收时需要判断一帧数据有没有接收完毕,当时说的是有内部的标志,这其中的标志就在此寄存器中。 状态寄存器是只读。 在这里插入图片描述 寄存器的访问方式,还是结构体指针指向成员的写法:

**USARTx->SR(x代表1、2、3、6) 或者 UARTx->SR(x代表4、5)** 具体位代表的含义

位 7 TXE:发送数据寄存器为空 (Transmit data register empty) 用于判断发送数据寄存器 当发送数据寄存器为空 1 当发送数据寄存器不为空 0 从发送数据寄存器发送到移位寄存器 这一位置1

位 6 TC:发送完成 (Transmission complete) 用于判断上一帧数据是否发送完成 发送完成 1 发送未完成 0 移位寄存器将数据发送完了,会将这一位置1;用于判断上一帧有么有发送完毕,没有就等待。 参照之前GPIO等待松手的写法,等待发送完成的代码应该是下面这个样子:

while( !(USART1->SR & 1 //等待之前的发送完成 while(!(USART1->SR & (1 u8 str; //等待接收完成 while(!(USART1->SR & (1DR的 寄存器,那么它的作用又是什么呢,接下里就对它来做个分析。

数据寄存器 USARTX->DR

注意手册中红框的表述,前面的框图中,发送和接收是两个数据寄存器,但实际在单片机内部是一个,这两个寄存器的唯一区别方法就是,执行写操作就是发送数据寄存器(TDR),执行读操作的时候就是接受数据寄存器(RDR)。这也就解释了为什么上面的代码中,读和写都是使用的DR寄存器。 在这里插入图片描述

波特率寄存器 USARTX->BRR

然后就是波特率寄存器,根据昨天的框图,在波特率的配置过程中,只用将计算的DIV结构写入一个寄存器即可。如下图:该寄存器的4-15位就是写入DIV的整数部分,0-3位就是写入DIV的小数部分。 在这里插入图片描述 至于怎么写,参照前面的经验,直接使用赋值语句即可。还是借用昨天的 使用串口1,最后一句就是写入过程。 波特率:115200 时钟大小:84000000 过采样:16

float USARTDIV; unsigned int DIV_M; unsigned int DIV_F; USARTDIV=84000000/16/115200; // 45.57291666666667 DIV_M =(u32) USARTDIV;//读取整数部分 DIV_F = (USARTDIV- DIV_M)*16+0.5 f //考虑四舍五入 USART1->BRR = DIV_MAPB2ENR |= (1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有