2-STM32串口通信实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二课 串口通信
LOGO
串口简介
串行接口简称串口,也成串行通信接口,是采用串行通 信方式的扩展接口。串口的使用对于开发调试过程的作 用是非常大的,串口可以用来查看、打印及输出相关信 息,使我们在嵌入式开发中最先与中央处理器通信的接 口。
串行通讯的特点是:数据位传送,传按位顺序进行,最 少只需一根传输线即可完成,成本低但传送速度慢。串 行通讯的距离可以从几米到几千米。
首先我们讲解查询方式的发送和接收。
Company Logo
本实验中我们通过串口1持续等待接收数据,当接收到 回车符时将接收到的内容再通过串口发送出去。 发送函数:
Company Logo
发送有两个函数,分别是发送单个字符和发送字符串函 数,发送单个字符函数首先是将要发送的字符写到缓存 中,然后等待串口自动发送完成,如果不等待发送完成 就返回,则在字符串发送函数中函数会被连续循环调用 多次,如果上一次发送的字节在寄存器中还没有发送结 束,此时再次写入同样的寄存器会将刚才的数据覆盖掉, 接收端将得不到预期的结果,所以需要等待发送完一个
Company Logo
在单片机中,主要使用异步通讯方式。
串口简介
串口通信的概念非常简单,串口按位(bit)发送和接收字 节,尽管比按字节(byte)的并行通信慢,但是串口可以 再使用一根线发送数据的同时用另一根线接收数据。它 很简单并且能够实现远距离通信。串口通信最重要的参 数是波特率、数据位、停止位和奇偶校验。 对于两个进行通信的端口,这些参数必须匹配:
Company Logo
STM32串口状态
STM32串口的状态可通过状态寄存器USART_SR读取。
这里我们关注一下三个位,第5 、6 、7位RXNE 、TC和TXE。
Company Logo
STM32串口
如果理解了以上寄存器等的讲解,那么就可以对 STM32进行
相关的设置和操作,就可以达到串口最基本的配置了,更详
STM32串口数据的发送和接收
STM32串口的发送和接收在库文件中分别有对应的函数,可直接调 用,分别是: void USART_SendData(USART_TypeDef* USARTx, u8 Data) u8 USART_ReceiveData(USART_TypeDef* USARTx)
细的介绍可参考《STM32参考手册》。
在很多串口操作中都可以直接调用printf函数打印输出信息, 但是在STM32中还需要进行一些配置才可以。接下来我们首
先会讲解如何使用printf函数进行输出,然后再讲解输入输出
函数的使用方法。
Company Logo
STM32串口printf实现
本次试验采用UART1的查询方式实现:
设备有其自己的时钟,很可能在通信中两台设备间出现
了小小的不同步。因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。
Company Logo
STM32串口简介
4、奇偶校验位:在串口通信中一种简单的检错方式。 有4中检错方式:偶、奇、高和低。 5、硬件流控制:硬件流控制常用的有RTS/CTS流控制 盒DTR/DSR流控制。硬件流控制必须将相应的电缆线
this is a uart test demo的字符。 以上例程展示了如何使用printf函数发送字符串。
Company Logo
前面讲解了printf函数的使用方法,接下来讲解如何使
用STM32的串口输入输出实现双向通信。
STM32串口的相关寄存器和原理在前面都有提到,这里 就不再赘述,这里主要讲解软件的实现方法。
Company Logo
串口简介
串行通讯又分为异步通讯和同步通讯两种:
同步串行是指ISP(interface Serial Peripheral )的缩写。ISP总
线系统是一种同步串行外设接口,它可以使MCU与各种外围设 备以串行方式进行通信以交换信息,TRM450是ISP接口。
异步串行是指UART(Universal Asynchronous Receiver/Trans
1、开启串口时钟 2、设置相应I/O模式 3、配置波特率、数据位长度、奇偶校验位等
Company Logo
STM32串口原理图
Company Logo
STM32 UART库函数
Company Logo
STM32串口时钟使能
串口作为STM32的一个外设,其时钟由外设时钟使能寄存器控制, 串口1的时钟使能在APB2ENR寄存器,其他串口的时钟使能位都在 APB1ENR。(以串口1为例)
1、波特率:这是一个衡量通信速度的参数,它表示每秒 钟传送的bit的个数。例如300波特表示每秒钟发送300个 bit。
Company Logo
STM32串口简介
2、数据位:这是衡量通信中实际数据位的参数。当计 算机发送一个信息包,实际数据不会是8位的,标准的 值是5、7或8位(如何设置取决于你想传送的信息:比 如标准的ASCII码是0~127(7位),扩展的ASCII码是 0~255(8位))。 3、停止位:用于表示单个包的最后一位。典型的值为1、 1.5和2位。优于数据是在传输线上定时的,并且每一个
TDR中的数据转移到了发送移位寄存器中了,发送移位寄存器中的
数据会由串口硬件自动发送,如此循环,直到将我们要发送的数据 全部发送完为止。
Company Logo
STM32 printf用法配置
进行上述设置之后就可以使用printf函数了
如果设置成功,下载程序,将开发板的串口接到PC机上,
打开串口调试助手,设置好波特率等参数就可以看到
Company Logo
STM32串口波特率设置
Company Logo
STM32串口控制
STM32中每个串口都有3个控制寄存器USART_CR1~3,串口的很 多配置都是通过这3个寄存器来设置的。这里我们只要用到 USART_CR1就可以实现我们的功能了,其他的寄存器就不一一列 出了。具体各位的功能及操作方法见STM32参考手册的496~497页。 其中发送和接收的中断都通过这个寄存器进行使能。
3、在工程属性的“Target” -> “Code Generation” 选项中勾选 “Use MicroLIB””。
Company Logo
STM32printf用法配置
在这里讲解一下fputc函数里面的代码,我们前面提到 过USART_SR寄存器的5、6、7三位,理解了这几位的 功能就可以大概理解串口是如何发送数据的了。
mitter),通用异步接收/发送。UART是一个并行输入成为串 行输出的芯片,通常集成在主板上。UART包含TTL电平的串
口和RS232电平的串口。
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定, 不涉及接插件、电缆或协议。
接上,用RTS/CTS流控制时,应将通讯两端的RTS、
CTS线对应相连。常用的流控制信号还有DTR/DSR。
Company Logo
STM32串口简介
STM32根据芯片型号的不同资源数量也不一样,103VC 系列最多可提供5路串口(本次着重讲解串口1和串口 2),有分数波特率发生器、支持同步单线通信和半双 工单线通讯、支持LIN 、支持调制解调器操作、智能卡 协议和IrDA SIR ENDEC规范、具有 DMA等。 STM32的串口与其他单片机的操作方式基本相同:
需要用到的几个头文件的注释去掉。
跟LED的操作一样,首先是将相应的I/O配置成串口模 式,本次函数名为USART1_Config();
Company Logo
STM32串口printf实现
Company Logo
STM32串口printf实现
USART1_Config()主要做了如下工作:
而用库函数则是:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE)
Company Logo
STM32串口复位
当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实 现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。 一般在系统刚开始配置外设的时候都会先执行复位该外设的操作。 串口1的复位时通过配置APB2RSTR寄存器来实现的,其他的几个 串口都是通过PAB1RSTR寄存器来实现的。而用库函数则是使用 USART_DeInit(USART_TypeDef* USARTx)来实现的。USART_ DeInit函数在stm32f10x_usart.c文件中。
字符之后再发送下一个字符。
发送字符串函数则是循环调用发送单个字符函数,直到 检测到空格即表明字符串已发送完。
Company Logo
查询接收函数:
接收函数首先是查询寄存器中是否有数据,如果有数据 就将数据取出,然后清除相应的标志位,如果没有数据
Company Logo
STM32串口数据的发送和接收
STM32串口的发送和接收是通过数据寄存器USART_DR来实现的, 这是一个双寄存器,包含了发送和接收两部分。当向该寄存器写数 据时,串口就会自动发送,当收到数据的时候,也在该寄存器中。
其中只用了低9位,其他位都保留且硬件强制为0。
Company Logo
Company Logo
STM32串口波特率设置
STM32中每个串口都有一个自己独立的波特率寄存器USART_BRR, 通过设置该寄存器达到配置不同波特率的目的,该寄存器的各位描 述如下:
该寄存器中最低4为用来存放小数部分的DIV_Fraction,[15:4]这12位 用来存放整数部分DIV_Mantissa。高16位未使用(图片上小数整数 有错误,以英文手册为准)。
STM32printf用法配置
在STM32中直接调用printf函数会出错,需要进行一些 配置:
1、在main文件中包含stdio.h 2、重定义fputc函数,如下:
// 发送数据
int fputc(int ch, FILE *f)
{ USART_SendData(USART1, (unsigned char) ch); while (!(USART1->SR & USART_FLAG_TXE)); return (ch); }
Company Logo
STM32串口printf实现
本次试验中我们用到了GPIO、RCC、USART这三个外
设的库文件stm32f10x_gpio.c、stm32f10x_rcc.c、
stm32f10x_usart.c,所以试验中如果你的库文件 stm32f10x_conf.h里面将相应的头文件注释了就需要将
自行更改),数据位长度为8bit,停止位为1,无校验位。
在使用printf函数之前还需要进行一些操作。如果要 printf函数工作的话,还需要把printf()重新定向到串口 中,这部分工作是由fputc(int ch,FILE *f)这个函数来完 成的,这个函数在usart.c中实现。
Company Logo
1、使能了串口1的时钟
2、配置了uart1的I/O
3、配置了uart1的工作模式
Company Logo
Βιβλιοθήκη Baidu
STM32串口简介
上面的配置中将串口1的TX和RX引脚配置成AF_PP和 IN_FLOATING模式,因为RX是接收引脚所以设置沉高 输入模式。 接下来将UART1的工作模式配置成波特率为115200(可
Company Logo
STM32printf用法配置
当TXE置位时,就表示发送数据寄存器中的数据已经移到了发送
移位寄存器中,如果使能中断的话就会产生中断。当RXNE置位时 表示接受移位寄存器中的数据已经移到接受数据寄存器中了,如果 中断使能的话则产生中断。 虽然fputc函数里面用到的是查询模式,但道理是一样的。我们先调 用USART_SendData(USART1,(unsigned char) ch)将我们要发送的 数据送到TDR中,之后我们就等待TXE置位,当TXE置位时就表示
LOGO
串口简介
串行接口简称串口,也成串行通信接口,是采用串行通 信方式的扩展接口。串口的使用对于开发调试过程的作 用是非常大的,串口可以用来查看、打印及输出相关信 息,使我们在嵌入式开发中最先与中央处理器通信的接 口。
串行通讯的特点是:数据位传送,传按位顺序进行,最 少只需一根传输线即可完成,成本低但传送速度慢。串 行通讯的距离可以从几米到几千米。
首先我们讲解查询方式的发送和接收。
Company Logo
本实验中我们通过串口1持续等待接收数据,当接收到 回车符时将接收到的内容再通过串口发送出去。 发送函数:
Company Logo
发送有两个函数,分别是发送单个字符和发送字符串函 数,发送单个字符函数首先是将要发送的字符写到缓存 中,然后等待串口自动发送完成,如果不等待发送完成 就返回,则在字符串发送函数中函数会被连续循环调用 多次,如果上一次发送的字节在寄存器中还没有发送结 束,此时再次写入同样的寄存器会将刚才的数据覆盖掉, 接收端将得不到预期的结果,所以需要等待发送完一个
Company Logo
在单片机中,主要使用异步通讯方式。
串口简介
串口通信的概念非常简单,串口按位(bit)发送和接收字 节,尽管比按字节(byte)的并行通信慢,但是串口可以 再使用一根线发送数据的同时用另一根线接收数据。它 很简单并且能够实现远距离通信。串口通信最重要的参 数是波特率、数据位、停止位和奇偶校验。 对于两个进行通信的端口,这些参数必须匹配:
Company Logo
STM32串口状态
STM32串口的状态可通过状态寄存器USART_SR读取。
这里我们关注一下三个位,第5 、6 、7位RXNE 、TC和TXE。
Company Logo
STM32串口
如果理解了以上寄存器等的讲解,那么就可以对 STM32进行
相关的设置和操作,就可以达到串口最基本的配置了,更详
STM32串口数据的发送和接收
STM32串口的发送和接收在库文件中分别有对应的函数,可直接调 用,分别是: void USART_SendData(USART_TypeDef* USARTx, u8 Data) u8 USART_ReceiveData(USART_TypeDef* USARTx)
细的介绍可参考《STM32参考手册》。
在很多串口操作中都可以直接调用printf函数打印输出信息, 但是在STM32中还需要进行一些配置才可以。接下来我们首
先会讲解如何使用printf函数进行输出,然后再讲解输入输出
函数的使用方法。
Company Logo
STM32串口printf实现
本次试验采用UART1的查询方式实现:
设备有其自己的时钟,很可能在通信中两台设备间出现
了小小的不同步。因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。
Company Logo
STM32串口简介
4、奇偶校验位:在串口通信中一种简单的检错方式。 有4中检错方式:偶、奇、高和低。 5、硬件流控制:硬件流控制常用的有RTS/CTS流控制 盒DTR/DSR流控制。硬件流控制必须将相应的电缆线
this is a uart test demo的字符。 以上例程展示了如何使用printf函数发送字符串。
Company Logo
前面讲解了printf函数的使用方法,接下来讲解如何使
用STM32的串口输入输出实现双向通信。
STM32串口的相关寄存器和原理在前面都有提到,这里 就不再赘述,这里主要讲解软件的实现方法。
Company Logo
串口简介
串行通讯又分为异步通讯和同步通讯两种:
同步串行是指ISP(interface Serial Peripheral )的缩写。ISP总
线系统是一种同步串行外设接口,它可以使MCU与各种外围设 备以串行方式进行通信以交换信息,TRM450是ISP接口。
异步串行是指UART(Universal Asynchronous Receiver/Trans
1、开启串口时钟 2、设置相应I/O模式 3、配置波特率、数据位长度、奇偶校验位等
Company Logo
STM32串口原理图
Company Logo
STM32 UART库函数
Company Logo
STM32串口时钟使能
串口作为STM32的一个外设,其时钟由外设时钟使能寄存器控制, 串口1的时钟使能在APB2ENR寄存器,其他串口的时钟使能位都在 APB1ENR。(以串口1为例)
1、波特率:这是一个衡量通信速度的参数,它表示每秒 钟传送的bit的个数。例如300波特表示每秒钟发送300个 bit。
Company Logo
STM32串口简介
2、数据位:这是衡量通信中实际数据位的参数。当计 算机发送一个信息包,实际数据不会是8位的,标准的 值是5、7或8位(如何设置取决于你想传送的信息:比 如标准的ASCII码是0~127(7位),扩展的ASCII码是 0~255(8位))。 3、停止位:用于表示单个包的最后一位。典型的值为1、 1.5和2位。优于数据是在传输线上定时的,并且每一个
TDR中的数据转移到了发送移位寄存器中了,发送移位寄存器中的
数据会由串口硬件自动发送,如此循环,直到将我们要发送的数据 全部发送完为止。
Company Logo
STM32 printf用法配置
进行上述设置之后就可以使用printf函数了
如果设置成功,下载程序,将开发板的串口接到PC机上,
打开串口调试助手,设置好波特率等参数就可以看到
Company Logo
STM32串口波特率设置
Company Logo
STM32串口控制
STM32中每个串口都有3个控制寄存器USART_CR1~3,串口的很 多配置都是通过这3个寄存器来设置的。这里我们只要用到 USART_CR1就可以实现我们的功能了,其他的寄存器就不一一列 出了。具体各位的功能及操作方法见STM32参考手册的496~497页。 其中发送和接收的中断都通过这个寄存器进行使能。
3、在工程属性的“Target” -> “Code Generation” 选项中勾选 “Use MicroLIB””。
Company Logo
STM32printf用法配置
在这里讲解一下fputc函数里面的代码,我们前面提到 过USART_SR寄存器的5、6、7三位,理解了这几位的 功能就可以大概理解串口是如何发送数据的了。
mitter),通用异步接收/发送。UART是一个并行输入成为串 行输出的芯片,通常集成在主板上。UART包含TTL电平的串
口和RS232电平的串口。
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定, 不涉及接插件、电缆或协议。
接上,用RTS/CTS流控制时,应将通讯两端的RTS、
CTS线对应相连。常用的流控制信号还有DTR/DSR。
Company Logo
STM32串口简介
STM32根据芯片型号的不同资源数量也不一样,103VC 系列最多可提供5路串口(本次着重讲解串口1和串口 2),有分数波特率发生器、支持同步单线通信和半双 工单线通讯、支持LIN 、支持调制解调器操作、智能卡 协议和IrDA SIR ENDEC规范、具有 DMA等。 STM32的串口与其他单片机的操作方式基本相同:
需要用到的几个头文件的注释去掉。
跟LED的操作一样,首先是将相应的I/O配置成串口模 式,本次函数名为USART1_Config();
Company Logo
STM32串口printf实现
Company Logo
STM32串口printf实现
USART1_Config()主要做了如下工作:
而用库函数则是:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE)
Company Logo
STM32串口复位
当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实 现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。 一般在系统刚开始配置外设的时候都会先执行复位该外设的操作。 串口1的复位时通过配置APB2RSTR寄存器来实现的,其他的几个 串口都是通过PAB1RSTR寄存器来实现的。而用库函数则是使用 USART_DeInit(USART_TypeDef* USARTx)来实现的。USART_ DeInit函数在stm32f10x_usart.c文件中。
字符之后再发送下一个字符。
发送字符串函数则是循环调用发送单个字符函数,直到 检测到空格即表明字符串已发送完。
Company Logo
查询接收函数:
接收函数首先是查询寄存器中是否有数据,如果有数据 就将数据取出,然后清除相应的标志位,如果没有数据
Company Logo
STM32串口数据的发送和接收
STM32串口的发送和接收是通过数据寄存器USART_DR来实现的, 这是一个双寄存器,包含了发送和接收两部分。当向该寄存器写数 据时,串口就会自动发送,当收到数据的时候,也在该寄存器中。
其中只用了低9位,其他位都保留且硬件强制为0。
Company Logo
Company Logo
STM32串口波特率设置
STM32中每个串口都有一个自己独立的波特率寄存器USART_BRR, 通过设置该寄存器达到配置不同波特率的目的,该寄存器的各位描 述如下:
该寄存器中最低4为用来存放小数部分的DIV_Fraction,[15:4]这12位 用来存放整数部分DIV_Mantissa。高16位未使用(图片上小数整数 有错误,以英文手册为准)。
STM32printf用法配置
在STM32中直接调用printf函数会出错,需要进行一些 配置:
1、在main文件中包含stdio.h 2、重定义fputc函数,如下:
// 发送数据
int fputc(int ch, FILE *f)
{ USART_SendData(USART1, (unsigned char) ch); while (!(USART1->SR & USART_FLAG_TXE)); return (ch); }
Company Logo
STM32串口printf实现
本次试验中我们用到了GPIO、RCC、USART这三个外
设的库文件stm32f10x_gpio.c、stm32f10x_rcc.c、
stm32f10x_usart.c,所以试验中如果你的库文件 stm32f10x_conf.h里面将相应的头文件注释了就需要将
自行更改),数据位长度为8bit,停止位为1,无校验位。
在使用printf函数之前还需要进行一些操作。如果要 printf函数工作的话,还需要把printf()重新定向到串口 中,这部分工作是由fputc(int ch,FILE *f)这个函数来完 成的,这个函数在usart.c中实现。
Company Logo
1、使能了串口1的时钟
2、配置了uart1的I/O
3、配置了uart1的工作模式
Company Logo
Βιβλιοθήκη Baidu
STM32串口简介
上面的配置中将串口1的TX和RX引脚配置成AF_PP和 IN_FLOATING模式,因为RX是接收引脚所以设置沉高 输入模式。 接下来将UART1的工作模式配置成波特率为115200(可
Company Logo
STM32printf用法配置
当TXE置位时,就表示发送数据寄存器中的数据已经移到了发送
移位寄存器中,如果使能中断的话就会产生中断。当RXNE置位时 表示接受移位寄存器中的数据已经移到接受数据寄存器中了,如果 中断使能的话则产生中断。 虽然fputc函数里面用到的是查询模式,但道理是一样的。我们先调 用USART_SendData(USART1,(unsigned char) ch)将我们要发送的 数据送到TDR中,之后我们就等待TXE置位,当TXE置位时就表示