单片机学习小组
登录
直播中
北上北京
8年用户
825经验值
擅长:嵌入式技术
私信
关注
STM32F103串口通信的方式与配置流程简析
开启该帖子的消息推送
单片机
STM32F103
串口通信
cpu与外部设备之间
通信
方式有哪几种呢?分别有何优缺点?
回帖
(1)
李万寿
2022-2-16 10:53:36
1. 串口通信
通信双方(cpu与外部设备)之间通信的两种方式:
并行通信
▶传输原理:数据各个位同时进行传输
▶优点:速度快
▶缺点:占用引脚资源多
串行通信
▶传输原理:数据按位顺序传输
▶优点:占用引脚资源少
▶缺点:速度相对较慢
1.1 串行通信
1.1.1 按数据传送方向分类
▶单工:
数据传输只支持数据在一个方向上传输,如图:
▶半双工:
运行数据在两个方向上传输,但是在同一时刻只允许在一个方向上传输。可理解为:
可改变方向的单工传输。
▶全双工:
允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发生设备和接收设备都有独立的接收和发送能力。
1.1.2 按数据的通信方式分类
**▶同步通信:**带时钟同步信号传输。
即要求接收端时钟频率和发送端时钟频率一致;一旦开始时,发送方要以固定的节奏去发送数据,而接收方要以同样的节奏时刻做好接收数据的准备。
-SPI,IIC通信接口
**▶异步通信:**不带时钟同步信号。
收发双方可以有各自自己的时钟;异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,
接收方是在数据的起始位和停止位的帮助下实现信息同步的
。
-UART(通用异步收发器),单总线
通俗的讲,异步是你扔出去一个内容,对方靠着内容前后他能嗅到的异样在人潮之中发现了它,把这个内容存下来;而同步是对方在时刻等着你发布号令,你告诉对方我要发送了哦,然后双方一拍即合。
1.1.3 常见的串行通信接口
STM32的串口通信接口有:
◉UART:通用异步收发器
◉USART:通用同步异步收发器
有3个USART和2个UART
1.1.4 UART异步通信方式引脚连接方式
-RXD:数据输入引脚。数据接收
-RTD:数据输出引脚。数据发送
①芯片1和芯片2的连接方式:
②芯片与PC机的引脚连接方式:
说明:PC机的串口是DB9,与芯片的串口的TTL电平不兼容,所以需要通过RS232转换器,将芯片串口的TTL电平转换为232电平,因此才可以进行通信。
1.1.5 串口通信过程
数据接收过程:
数据来源于外部设备,一位一位的传输到芯片的数据接收引脚(RXD),传输的速度由波特率来决定。
数据发送过程:
类似于数据接收。
1.1.6 通信过程需定义的参数
①起始位
②数据位(8位或9位)
③奇偶校验位
④停止位(1,15,2位)
⑤波特率设置
例如:
2. 串口通信配置
2.1 常用库函数
2.2 串行通信的配置步骤
串口时钟使能,GPIO时钟使能
RCC_APB2PeriphClockCmd();
GPIO初始化(将GPIO配置为复用功能)
GPIO_Init();
串口参数初始化
USART_Init(); 初始化波特率,数据字长,奇偶校验,使能
使能串口
USART_Cmd();
开启中断并且初始化中断
NVIC_PriorityGroupConfig();中断优先级分组
NVIC_Init(); 初始化优先级
USART_ITConfig();开启串口接收中断
编写handler函数
USARTx_IRQHandler();
串口数据收发
void USART_SendData(); 发送数据
uint16_t USART_ReceiveData(); 接收数据
串口传输状态获取
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TyperDef* USARTx, uint16_t USART_IT);
USART_GetITStatus()和USART_GetFlagStatus()的区别
都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启,也会返回false。
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint32_t USART_IT)
该函数不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。------串口中断函数中使用。
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint32_t USART_FLAG)
该函数只判断标志位。在没有使能相应的中断时,通常使用该函数来判断标志位是否置1。------做串口轮询时使用。
1. 串口通信
通信双方(cpu与外部设备)之间通信的两种方式:
并行通信
▶传输原理:数据各个位同时进行传输
▶优点:速度快
▶缺点:占用引脚资源多
串行通信
▶传输原理:数据按位顺序传输
▶优点:占用引脚资源少
▶缺点:速度相对较慢
1.1 串行通信
1.1.1 按数据传送方向分类
▶单工:
数据传输只支持数据在一个方向上传输,如图:
▶半双工:
运行数据在两个方向上传输,但是在同一时刻只允许在一个方向上传输。可理解为:
可改变方向的单工传输。
▶全双工:
允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发生设备和接收设备都有独立的接收和发送能力。
1.1.2 按数据的通信方式分类
**▶同步通信:**带时钟同步信号传输。
即要求接收端时钟频率和发送端时钟频率一致;一旦开始时,发送方要以固定的节奏去发送数据,而接收方要以同样的节奏时刻做好接收数据的准备。
-SPI,IIC通信接口
**▶异步通信:**不带时钟同步信号。
收发双方可以有各自自己的时钟;异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,
接收方是在数据的起始位和停止位的帮助下实现信息同步的
。
-UART(通用异步收发器),单总线
通俗的讲,异步是你扔出去一个内容,对方靠着内容前后他能嗅到的异样在人潮之中发现了它,把这个内容存下来;而同步是对方在时刻等着你发布号令,你告诉对方我要发送了哦,然后双方一拍即合。
1.1.3 常见的串行通信接口
STM32的串口通信接口有:
◉UART:通用异步收发器
◉USART:通用同步异步收发器
有3个USART和2个UART
1.1.4 UART异步通信方式引脚连接方式
-RXD:数据输入引脚。数据接收
-RTD:数据输出引脚。数据发送
①芯片1和芯片2的连接方式:
②芯片与PC机的引脚连接方式:
说明:PC机的串口是DB9,与芯片的串口的TTL电平不兼容,所以需要通过RS232转换器,将芯片串口的TTL电平转换为232电平,因此才可以进行通信。
1.1.5 串口通信过程
数据接收过程:
数据来源于外部设备,一位一位的传输到芯片的数据接收引脚(RXD),传输的速度由波特率来决定。
数据发送过程:
类似于数据接收。
1.1.6 通信过程需定义的参数
①起始位
②数据位(8位或9位)
③奇偶校验位
④停止位(1,15,2位)
⑤波特率设置
例如:
2. 串口通信配置
2.1 常用库函数
2.2 串行通信的配置步骤
串口时钟使能,GPIO时钟使能
RCC_APB2PeriphClockCmd();
GPIO初始化(将GPIO配置为复用功能)
GPIO_Init();
串口参数初始化
USART_Init(); 初始化波特率,数据字长,奇偶校验,使能
使能串口
USART_Cmd();
开启中断并且初始化中断
NVIC_PriorityGroupConfig();中断优先级分组
NVIC_Init(); 初始化优先级
USART_ITConfig();开启串口接收中断
编写handler函数
USARTx_IRQHandler();
串口数据收发
void USART_SendData(); 发送数据
uint16_t USART_ReceiveData(); 接收数据
串口传输状态获取
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TyperDef* USARTx, uint16_t USART_IT);
USART_GetITStatus()和USART_GetFlagStatus()的区别
都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启,也会返回false。
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint32_t USART_IT)
该函数不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。------串口中断函数中使用。
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint32_t USART_FLAG)
该函数只判断标志位。在没有使能相应的中断时,通常使用该函数来判断标志位是否置1。------做串口轮询时使用。
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
STM32F103
串口通信
如何解决
stm32f103
串口
通信
乱码问题?
2021-12-06
1021
STM32F103
串口
怎么使用?
2021-12-03
856
stm32F103
串口
是怎样使用HC-05蓝牙去设计收发数据的
流程
呢
2021-12-09
1453
STM32f103
串口
的
配置
过程是怎样的?
2021-12-06
576
stm32f103
串口
3程序为什么会频繁进入
串口
接收中断呢
2021-11-16
1383
如何解决
stm32f103
串口
通讯乱码问题?
2021-12-06
1284
Stm32f103
串口
一与
串口
二之间是如何进行
通信
的
2021-12-14
1952
用
STM32F103
串口
输出数据的时好时坏的原因?
2021-12-07
904
探讨一下
STM32F103
中的串行
通信
2021-12-06
1172
如何去实现
stm32f103
串口
一与
串口
二的printf函数输出呢
2021-11-30
1102
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分