历史上的今天
返回首页

历史上的今天

今天是:2024年10月13日(星期日)

正在发生

2021年10月13日 | STM32 串口详细讲解

2021-10-13 来源:eefocus

什么是串口

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); //等待发送结束 

推荐阅读

史海拾趣

FILTRONIC公司的发展小趣事

随着全球对可持续发展的重视日益增强,FILTRONIC也开始关注自身的环保和社会责任问题。公司积极采取措施减少生产过程中的环境污染和资源浪费,推广绿色生产和循环经济理念。同时,FILTRONIC还积极参与社会公益事业和慈善活动,为社区的发展和进步贡献自己的力量。这些努力不仅展现了FILTRONIC作为一家负责任企业的形象,也为公司的长远发展奠定了坚实的基础。

DACHANG公司的发展小趣事

DACHANG公司深知创新是企业发展的根本动力。因此,公司始终将创新作为自己的核心竞争力,不断推出具有创新性的产品和解决方案。无论是产品设计、技术研发还是市场营销,DACHANG公司都积极引入新的理念和模式,为公司的发展注入了源源不断的活力。

Bellin公司的发展小趣事

在竞争激烈的电子行业中,DACHANG公司始终坚持以品质为核心。公司不断引进先进的生产设备和技术,严格把控产品质量,确保每一件产品都能达到客户的期望。正是这种对品质的执着追求,让DACHANG公司的产品在市场上赢得了良好的口碑,公司也逐渐扩大了自己的市场份额。

Holy Stone公司的发展小趣事

近年来,Holy Stone不断加大在技术研发和产品创新方面的投入。公司致力于研发适用于节能产品应用所需的被动元件,帮助客户提升产品能源转换效率。在全球汽车电子化发展的背景下,Holy Stone正式跨入车用电子供应链,以提供优质元件的能力协助汽车电子达到最佳数位化。这些技术创新不仅推动了公司产品的升级换代,还为公司开拓了新的市场领域和增长点。

以上五个故事展示了Holy Stone公司在电子行业中的发展历程和成就,每个故事都体现了公司在不同方面的努力和成果。

EVERLIGHT公司的发展小趣事

在电子产品领域,品质是企业生存和发展的关键。EVERLIGHT一直将品质管理放在首位,建立了严格的质量控制体系。公司从原材料采购到生产过程,再到产品出厂,都进行严格的品质检测和监控,确保每一颗LED都符合高标准的质量要求。这种对品质的坚持让EVERLIGHT在市场上赢得了良好的口碑,也为企业赢得了更多客户的信任。

Electronic Concepts Inc公司的发展小趣事

随着公司规模的不断扩大,ECI越来越重视团队建设。公司高层认识到,一个团结、高效的团队是企业持续发展的关键。在人力资源部经理刘女士的策划下,ECI开展了一系列团队建设活动,如拓展训练、员工分享会等。这些活动不仅增强了员工的凝聚力,也提升了员工的工作效率和创新能力。

问答坊 | AI 解惑

【藏书阁】Altera FPGA/CPLD设计 高级篇

目录 第1章        可编程逻辑设计指导原则        1     1.1        可编程逻辑基本设计原则         ...…

查看全部问答>

找一块参加嵌入式Linux培训班的人(为打9折)

找一块参加嵌入式Linux培训班的人(为打9折) 我之前是做单片机开发和蓝牙产品开发的,现在想报嵌入式Linux培训班, 看到尚观科技的“UEA—嵌入式内核驱动开发班”不错,但是太贵,要14700(提前报名优惠500),2人同时报名优惠到9.5折,3人优惠 ...…

查看全部问答>

请教USB上位机的读写

有一个USB设备,可不知道端口,怎么读和写数据啊。。 用createfile,writefile,readfile的方法 我自己用createfile打开USB设备,USB路径中没有加端口,打开句柄成功,但用该句柄写和读数据失败, 用getlasterror()显示植为6:invalid_handle ...…

查看全部问答>

CCS 3.3 for OMAPL137的奇怪问题

今天写了一段boot的代码,初始化工作状态的各个堆栈之后,建立中断向量表时遇到了如下问题: 代码如下: boot.asm …… B _Int_Init; …… Int_Init.c unsigned int vector[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; void Int_Init( ...…

查看全部问答>

数学与计算机科学QQ群

数学与计算机科学QQ群:17387423 …

查看全部问答>

关于点阵型LCD显示模块和字符型LCD显示模块的问题

究竟这两种显示模块有什么有缺点? 在什么时候应该用什么模块比较好? 价格又有什么区别? …

查看全部问答>

请问STM32的FSMC外接16bitNand时,输出的地址或命令是16bit吗?

                                 请问STM32F103VC的FSMC外接16bitNand时,CPU往Address section或Command section写入的地址或命令应该是16bit还是8 ...…

查看全部问答>

北京某公司有医疗电子项目请北京地区飞思卡尔工程师朋友兼职帮忙

北京某公司有医疗电子项目请北京地区飞思卡尔工程师朋友兼职帮忙,要求:1、必须在北京地区工作,外地朋友无需联系,请谅解;2、一般1至2,3个月左右的项目期间,不能出差;3、每周能保证25~30小时用于兼职开发;4、项目需要的技术方向为: &nb ...…

查看全部问答>

【FPGA(cyclone4)第二期 】 时序与仿真学习-流水线型LUT乘法器

流水操作可以说是Verilog HDL语言的特权,顺序操作如C语言是很难实现流水操作。 我们先假设有一个流水操作模块,它有3个操作步骤,在A进入之际,直到A离开这个模块之后,期间有3个空挡的时间,成为潜伏时间,在这段时间内没有任何字母从这个模块 ...…

查看全部问答>