stm32串口配置步骤_STM32中文参考手册

stm32串口配置步骤_STM32中文参考手册STM32串口通信(usart)在开始学写STM32串口通信的代码实现前,首先先了解一下两块芯片之间通信的分类,按照数据传输方式可以分为并行通信:数据各个位同时传输,速度快,占用引脚资源多串行通信:数据按位传输

STM32串口通信(usart)   在开始学写STM32串口通信的代码实现前,首先先了解一下两块芯片之间通信的分类,按照数据传输方式可以分为并行通信:数据各个位同时传输,速度快,占用引脚资源多串行通信:数据按位传输,速度较慢,占用引脚资源少   按照数据传送的方向,可以分为单工:只支持数据在一个方向上传输半双工:允许数据在两个方向上传输,但在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。全双工:允许数据同时在两个方向上传输,因此全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。   串口通信就是一种串行全双工通信方式,而串行通信又可分为同步通信:带时钟同步信号传输(如SPI , IIC通信接口)异步通信:不带时钟同步信号(UART,单总线)   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   我们的串口通信分两种UART:通用异步收发器(universal asynchronous receiver transmitters)USART:通用同步异步收发器   (universal synchronous/asynchronous receiver transmitters)   这两个的区别还是很明显的,uart仅能实现异步收发,引脚也仅需发送(TX),接收(RX),而usart既可以实现异步收发,也可以实现同步收发,在选择使用异步收发时,它与uart是毫无区别的,但当使用同步收发时,还需要在TX,RX的基础上添加一条时钟信号(CK)。   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   从上图(来自STM32F103RCT6芯片数据手册)我们可以知道STM32F103系列的芯片有三个USART串口以及两个UART串口,它们的引脚为   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   异步串口通信协议   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   由上图协议我们可以知道,异步串口通信需要四个参数:字长,每次发送的数据长度,一般为8位的字节波特率,每秒传输的数据位数奇偶校验位停止位   STM32串口上述的四个参数的配置可以在串口初始化结构体内进行配置:【嵌入式物联网单片机学习】大家可以加我一起学习,我整理了100多G(全网最全)的学习资料包(持续更新)、最新的学习路线思维导图。各种学习群、项目开发教程。还可以围观我朋友圈中的一手行业消息,每周的技术大咖直播答疑吹水 加我,一起学习:http://qr61.cn/o2pMPQ/qkd7zUA
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   上图上部分为对结构体的数据填充,前部分则将填充的数据进行初始化。   对于串口的整体初始化流程我们便不多说了,大体分为以下几个步骤:串口时钟使能,GPIO时钟使能GPIO端口模式设置串口参数初始化:USART_Init();开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)使能串口   如下图:   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   在串口初始化完成以后,我们便要进行数据收发的处理了,STM32的这部分函数写在了串口中断服务函数中:   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   在理解上图程序前,我们先了解下串口数据收发的过程:   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   在数据发送过程中,1:首先由MCU内核将要发送的字节写入到输出数据缓冲器(TDR),2:TDR会适时的将数据加载到串行输出移位寄存器,3:然后再经由TX串口线,将数据一位一位的发送出去。而数据接收则与此过程相反。   在上述过程中,会产生两个事件(事件可以在状态寄存器中查询到):当数据从TDR转移到移位寄存器时(也就是步2),会产生TDR已空事件TXE当数据从移位寄存器全部发送出去时,会产生数据发送完成事件TC   了解了这些我们便可以理解上面的串口中断服务函数了。   串口中断服务函数详解(STM32F103RCT6芯片的串口1)   在usart.h文件中:   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   定义了一个最大200字节的u8类型的数组以及一个接收状态标志位USART_RX_STA,该标志位相当于一个虚拟的寄存器:   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   在正点原子的串口1协议里,需要每次发送的数据(长度小于200字节的一段话)需要以回车换行结束,这种协议符合我们键盘使用习惯,但当我们自己编写自己的通信协议时并不需拘泥于此,完全可以按照自己的需要来编写,例如每个数据开头都以0XAA开始,结尾都以0X00结束。   串口中断是一个字节一个字节的进行接收的(且字节长度按照我们所设定为8位),在数据接收过程中,每接收到一个非0X0D或0X0A的字节时,便会将该字节存入到200长度的数组USART_RX_BUF[ ] 中,且虚拟寄存器 USART_RX_STA加1(也相当于其13-0位加1):   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   当接收到0X0D时,则会   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   即将寄存器USART_RX_STA的第14位置为1,表示接收到0X0D,如果对上图中的按位或操作不理解,可以参看   【通信专栏】附录一:单片机C语言基础/逻辑运算/按位运算/结构体/宏定义   当接收到0X0D后,并不会把0X0D写入到数组USART_RX_BUF中,而是检测下一个字节是否为0X0A:   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   若不是,将会将寄存器USART_RX_STA清零,否则将通过USART_RX_STA|=0x8000这一句将寄存器第15位 置1,表示接收完毕。   到此为止我们便接收完一句话了,接完之后应该将寄存器USART_RX_STA清零,正点原子的代码把清零这一步放到了主程序的循环中:   
stm32串口配置步骤_STM32中文参考手册
stm32串口配置步骤_STM32中文参考手册   到此我们就已经可以使用串口进行数据的接收或者发送了,最为最基础的,也是最简单的一种通信方式,值得深入反复学习一下。作者:周旋来源:行走的机器人原文链接:【通信专栏】一:STM32串口通信(usart) (sigusoft.com)

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/38440.html

(0)
上一篇 2024年 9月 8日 下午5:08
下一篇 2024年 9月 8日 下午5:12

相关推荐

关注微信