STM32学习总结之------串口通信USART

发布者:sokaku最新更新时间:2022-10-25 来源: csdn关键字:STM32  串口通信  USART 手机看文章 扫描二维码
随时随地手机看文章

学习内容:

1、利用串口可以帮助我们调试程序,本节介绍的为串口最基本、最常用的方法,全双工、异步通讯方式。


2、要配置串口通讯,至少要设置以下几个参数:字长(一次传送的数据长度)、波特率(每秒传输的数据位数)、奇偶校验位、还有停止位。

在初始化串口的时候,必然有一个串口初始化结构体,这个结构体的几个成员就是有来存储这些控制参数的。


3、串口线主要分两种,直通线(平行线)和交叉线。

假如PC与板子之间要实现全双工串口通讯,必然是PC的Tx针脚要连接到板子的Rx针脚,而PC的Rx针脚则要连接至板子的Tx针脚了。由于板子和pc的串口接法是相同的,就要使用交叉线来连接了。


直通线接法:开发板Tx连接至DB9的第2针脚,而Rx连接至第3针脚,这与PC接法是相反的,这样的板子与PC通讯就需要使用直通线了。

在这里插入图片描述

要实现基本的全双工异步通讯,只要3条线,分别为Rx、Tx、和GND。


4、串口架构图

在这里插入图片描述

从下至上,串口外设主要由三个部分组成,分别是波特率的控制部分、收发控制部分及数据存储转移部分。


5、发送接收数据过程:

当我们需要发送数据时,内核或DMA外设(一种数据传输方式)把数据从内存(变量)写入到发送数据寄存器TDR后,发送控制器将适时地自动把数据从TDR加载到发送移位寄存器,然后通过串口线Tx,把数据一位一位地发送出去,在数据从TDR转移到移位寄存器时,会产生发送寄存器TDR已空事件TXE,当数据从移位寄存器全部发送出去时,会产生数据发送完成事件TC,这些事件可以在状态寄存器中查询到。

而接收数据则是一个逆过程,数据从串口线Rx一位一位地输入到接收移位寄存器,然后自动地转移到接收数据寄存器RDR,最后用内核指令或DMA读取到内存(变量)中。


6、函数运行过程

在这里插入图片描述

首先调用函数 USART1_Config(),函数USART1_Config()主要做了如下工


使能了串口1的时钟

配置好了usart1的I/O

配置好了usart1的工作模式,具体为波特率为 115200 、8个数据位、1个停止位、无硬件流控制。 即 115200 8-N-1。

在这里插入图片描述

具体的USART1_Config() 在usart1.c这个用户文件中。

一般情况下,该外设的配置都在该外设的.C文件中

7、Tx为发送端,输出引脚,而且现在GPIO是使用复用功能,所以要把它配置为复用推挽输出(GPIO_Mode_AF_PP) ;而Rx引脚为接收端,输入引脚,所以配置为浮空输入模式GPIO_Mode_IN_FLOATING。GPIO的配置

在这里插入图片描述

8、通讯协议要求两个通讯器件之间的波特率、字长、停止位奇偶校验位都相同。

USART1_printf()便是一个完全自定义的格式输出函数,它的功能与重定向之后的printf类似。格式化输出,类似于C库中的printf,但这里没有用到C库


printf() 函数会受缓冲区大小的影响,有时候在用它打印的时候程序会发生莫名奇妙的错误,而实际上就是由于使用printf() 这个函数引起的,其优点就是这种情况很少见且支持的格式较多。

而USART1_printf()则不会受缓冲区的影响产生莫名的错误,但其支持的格式较少。


学习总结:

硬件流,在STM32的很多外设都具有硬件流的功能,其功能表现为:当外设硬件处于准备好的状态时,硬件启动自动控制,而不需要软件再进行干预。

main.c文件中要把 stdio.h 这个头文件包含进来,还要在编译器中设置一个选项 Use MicroLIB (使用微库)


实验结果可以把主函数main里面的 printf 的内容打印出来,可以用来显示程序运行位置。

关键字:STM32  串口通信  USART 引用地址:STM32学习总结之------串口通信USART

上一篇:STM32单片机学习总结之中断EXTI (External interrupt)
下一篇:STM32学习总结之Sysstick(系统滴答定时器)

推荐阅读最新更新时间:2024-11-06 16:31

