单片机stm32串口分析
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。
什么是串口
UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器
USART : Universal Synchronous Asynchronous Receiver/Transmitter 通用同步/异步收发器
一种是常用也是最简单的串行数据传输协议。数据线只需要两根就可以实现全双工。
Tx: 发送数据线
Rx: 接收数据线
A B
TX -----------> Rx
Rx <------------Tx
全双工: 两个设备可以同时发送和接收
串行数据: 发送只一根线,一次只能发送一bit. 一bit接着一bit发送和接收。
模块通信: 上位机 下位机
通信一般需要两个设备,我们把这两个设备,人为叫做上位机, 下位机。
上位机: 把处理性能强的机子,上位机。数据大部分处理都在上位机完成。
下位机: 把数据采集的终端,处理性能单一的机子,下位机。
串口只有一根发送数据线,假如 A要发送一个字符数据 10101010 给B
A -------- ---------
-------- ------- ...
高电平周期是多长?即使是不发送数据Tx线上也有一个电平状态,接收方
它怎么知道你是在发送呢?....
UART数据如何传输?
UART protocol 串口协议。
串口发送和接收数据是以帧为单位. Frame
1帧(Frame)= 1 start bit(起始位) + 5-9bits数据位 + 0/1bit 校验位 + stop bits(0.5, 1,1,5,2)
起始位: 一个周期的低电平
数据位: 5-9bits数据位,具体是多少bits,需要双方协商。并且传送是先传送LSB(最低位) … MSB
校验位:
0 bit :没有校验位
1 bit :校验位. “赖子” X
D0 D1 D2 … Dn X
奇校验:要保证传输的1为奇数
D0 D1 D2 … Dn X 要保证这一串数据中1的个数为奇数
1 0 1 0 1 0 1 0 X(1)
1 0 1 0 1 0 1 1 X(0)
偶校验:要保存传输的1为偶数
停止位: 高电平
0.5 个停止位。 半个周期的高电平
1 个停止位
1.5 个停止位
2 个停止位
Baudrate(波特率): 传输速率。
决定 时间周期。
115200 bps: bits per second
物理层标准 the physical layer standards
TTL level UART : TTL电平串口
RS-232:
RS-422:
RS-485:
TTL level UART:
逻辑低电平(0) 0V
逻辑高电平(1) 5V/3.3V
RS-232: 适合较长距离传输
逻辑低电平(0) +3v~+15V
逻辑高电平(1) -3v~-15v
TTL UART RS-232 RS-422 RS-485
电平 1 3.3V/5V 1 -5V ~ -15V +/- 2v +/- 1.5v
0 0V 0 5V ~ +15V
信号 单端信号 单端信号 差分信号 差分信号
传输长度 < 2m <15m <1200m <1200m
不同标准的串口,引脚也不一样。TX/Rx是一定存在的。
TTL
RX
TX
GND
VCC
STM32F4xx 串口控制器
TX
RX
硬件流控:
RTS: Request To Send 请求发送信号
终端告诉对方可以向我传输数据啦。
CTS: Clear To Send 清除发送信号
对方告知终端,我要向你发送数据啦
RTS -------> CTS(对方)
CTS <------- RTS(对方)
标志位:
TXE: Transmit data Register Empty
发送数据寄存器为空。
不代表上一次数据已经发送完成啦,因为数据有可能还在 shifter里面
但是此时您可以向TDR写数据啦。
TC : Transmit Complete
发送完成。
发送移位寄存器中的数据已经发送到Tx引脚上面去了。
RXNE: Read Data register Not Empty
接收数据寄存器不为空。意思是你可以读数据啦。
STM32F4xx串口代码流程
(1) GPIO口配置
串口的TX/RX 引脚是由GPIO口来复用的。
a. 使能GPIO分组的时钟
RCC_AHB1PeriphClockCmd
b. 配置GPIO口的功能 GPIO_Init
c. 选择具体的复用功能
GPIO_PinAFConfig
(2) usart配置
a. 使能usart时钟

b. USART_Init
USART_Init(USART_TypeDef * USARTx, USART_InitTypeDef * USART_InitStruct);
typedef struct
{
uint32_t USART_BaudRate; // 波特率
uint16_t USART_WordLength; //传输字长 ,如下两个任选其一:
USART_WordLength_8b
USART_WordLength_9b
在STM32中:传输字长=数据位数+检验位数
uint16_t USART_StopBits; //停止位数,如下 :
USART_StopBits_1 1bit停止位
USART_StopBits_1_5 1.5bit停止位
USART_StopBits_2 2 bits停止位
USART_StopBits_0_5 0.5bit停止位
uint16_t USART_Parity; //校验方式,如下:
USART_Parity_No 无校验
USART_Parity_Odd 奇校验
USART_Parity_Even 偶校验
uint16_t USART_Mode; //串口模式, 如下:可以组合
USART_Mode_Tx 发送模式
USART_Mode_Rx 接收模式
USART_Mode_Tx | USART_Mode_Rx 发送和接收模式
uint16_t USART_HardwareFlowControl; //硬件流控
USART_HardwareFlowControl_None 无硬件流控
USART_HardwareFlowControl_RTS RTS 请求发送。你可以接收对方的数据。
USART_HardwareFlowControl_CTS CTS 清除发送,你可以发数据给对方。
USART_HardwareFlowControl_RTS_CTS RTS_CTS 发送和接收都用流控
} USART_InitTypeDef;

