STM32F4——串口(USART)通信总结

发布者:精品古钱斋最新更新时间:2018-06-15 来源: eefocus关键字:STM32F4  串口  USART  通信总结 手机看文章 扫描二维码
随时随地手机看文章

一、概述:

    USART即通用同步异步收发器,用于灵活的与外部设备全双工数据交换,它支持多种通信传输方式,可以通过小数波特率发生器提供多种波特率。

二、串口IO:

    对于STM32F407有6个串口,对于每个串口对应的IO可以从芯片原理图中对应找到,对于其串口1,对应的IO为PA9/PB6端口对应串口1的发送端,PA10/PB7端口对应串口1的接收端。

三、通信参数:

    对于数据的传输需要设定好相关的数据传输协议,因此必要的参数设定是有必要的,其中包括:起始位、数据位(8位或9位)、奇偶校验位(开启与否)、停止位(1、1.5、2位)、波特率设定。

四、相关寄存器:

    其中相关寄存器有:状态寄存器、数据寄存器、波特率寄存器、控制寄存器1、控制寄存器2、控制寄存器3、保护时间和预分频寄存器;下边简单分析一下前三个寄存器。

    1、状态寄存器:

    目前认识的位有:TXE:发送寄存器为空;TC:发送完成;RXNE:读取数据寄存器不为空;ORE:上溢错误;FE:帧错误;PE:奇偶校验错误。

    2、数据寄存器:该寄存器只有低8位有效,而且具有读写操作,有关该寄存器中的数据时要发送的数据还是接受到的数据取决于执行的操作是“读取”还是“写入”。

    3、波特率寄存器:

    波特率寄存器用来通过设定相关数值通过时钟产生相应的波特率。对于串口1的数值设定和产生波特率的关系如下:

    其中在寄存器中会设定相应的值,DIV_Mantissa[11,0]用来设定分频系数的整数部分,DIV_Fraction[3,0]用来设定分频系数的小数部分。

五、相关代码分析:

    下面依照串口的配置过程,来分析相关代码:

    1、相关时钟使能:


  1. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟  

  2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟  

    2、引脚复用映射:


  1. //串口1对应引脚复用映射  

  2. GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1  

  3. GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1  

    3、GPIO端口模式设定:


  1. //USART1端口配置  

  2.        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10  

  3. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能  

  4. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //速度50MHz  

  5. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出  

  6. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉  

  7. GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10  

    4、串口参数设定:


  1.        //USART1 初始化设置  

  2. USART_InitStructure.USART_BaudRate = bound;//波特率设置  

  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式  

  4. USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位  

  5. USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位  

  6. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制  

  7. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式  

  8.    USART_Init(USART1, &USART_InitStructure); //初始化串口1  

    5、配置相关中断:


  1. #if EN_USART1_RX      

  2.     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断  

  3.   

  4.     //Usart1 NVIC 配置  

  5.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道  

  6.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3  

  7.     NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;       //子优先级3  

  8.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能  

  9.     NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、  

  10. #endif  

    6、使能串口(及注意相关标志位):


  1. USART_Cmd(USART1, ENABLE);  //使能串口1   

  2. learFlag(USART1, USART_FLAG_TC);  

    7、中断服务函数(根据需要自行处理):



  1. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)  

  2. {  

  3.     Res =USART_ReceiveData(USART1);//(USART1->DR);   //读取接收到的数据  

  4.       

  5.     if((USART_RX_STA&0x8000)==0)//接收未完成  

  6.     {  

  7.         if(USART_RX_STA&0x4000)//接收到了0x0d  

  8.         {  

  9.             if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始  

  10.             else USART_RX_STA|=0x8000;  //接收完成了   

  11.         }  

  12.         else //还没收到0X0D  

  13.         {     

  14.             if(Res==0x0d)USART_RX_STA|=0x4000;  

  15.             else  

  16.             {  

  17.                 USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;  

  18.                 USART_RX_STA++;  

  19.                 if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收     

  20.             }          

  21.         }  

  22.     }              

  23.  }  

    8、剩下就是根据串口的相关传输状态来进行数据的发送和接收,可依据自己的需要进行设计和分析。


关键字:STM32F4  串口  USART  通信总结 引用地址:STM32F4——串口(USART)通信总结

上一篇:STM32复用功能,一张图读懂串口与GPIO口复用功能的关系
下一篇:STM32的GPIO的复用功能和重映射功能

推荐阅读最新更新时间:2024-03-16 16:05

