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学习心得体会的更多相关文章
- Salty Fish 结对学习心得体会及创意照 (20165211 20165208)
小组结对学习心得体会及创意照 在阅读了软件工程讲义 3 两人合作(2) 要会做汉堡包和现代软件工程讲义 3 结对编程和两人合作后,加之对于这几周组队学习的感悟,我们对于组队学习的一些感悟和想法如下: ...
- 微信小程序js学习心得体会
微信小程序js学习心得体会 页面控制的bindtap和catchtap 用法,区别 <button id='123' data-userDate='100' bindtap='tabMessag ...
- 关于C#的学习心得体会
1·多看多写 多看网上成熟的demo,养成一个良好的代码编写习惯,将终生受益 2·多编多敲 看了代码,理解demo中的思路,灵活运用到自己的代码中,这样不仅了解了别人的代码,同时还了解了代码的执行过程 ...
- Github学习心得体会
https://github.com/Accredit/TEST 在本学期第一次接触Github,在系统的学习了Github的使用之后,自己对Github有了一个基本的使用了解.在这个过程中,自己也认 ...
- Python学习心得体会总结,不要采坑
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:樱桃小丸子0093 大家要持续关注哦,不定时更新Python知识 ...
- Java --Annotation学习心得体会及笔记
相对于注释这种给程序员看的信息: 注解,就是给程序看的解释性的语言,其作用就相当于配置文件的存在.其存在的意义在于以下几点: 优点: 方便的使程序员看到相关项的关联位置及关联方式等信息. 缺点: 由于 ...
- Struts2框架action层学习心得体会
在struts2框架中,当action处理完之后,就应该向用户返回结果信息,该任务被分为两部分:结果类型和结果本身. 结果类型提供了返回给用户信息类型的实现细节.结果类型通常在Struts2中就已预定 ...
- 我所理解的Vue——学习心得体会1(Vue对象)
初学Vue,总结如下: 1.首先要区分html的dom和js的dom 2.html的dom是View的范畴,js的dom是Model的范畴. 3.vue这库就是创建了伟大的new Vue()对象,把h ...
- 十天来学习java的心得体会
有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...
随机推荐
- npm 设置同时从多个包源加载包的方法
随着前后端分离技术的发展成熟,越来越来越多的后台系统甚至前端系统采用前后端分离方式,在大型前后端分离系统中,前端往往包含大量的第三方js 包的引用,各个第三方包又可能依赖另外一个第三方包,因此急需要一 ...
- Linux-实战常用命令
目录 关机/重启/注销 系统信息和性能查看 磁盘和分区 ⽤户和⽤户组 ⽹络和进程管理 常⻅系统服务命令 ⽂件和⽬录操作 ⽂件查看和处理 打包和解压 RPM包管理命令 YUM包管理命令 DPKG包管理命 ...
- 密码学系列之:bcrypt加密算法详解
目录 简介 bcrypt的工作原理 bcrypt算法实现 bcrypt hash的结构 hash的历史 简介 今天要给大家介绍的一种加密算法叫做bcrypt, bcrypt是由Niels Provos ...
- 聊聊ReentrantLock基于AQS的公平锁和非公平锁的实现区别
ReentrantLock锁的实现是基于AQS实现的,所以先简单说下AQS: AQS是AbstractQueuedSynchronizer缩写,顾名思义:抽象的队列同步器,它是JUC里面许多同步工具类 ...
- 测试开发【提测平台】分享10-Element UI抽屉和表单校验&增改接口合并实现应用管理
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 开篇说个小讨论,一个群里聊天聊到关于更新篇章的长度,是小篇幅多次,还是每次按照一个小完整的功能,我个人的是按照后种来的,主要的思考就是希望 ...
- shell脚本在CentOS7自动更包
手动更包有些繁琐,就想着用脚本自动更包,后来试了下,最后成功啦! 以下是根据实际项目编写的: 操作环境:centos7.0 tomcat版本:7.0.78 以下为项目存放目录如下: updatefil ...
- 『GoLang』错误处理
Go 没有像 Java 和 .NET 那样的 try/catch 异常机制:不能执行抛异常操作.但是有一套 defer-panic-and-recover 机制. Go 的设计者觉得 try/catc ...
- docker run 参数
一.格式 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 二.OPTIONS 参数 简写, 名称参数 默认参数 描述 --add-host 添加自定义主机到 ...
- FastAPI(44)- 操作关系型数据库
ORM FastAPI 可与任何数据库和任何样式的库配合使用并和数据库通信 object-relational mapping 对象关系映射 ORM 具有在代码和数据库表(关系)中的对象之间进行转换( ...
- HCNP Routing&Switching之BGP基础
前文我们了解了路由注入带来的问题以及解决方案相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15362604.html:今天我们来学习下新的路由协议BG ...