datasheet

STM32复习笔记(四)串口通信

2019-06-26来源: eefocus关键字:STM32  串口通信  UART

一、常见的串行通信接口:


二、STM32的串口通信接口:

UART:通用异步收发器


USART:通用同步异步收发器


大容量STM32F10x系列芯片,包含3个USART和2个UART


三、UART异步通信方式引脚连接方法:

-RXD:数据输入引脚。数据接受。


-TXD:数据发送引脚。数据发送。


四、UART异步通信方式引脚:

-RXD:数据输入引脚。数据接受。


-TXD:数据发送引脚。数据发送。


五、UART异步通信方式特点:

全双工异步通信。


分数波特率发生器系统,提供精确的波特率。


     -发送和接受共用的可编程波特率,最高可达4.5Mbits/s


可编程的数据字长度(8位或者9位);


可配置的停止位(支持1或者2位停止位);


可配置的使用DMA多缓冲器通信。


单独的发送器和接收器使能位。


检测标志:① 接受缓冲器  ②发送缓冲器空 ③传输结束标志


多个带标志的中断源。触发中断。


其他:校验控制,四个错误检测标志。


六、串口通信过程:


七、STM32串口异步通信需要定义的参数:

① 起始位


② 数据位(8位或者9位)


③ 奇偶校验位(第9位)


④ 停止位(1,15,2位)


⑤ 波特率设置


八、常用的串口相关寄存器:

USART_SR状态寄存器


USART_DR数据寄存器


USART_BRR波特率寄存器


九、串口操作相关库函数(省略入口参数):

void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能


void USART_Cmd();//使能串口


void USART_ITConfig();//使能相关中断


void USART_SendData();//发送数据到串口,DR


uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据


FlagStatus USART_GetFlagStatus();//获取状态标志位


void USART_ClearFlag();//清除状态标志位


ITStatus USART_GetITStatus();//获取中断状态标志位


void USART_ClearITPendingBit();//清除中断状态标志位



FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);


uint16_t USART_ReceiveData(USART_TypeDef* USARTx);



void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);


十、波特率计算方法:




十一、串口配置的一般步骤:

①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();


②串口复位:USART_DeInit(); 这一步不是必须的


③GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP


④串口参数初始化:USART_Init();


⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)


      NVIC_Init();


      USART_ITConfig();


⑥使能串口:USART_Cmd();


⑦编写中断处理函数:USARTx_IRQHandler();


⑧串口数据收发:


void USART_SendData();//发送数据到串口,DR


uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据


⑨串口传输状态获取:


FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);


void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);


十二、Printf支持:

//加入以下代码,支持printf函数,而不需要选择use MicroLIB   

#if 1

#pragma import(__use_no_semihosting)             

//标准库需要的支持函数                 

struct __FILE 

{ int handle; 

}; 

 

FILE __stdout;       

//定义_sys_exit()以避免使用半主机模式    

_sys_exit(int x) 

{ x = x; } 

 

//重定义fputc函数 

int fputc(int ch, FILE *f)

{      

    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   

    USART1->DR = (u8) ch;      

   return ch;

}

#endif 

#define USART_REC_LEN   200    //定义最大接收字节数 200


 u8  USART_RX_BUF[USART_REC_LEN];


              //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符


u16 USART_RX_STA;           //接收状态标记 


#define USART_REC_LEN   200    //定义最大接收字节数 200



程序要求,发送的字符是以回车换行结束(0x0D,0x0A)


关键字:STM32  串口通信  UART

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic465871.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32复习笔记(十一)USMART调试组件
下一篇:STM32复习笔记(五)外部中断

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32开发笔记20: STM32L053R8T6的keil配置

单片机型号:STM32L053R8T6    使用STM32CubeMX生成STM32L053R8T6相关的应用程序代码后,使用Keil开发环境第1次下载的时候,提示如下错误,我使用F0和F4的单片机,没有遇到过。    仔细查看工程设置,原因在工程设置中,我们需加入相应的Flash配置信息,如下图所示,具体的选择,要根据单片机的类型,我们可以仔细查看数据手册。    但下载的时候,偶尔还会提示如下错误:    这件事情网上说了很多的解决方法,我自己测试,更改2处Keil的设置既可以解决,如下图所示。    此2处更改后,反复
发表于 2019-07-16
STM32开发笔记20: STM32L053R8T6的keil配置

STM32开发笔记21: USB驱动的移植

单片机型号:STM32L053R8T6    现在使用的STM32L053R8T6单片机带有USB接口,原先一直使用UART转USB芯片来完成USB功能的支持,现在这款单片机带了就希望使用以下。由于已经建立了自己的工程目录,再重新使用STM32CubeMX生成的工程文件,重新建立是不显示的,所以本文探索将USB驱动文件移植到自己项目中的方法,我使用的是USB的CDCD类,步骤如下:    1、使用STM32CubeMX使能USB,如下图所示:    2、设置时钟,USB需要48M时钟,使用内部和外部均可,我这里使用外部时钟。    3、生成工程文件
发表于 2019-07-16
STM32开发笔记21: USB驱动的移植

STM32开发笔记22: 手动添加驱动文件

单片机型号:STM32L053R8T6    我们可以通过STM32CubeMX生成工程代码,但是如果我们的工程已经建立完毕了,或者说我们在原有的工程上,开始新的项目设计,此时又需加入新的驱动,该如何呢?本文探讨其解决方法。    1、STM32CubeMX的驱动路径如下图所示,我们希望加入什么驱动,就直接将其对应的.c文件加入到工程中即可。    2、为了使该模块生效,我们还学将其使能。其使能宏,在stm32l0xx_hal_conf.h中,如下图所示。    3、上述工作完成后,我们就可以对工程进行编译了,至于驱动的具体调用方法,我们可以参看ST
发表于 2019-07-16
STM32开发笔记22: 手动添加驱动文件

STM32开发笔记23: 使用__weak修饰符

单片机型号:STM32L053R8T6在 HAL 库中,很多回调函数前面使用__weak 修饰符。 weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。 举个例子:我们打开工程模板,找到并打开文件stm32f4xx_hal.c 文件,里面定义了一个函数 HAL_MspInit,定义如下:__weak void 
发表于 2019-07-16

STM32开发笔记24:STM32L0低功耗设计——需求概述

单片机型号:STM32L053R8T6    这几篇日志将详细记录,自己应用stm32进行低功耗设计的全过程。    使用芯片:STM32L053R8T6    运行模式:        Range 1:电源电压限制在1.71-3.6V,CPU最大运行频率为32MHz。        Range 2:CPU最大运行频率为16MHz。        Range 3:CPU最大运行频率4.2MHz    低功耗模式: 
发表于 2019-07-16
STM32开发笔记24:STM32L0低功耗设计——需求概述

STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

单片机型号:STM32L053R8T6    继续项目的开发工作,突然发现,程序不能够正常下载到单片机中了,提示如下图所示的错误,我使用的是keil和ST-Link。    这个问题在我第1次调试的时候发生过1次,我认为是我误操作将芯片烧坏了,因为当时又反复的焊接了一下芯片,也没有修好,就把这件事情放下了。    今天再次出现,自己感觉可能和低功耗有关,仔细查看刚刚下载的程序,里面上来程序就进入低功耗,没有任何退出语句,所以应该是CPU不响应下载命令了。    按照这种思路,先将单片机的复位引脚接地,然后点击下载按钮的同时,放开复位引脚,居然成功
发表于 2019-07-16
STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved