ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STM32学习笔记(四 串口通信 3 串口寄存器库函数配置)

2022-01-27 20:04:40  阅读:259  来源: 互联网

标签:NVIC USART 寄存器 InitStrue STM32 串口 GPIO USART1 库函数


一、常用的串口寄存器

USART_SR状态寄存器

作用: 状态寄存器适用于检测串口此时所处的状态。
主要关注两个位:RXNE和TC(第5、6两位)。
RXNE(读数据寄存器非空): 当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了(即RDR移位寄存器中的数据被转移到USART_DR寄存器中)。这时候要做的就是尽快读取USART_DR,从而将该位清零,也可以向该位写0,直接清除。

TC(发送完成): 当该位被置1的时候,表示USART_DR内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:读USART_SR,写USART_DR;直接向该位写0。

USART_DR数据寄存器

USART_DR实际是包含了两个寄存器,一个专门用于发送的TDR,一个专门用于接收的RDR。进行发送数据操作时,往USART_DR写入数据会自动存储在TDR内;当进行读取数据操作时,向USART_DR读取数据会自动提取RDR数据。

串行通信时一位一位传输的,所以TDR和RDR寄存器都是介于系统总线和移位寄存器间的;发送数据时把TDR内容转移到发送移位寄存器上,接收数据时则是把接收到的每一位顺序保存在接收移位寄存器内进而转移到RDR。

USART_BRR波特率寄存器

波特率寄存器包括定义了两个部分:DIV_Mantissa(整数部分)和DIV_Fraction(小数部分)。

USART_CR1控制寄存器

控制寄存器主要是设置USART使能、检验控制使能、校验选择(奇校验偶校验)、PE中断使能、发送缓冲区空中断使能、发送完成中断使能、接收缓冲区非空使能、发送使能、接受使能、字长等等

波特率的计算

在这里插入图片描述
十进制小数直接换算成十六进制需要×16,与整数部分÷16正好相反。

二、 串口操作相关库函数

在这里插入图片描述

void USART_Init()

参考链接

USART_InitStrue.USART_BaudRate=115200;//设置波特率
USART_InitStrue.USART_WordLength=USART_WordLength_8b;//数据字长为8
USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流控 应该就是连接其他外设的时候用的
USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
//调整为可以接收也可以发送模式
USART_InitStrue.USART_Parity=USART_Parity_No;//奇偶校验设置为无
USART_InitStrue.USART_StopBits=USART_StopBits_1;//设置停止位

三、串口初始化的一般步骤

在这里插入图片描述

四、初始化代码

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "usart.h"
void My_USART1_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStrue;
	USART_InitTypeDef USART_InitStrue;
	NVIC_InitTypeDef NVIC_InitStrue;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO????
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//??????
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&GPIO_InitStrue);
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&GPIO_InitStrue);
	
	USART_InitStrue.USART_BaudRate=115200;
	USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
	USART_InitStrue.USART_Parity=USART_Parity_No;
	USART_InitStrue.USART_StopBits=USART_StopBits_1;
	USART_InitStrue.USART_WordLength=USART_WordLength_8b;
	
	USART_Init(USART1,&USART_InitStrue);//
	
	USART_Cmd(USART1,ENABLE);//????1
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//??????,?????,?????
	
	NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;  //(??)
	NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;   //(????)
	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;//(???)
	NVIC_Init(&NVIC_InitStrue);
	
}
 
void USART1_IRQhandler(void)
{
	u8 res;    //(??????)
	 if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)  //(?????????)
 {
     res= USART_ReceiveData(USART1);   //????
     USART_SendData(USART1,res);      //????
  }
}
 
 int main(void)
 {	
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	My_USART1_Init();
	 while(1);
	 
 }

在这里插入图片描述

标签:NVIC,USART,寄存器,InitStrue,STM32,串口,GPIO,USART1,库函数
来源: https://blog.csdn.net/m0_53095678/article/details/122713691

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有