51单片机通过串口控制LED
通过串口助手控制led,还有加了蜂鸣器,也有响声,不过不是太大,一点学习,希望大家多指教。 #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit beep=P1^5; void delay(u16 i) { while(i--); } /******************************************************************************* * 函数名 :UsartIni
[单片机]
51单片机通过<font color='red'>串口</font>控制LED
STM32 串口详解
01、USART的特点 USART是通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx和Tx)就可以完成通信过程,因此也称为异步串行通信。 全双工异步通信。 小数波特率发生器系统,提供精确的波特率。 可配置的16倍过采样或8倍过采样,因而为速度容差与时钟容差的灵活配置提供了可能。 可编程的数据字长度(8位或者9位); 可配置的停止位(支
[单片机]
STM32 <font color='red'>串口</font>详解
51串口通讯 中断注意
首先是自己遇到了问题,然后在同事的帮助下解决了,然后上网一查有这样的注意文章,就转过来了 一、深入了解字符串的问题 char str11 = a ; P1=strlen(str11); 上面的一个是一个测试字符个数的实例,用仿真就可以看到结果。结果是1。也就是说字符’’是不会被计入的。那么我们就可以通过此函数来分辩是否是字符和字符串。当然如果字符串是一个字符的话,那么就是我们上面的那个情况了,会直接被当做一个数看待。 注:上位机发过来的数据全部是字符串格式的。 二、串口中断问题 先看下面的程序。 void UART_SendByte(unsigned char dat) { SBUF=dat; while(!T
[单片机]
STM32串口的学习(2)
这次的学习主要是整理串口接收中断 串口中断初始化的代码如下: NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置优先级分组:先占优先级0位,从优先级4位 //设置向量表的位置和偏移 #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_Vect
[单片机]
STM32F103中USART2的使用
USART1程序很多,看看USART2程序。注意红色部分,首先要使能相关端口的时钟。 因为USART2可以映射成不同的端口,所以要端口映射。 结合你自己的开发板,设置正确的映射口.(正点原子的是PA03PA02.) STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。 程序在正点原子开发板SRAM中调试通过,开发环境IAR5.30. void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå NVIC_InitTypeDef
[单片机]
STM32F103中<font color='red'>USART</font>2的使用
STM32F4_TIM基本延时(计数原理)
Ⅰ、 概述 STM32 的 TIM 定时器分为三类:基本定时器、通用定时器和高级定时器。从分类来看就知道 STM32 的定时器功能是非常强大的,但是,功能强大了,软件配置定时器就相对复杂多了。很多初学者甚至工作了一段时间的人都不知道 STM32 最基本的计数原理。 虽然 STM32 定时器功能强大,也分了三类,但他们最基本的计数部分原理都是一样的,也就是我们常常使用的延时(或定时)多少 us 、 ms 等。 接下来我会 讲述关于STM32最基本的计数原理,详细讲述如何做到 ( 配置 ) 计数1us的延时,并提供实例代码供大家参考学习。 关于本文的更多详情请往下看。 Ⅱ、实例工程下载 笔者针对于初学者提供的例程都是去掉了
[单片机]
<font color='red'>STM32F4</font>_TIM基本延时(计数原理)
Stm32f407 led闪烁示例
硬件平台: stm32f407ve 软件平台: win10 (OS Name: Microsoft Windows 10 Enterprise OS Version: 10.0.18363 N/A Build 18363) Keil5 5.26.2 HAL库版本: 2.14.0(目前下载的最新的) 实验介绍: 本次是使用hal库进行led闪烁实验。(根据之前建立的模板操作,这里不再建立工程模板) Led闪烁的原理,就是循环的亮和灭,工程模板已经是点亮了led,这个时候,我需要做的就是在循环中不断的点亮和熄灭,而且点亮和熄灭要注意一定的时间间隔,也就
[单片机]
<font color='red'>Stm32f4</font>07 led闪烁示例
Ramtron扩展F-RAM V产品系列 新增汽车等级串口128千位器件
Ramtron International Corporation (简称Ramtron) 宣布,其V系列产品线新增两款通过严格的AEC-Q100 Grade 3汽车等级认证的串口F-RAM器件。这两款产品的型号为FM24V01-G和FM25V01-G,是128 千位 (Kb)、高性能非易失性F-RAM存储器,在2.0至3.6V的宽工作电压范围内工作。这一严格的汽车等级认证,是汽车电子设备委员会 (Automotive Electronic Council) 针对集成电路而制定的应力测试认证,用于满足汽车市场的严苛要求。通过Grade-3认证确保器件,能够在 -40℃ 到 +80℃ 的汽车使用温度范围内可靠工作。
[汽车电子]
Ramtron扩展F-RAM V产品系列 新增汽车等级<font color='red'>串口</font>128千位器件
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved