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串口学习笔记的更多相关文章

  1. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

  2. stm32串口学习(二)

    今天继续学习stm32的串口编程(利用库函数).上次我们说了串口的发送,这次我们说接收. 接收可以用查询的方法,也可以用中断.显然,工程中多用中断的方式,那么就来看看中断接收. 代码其实很简单,基本的 ...

  3. stm32串口学习(一)

    串口在工作中经常用到,今天我们从零开始学习stm32的串口编程(利用库函数). 先从最简单的情况开始,假设我们要实现的功能就是串口发送一个字节,不考虑接收,也不考虑中断. 那么要解决两个问题: 1 串 ...

  4. cubemx+stm32串口学习汇总资料

    这篇文章是串口中断的文章--STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助. http://www.stmcu.org.cn/module/forum/thread-616613- ...

  5. 正点原子STM32探索者学习笔记1

    1.在STM32的数据手册中,引脚定义中的I/O structure中如果是FT的话,说明该引脚兼容5V: 2.IO口一般都有多个功能,可以通过寄存器的设置来选择其IO口的功能,F1还有重映射的概念, ...

  6. STM32本学习笔记EXTI(外部中断)

    参考资料:STM32数据表.网络信息 =========================================切割线===================================== ...

  7. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  8. STM32学习笔记(四)——串口控制LED(中断方式)

    目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...

  9. STM32学习笔记(二)——串口控制LED

    开发板芯片:STM32F407ZGT6 PA9-USART1_TX,PA10-USART1_RX; PF9-LED0,PF10-LED1; 一.串口1配置过程(不使用串口中断): 1.使能时钟,包括G ...

随机推荐

  1. IDE集成管理Tomcat的基本原理

    知道IDE是怎样控制Tomcat的,对更清晰地理解Java Web的执行过程有帮助.在此以IntelliJ IDEA为例,简要描述一下IDE集成管理Tomcat的基本原理. 首先是两个重要的环境变量: ...

  2. 生产环境部署高可用Rancher

    环境准备: IP hostname role 192.168.200.150 nginx LB 192.168.200.151 master01-151 docker-ce/rke/helm/kube ...

  3. 在windows中给git修改默认的编辑器为sublime

    首先,需要配置sublime的为环境变量,这是为了让git能通过命令调用sublime.也可以写一个.bat脚本.然后,让git调用bat脚本也可以 配置环境变量path到subl.exe的目录 脚本 ...

  4. vue开发流程

    在安装node.js 测试安装  在cmd 下输入node   如查能正确输出命令提示符,表明安装好node 测试安装npm -v   如果能成功出现版本信息表示安装好npm 安装配置 G码云   或 ...

  5. 机器学习——softmax回归

    softmax回归 前面介绍了线性回归模型适用于输出为连续值的情景.在另一类情景中,模型输出可以是一个像图像类别这样的离散值.对于这样的离散值预测问题,我们可以使用诸如 softmax 回归在内的分类 ...

  6. 使用Java api对HBase 2.4.5进行增删改查

    1.运行hbase 2.新建maven项目 2.将hbase-site.xml放在项目的resources文件夹下 3.修改pom.xml文件,引入hbase相关资源 <repositories ...

  7. javascript 求最大前5个数; 对象 深拷贝 deep copy

    * 用数组 function getTopN(a, n) { function _cloneArray(aa) { var n = aa.length, a = new Array(n); for ( ...

  8. 【Vue】淘气三千问之 data为什么是函数而不是对象?这河狸吗

    朋友,当你提出以上问题的时候建议你先去复习下原型链的知识 但是我好人做到底直接就讲了吧,我们先看一下下面的这段代码: function Component () { this.data = this. ...

  9. 鸿蒙内核源码分析(汇编汇总篇) | 所有的汇编代码都在这里 | 百篇博客分析OpenHarmony源码 | v40.03

    百篇博客系列篇.本篇为: v40.xx 鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪 ...

  10. Java实现爬取京东手机数据

    Java实现爬取京东手机数据 最近看了某马的Java爬虫视频,看完后自己上手操作了下,基本达到了爬数据的要求,HTML页面源码也刚好复习了下,之前发布两篇关于简单爬虫的文章,也刚好用得上.项目没什么太 ...