stm32 学习笔记: 中断
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。 1 基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PR
[单片机]
STM32 I2C总线 自我总结学习
前几天在学习STM32的485通信,基本搞清楚了原理,也实际操作成功---后续还将进一步学习---与变频器通信,从而去控制380V电机! 现在打算彻底搞清楚STM32的I2C总线通信----首先是对AT24C02的读写----手上有PCF8574的IO扩展芯片,也是I2C协议的,希望实现多个控制! STM32的I2C有自带的硬件驱动,也可以使用GPIO模拟-----先总结一下硬件驱动下的问题。 ----------------------------------硬件下-----以AT24C02与PCF8574为例--------------- ------第一部分是简单宏定义------- #define
[单片机]
<font color='red'>STM32</font> I2C总线 自我总结学习
stm32驱动SST25VF程序
main.c: #include stm32f10x_lib.h #include hw_conf.h #include SST25V.h void delay(int d); u8 Tx_Buffer = {0x72,0x62,0x02,0x78,0x60,0x96,0x86,0x79,0x85,0x24,0x36,0x48,0x56,0x68,0x70,0x75,0x88,0x24}; u8 Rx_Buffer ; u8 DataByte=0; int main(void) { #ifdef DEBUG debug(); #endif Setup_System(); //系统启动 SST25V_Init(); //
[单片机]
IAR平台下使用STM32的DSP配置方法
在工程名上点击鼠标右键选择option 打开后在General Options界面选择 Library Configuration 然后勾选DSP library 然后在函数文件中添加包含对应头文件 include arm_math.h
[单片机]
IAR平台下使用<font color='red'>STM32</font>的DSP配置方法
STM32学习之RCC时钟配置
STM32 有多个时钟源,分别是 HSI:上电默认启动,因精度不高所以先不采用,以后如果需要再使用 HSE:外部高速时钟,系统时钟一般采用它,经过PLL倍频作为系统同时钟 LSE:外部低速时钟,一般专门用于RTC,等到RTC模块时再使用 LSI:内部低速时钟,精度不高,一般用于IWDGCLK 时钟系统框图如下: STM32 中各个模块都有自己的时钟,当使用相应的模块时首先记得把此模块时钟开启 本次学习使用标准固件库3.3.0 好了,看明白上图咱就开始吧: void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus;
[单片机]
<font color='red'>STM32</font>学习之RCC时钟配置
STM32的启动文件的选择(由容量大小决定)
给STM32写程序时,我们需要在工程文件中加入厂家提供的启动文件(这里以STMf10x系列为例),里面包含的是启动代码,启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如下: 1、堆栈(SP)的初始化; 2、初始化程序计数器(PC); 3、设置向量表异常事件的入口地址; 4、调用 main 函数。 这些都是准备工作,如果看不懂目前初学也没什么关系,毕竟该文件是用汇编写的。。。。。 下面我们来看看ST公司提供的三个文件,他们分别用于不同容量的STM32芯片,这三个文件是: startup_stm32f10x_ld.s startup_stm32f10x_md.s st
[单片机]
STM32电机控制同步电角度测试说明
前言 在使用 ST FOC电机库 时,当使用Hall信号作为位置信号时,需要输入同步电角度数据,这个数据根据当前使用电机的特性进行输入,会在每次Hall信号变化时同步电角度,如果角度偏差较大时会影响控制效果,可能带来效率或者电机的震荡,初始测试还是有必要的,本文详细说明测试注意事项以及测试方法。 ST FOC电机库 电角度约定( STM32 PMSM FOC SDK电机控制固件库 ) 默认电机A相的反电动势最高点作为电角度的0度; 电机Hall A的上升沿到电机A相反电动势最高点的延迟角度为同步电角度; 测试准备 如果电机没有虚拟中点接出,需要连接三个相同阻值电阻到电机的三相接线上,电阻另外一端连接到一起作为虚拟中点;
[单片机]
<font color='red'>STM32</font>电机控制同步电角度测试说明
STM32 DMA理解
通道配置过程 1、 在DMA_CPARx寄存器总设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是传输的源或目标 2、 在DMA_CMARx寄存器中设置数据存取器的地址,发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址 3、 在DMA_CMARx寄存器中设置要传输的数据量,在每个数据传输后,这个数值递减。 4、 在DMA_CCRx寄存器的PL位中设置通道的优先级 5、 在DMA_CCRx寄存器中设置数据传输方向、循环模式、外设和寄存器的增量模式、外设和存储器的数据宽度、传输一半产生中断或传输完成产生中断 6、 设置DMA_CCRx寄存器的ENABLE位,启动该通道 一旦启动了DMA通道,它即可
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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