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. linux 档案权限篇之一

    一:预备知识 1.在linux中,任何一个档案都具有.所有者.用户组.其他用户这三种身份的个别权限. 1.所有者:即档案拥有者,由于Linux是多人多任务的系统,因此可能常常会有很多人同时使用这部主机 ...

  2. C# Collection

    数组与集合不同的适用范围: 数组:数组最适用于创建和使用固定数量的强类型化对象. 集合:集合提供更灵活的方式来使用对象组. 与数组不同,你使用的对象组随着应用程序更改的需要动态地放大和缩小. 对于某些 ...

  3. git换行符自动转换导致整个文件被修改的解决方案

    不少开发者可能遇到过这个问题:从git上拉取服务端代码,然后只修改了一处地方,准备提交时,用diff软件查看,却发现整个文件都被修改了.这是git自动转换换行符导致的问题. 原因 不同操作系统使用的换 ...

  4. Zookeeper分布式安装部署

    1. 解压安装 1.1 解压Zookeeper安装包到/opt/module/目录下 tar -zxvf /opt/software/apache-zookeeper-3.6.2-bin.tar.gz ...

  5. Java面向对象系列(6)- 封装详解

    封装 该露的露,该藏得藏 我们程序设计要追求"高内聚,低耦合".高内聚就是类得内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量得方法给外部使用 封装(数据得隐藏) 通常 ...

  6. [C语言]学习之路

    实例:C语言编程题 求100到300之间所有素数 #include <stdio.h> int main(void) { int i,j; for(i = 100;i <= 300; ...

  7. 位运算符的用法 ----非(!),与(&),或(|),异或(^)

    位运算符的用法 ----非(!),与(&),或(|),异或(^) 三种运算符均针对二进制 非!:是一元运算符.对一个二进制的整数按位取反,输入0则输出1,输入1则输出0. 例: 0100 -( ...

  8. sql提示1055 不让你group by

    是不是突然写好的sql语句 部署上去就 Expression #2 of SELECT list is not in GROUP BY clause and containsnonaggregated ...

  9. 基于linux在线预览

    1.Libreoffice安装 在服务器上安装Libreoffice,在这里就不多说了, import os import sys import subprocess import re def co ...

  10. 前段之jQuery

    一.jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Ajax交 ...