(3) 中断的配置
USART_ITConfig <- 配置串品的中断
在STM32中一个USART只对应一个中断通道,但是引起串口中断的
事件有很多,比如:
TXE -> 发送寄存器为空,可以引起串口中断
TC -> 发送完成,可以引起串口中断
RXNE -> 接收寄存器不为空,可以引起串口中断
……
只不过,这些事件需要"中断控制位使能"
USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);
USART_ITConfig就是用来把一个串口的XX事件,配置成是否引起串口中断的
在串口中断函数里面,就需要判断是哪个串口事件,引起了中断!!!
NVIC_Init()
(4) 使能串口
USART_Cmd
接收(中断函数)

USART1_IRQHanlder()
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
//有数据可读啦
data = USART_ReceiveData(USART1); //读取接收到的数据
}
//清除USART1的中断标志
USART_GetITStatus
}

USART_GetITStatus用来获取串口的xx事件标志位
发送数据
USART_SendData(USART1, 0x55);
while (USART_GetFlagStatus(USRAT1, USART_FLAG_TXE) == RESET); //等待发送结束
stm32视频学习资料
(stm32 USART串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051
PWM脉宽调制技术
http://www.makeru.com.cn/live/4034_2146.html?s=45051
基于STM32讲解串口操作
http://www.makeru.com.cn/live/1758_490.html?s=45051
通过Z-stack协议栈实现串口透传
http://www.makeru.com.cn/live/1758_330.html?s=45051
(stm32直流电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=45051
单片机stm32串口分析的更多相关文章
- 单片机STM32开发中常用库函数分析
1.GPIO初始化函数 用法: voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数 GPI ...
- STM32串口中断的一些资料
在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理 ...
- 自制单片机之十七……PC与单片机RS-232串口的通讯和控制
这次我们来试着一步步的去掌握PC与单片机通过RS-232进行通讯和控制. 先说说我硬件的情况.我用的PC是个二手的IBM240小本本,十寸屏,赛扬400,机子很老了.但也有它的优点:1.串口,并口,P ...
- STM32串口打印输出乱码的解决办法
前言 最近在试用uFUN开发板,下载配套的Demo程序,串口数据输出正常,当使用另一个模板工程,调用串口printf调试功能时,输出的却是乱码,最后发现是外部晶振频率不一样.很多STM32开发板都是使 ...
- cubemx+stm32串口学习汇总资料
这篇文章是串口中断的文章--STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助. http://www.stmcu.org.cn/module/forum/thread-616613- ...
- stm32串口收发导致的死机
stm32串口收发导致的死机 很久以前有偶尔遇到过串口死机的情况,那是当时的我写出来的代码自己都觉得有问题,也就没注意.用了stm32做项目以后也就没遇到过了,今天做了个高压测试,每5ms定时发送一次 ...
- stm32串口之存储与解析
最近在做一个小项目,需要用stm32串口接受Arduino发送的一个不定长的数据,并且解析数据,执行其中的命令:秉着不在中断中做过多任务的思想,我们将从串口中接受到的字符放到一个数组当中. 定义数组 ...
- STM32 串口DMA方式接收(转)
STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...
- STM32串口寄存器操作(转)
源:STM32串口寄存器操作 //USART.C /************************************************************************** ...
随机推荐
- MySQL数据库初体验
一.数据库的基本概念1.数据(Data) 描述事物的符号记录 包括数字,文字,图形,图像,声音,档案记录等 以"记录"形式按统一的格式进行存储 2.表 将不同的记录组织在一起 用来 ...
- undefined和null
undefined和null undefined的情景: 声明变量为赋值 var name; console.og(name); //undefined 访问对象上不存在的属性 var obj={} ...
- mysql5.7执行sql语句提示Expression #1 of ORDER BY clause is not in GROUP BY
mysql 新版本出现group by 语句不兼容问题 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause ...
- 不使用插件的ajax 上传文件
参考博主资料 我没试 我使用了带js的插件的方式 https://www.cnblogs.com/pegasus827/p/10941775.html 第一步:html form表单代码 第二步 ...
- linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql解决方案
在Linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql,提示如下: 而导致连接错误的原因是MYSQL没有开启远程登录权限. 解决方案: 在mysql命令中执 ...
- sunny 内网穿透使用。
启动方法:
- Expression Tree 遍历集合
场景 从接口返回的数据是集合,却是 object 类型的.这个时候需要遍历这个集合.现提供两种方法. 方法一: 因为集合是可枚举的,所以可以尝试转为 IEnumerable 类型,然后遍历即可. st ...
- P4389-付公主的背包【生成函数,多项式exp】
正题 题目链接:https://www.luogu.com.cn/problem/P4389 题目大意 \(n\)种物品,第\(i\)种大小为\(v_i\),数量无限.对于每个\(s\in[1,m]\ ...
- 踩坑系列《四》a标签的href属性拼接问题
如上所示,无法直接在 html里面的 a 标签的href属性传递参数时,只需要在 JS 中获取对应 a 标签的id,再通过 attr 方法抓到 href,进行字符串拼接即可
- 数值计算:粒子群优化算法(PSO)
PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...