历史上的今天
返回首页

历史上的今天

今天是:2025年04月12日(星期六)

2019年04月12日 | STM32 串口详细讲解

2019-04-12 来源: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); //等待发送结束 


推荐阅读

史海拾趣

DACHANG公司的发展小趣事

随着公司实力的不断增强,DACHANG公司开始积极拓展国际市场。公司参加了多个国际电子展览会,与国际同行进行了广泛的交流与合作。同时,DACHANG公司还积极寻求与国际知名企业的合作机会,不断提升自己在全球电子产业链中的地位和影响力。

Charcroft Electronics Ltd公司的发展小趣事

Charcroft Electronics Ltd公司深知人才是企业发展的核心力量。因此,公司注重人才培养和团队建设,通过内部培训、外部引进等方式,打造了一支高素质、专业化的员工队伍。这支队伍不仅具备丰富的行业经验和专业技能,还具备创新意识和团队协作精神,为公司的持续发展提供了有力的人才保障。

HAHN - Elektrobau GmbH & Co KG公司的发展小趣事

高通公司在追求技术创新的同时,也积极履行企业社会责任。公司发布了《2023高通中国企业责任报告》,详细介绍了高通如何通过赋能数字化转型、负责任地经营以及可持续地运营等战略重点领域,推动社会公平发展。高通与中国乡村发展基金会、中国红十字基金会等多个机构合作,开展智慧农业、基层医务工作者培训等项目,助力乡村振兴和医疗卫生事业发展。此外,高通还致力于STEM教育,通过合作项目为下一代创新者提供技能和知识支持。这些举措不仅体现了高通的社会责任感,也为其在电子行业中的长远发展奠定了良好的社会基础。

Elcos AG公司的发展小趣事

随着全球对环保和可持续发展的重视,Elcos AG也开始注重自身的环保责任和可持续发展战略。公司采用环保材料和生产工艺,减少了对环境的污染和资源的浪费。同时,Elcos AG还积极参与社会公益事业和环保活动,通过捐款、赞助和志愿服务等方式回馈社会。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长期发展奠定了坚实的基础。

Cincon公司的发展小趣事

1991年,Cincon公司在台湾成立,标志着其在电子行业的起步。公司创立之初,便在台北设立了销售办事处,同时在彰化建立了工厂,专注于电源产品的设计与生产。创立的第二年,Cincon便开始设计和制造DC/DC转换器和电池充电器,这为其在电源行业奠定了坚实的基础。随着市场需求的不断增长,公司于1997年开始涉足交流/直流开关电源的设计与制造,进一步扩大了产品线。

Honeywell公司的发展小趣事

背景:近年来,随着全球对可持续发展和数字化转型的重视,霍尼韦尔积极调整战略方向。

发展:公司加大了在可持续技术和数字化转型领域的投入,推出了一系列创新的产品和解决方案。例如,在能源转型领域,霍尼韦尔与多家中国合作伙伴共同推动可持续航空燃料生产基地的建设;在智慧建筑领域,与腾讯云合作打造联合解决方案等。

关键事件:这些举措不仅体现了霍尼韦尔对可持续发展的承诺和责任担当,也展示了公司在数字化转型方面的前瞻性和创新能力。同时,这些合作也进一步巩固了霍尼韦尔在全球电子行业的领先地位。

问答坊 | AI 解惑

请问谁有labview8.2的安装软件啊?

如题,请问谁有labview8.2的安装软件啊?我刚开始学,网上看到的下载网址都打不开,谁有的给我共享一下,谢谢。…

查看全部问答>

大家有在NI买产品的经验吗??

我们要买一款数据采集卡,经查NI的做的好像挺多的,不过不知道怎么买。比如说,有没有中国代理?买产品还要买正版软件吗??好像正版软件要很多钱的 呵呵 大家给指导一下吧…

查看全部问答>

招募精英

本公司现招募以下职位,有意者请将个人简历发往 qianleicherry@hotmail.com 软件工程师 职位描述: 1、负责IPTV/DVB驱动软件开发 2、负责IPTV/DVB相关中间件集成 3、负责IPTV/DVB样机调试和测试 4、负责软件相关文档编写 职位要求: 1、本 ...…

查看全部问答>

求 Windows Driver Model 的源代码

Windows Driver Model 的源代码 站内有这个资源,但是我这边下不动,谁发一份到我的邮箱ch609@163.com,谢谢先 …

查看全部问答>

sd驱动问题求解~

我的系统和平台是wince5.0 + 2416 问题:在进入wince的设备里面后,插入sd卡,系统下很快就会显示出sd的盘符,sd的访问也很正常,可是在拔除sd卡的时候,sd卡的盘符要5~6秒才能消失,不知道这个是什么原因。 希望有经验的xdjm们赐教!…

查看全部问答>

空调语音解决方案

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 空调语音解决方案 空调是我们每个人都不可缺少的生活用品,在竞争激烈的今天,怎样做出一款更适应市场的好空调,则是每个厂商苦恼的问题,更新和创新是一个企业发展和生存的源泉动力,市面 ...…

查看全部问答>

stm32f103+ucosII2.88运行一段时间后死机

最近在stm32f103VE上跑官方移植的ucosII2.88 ,刚开始运行的时候,系统一切正常,各个任务正常调度,大概可以持续5~7小时。但是>14小时连续运行之后,系统就不正常了,现象是:各个中断可以正常进入(通过观察led),但是有些任务已经不运行了 ...…

查看全部问答>

107USB OTG硬件问题

我的107 USB OTG自己开发的,请问各位硬件电路需要什么特别注意的地方吗?板子已经开回来了,USB的V_Bus供电没问题,但是D+,D-,还有ID上面的电压依次是3.7V,1.7V,1.7V,理论上正确的电压好像不是这样的,我打了其他正常的电压,D+,D-,ID上的电 ...…

查看全部问答>

《MSP430系列常用模块应用原理》 入门不难

买板送的资料,里面详细介绍寄存器的每位,类似于51,avr和stm32的资料,配合149的中文头文件看,入门不难。请看下面几行,有个印象再看配合看电子书和149的中文头文件。   int main(void) {       WDTCTL = WDT ...…

查看全部问答>

请教各位一个问题,关于放大电路的Q点

请看图片,我问的问题跟差分放大没什么关系了,我是看到这里才想到了这个问题。主要问题是关于戴维南定理等效出来的Vcc’和Rc’。1.红色箭头是我标注的电流方向。如果等效电阻是Rc和RL并联的话,那么电流只能这么流吧,可是这样不合理啊,RL上的电 ...…

查看全部问答>