STM32的USART1与USART2模块串行数据通讯功能_第1页
STM32的USART1与USART2模块串行数据通讯功能_第2页
STM32的USART1与USART2模块串行数据通讯功能_第3页
STM32的USART1与USART2模块串行数据通讯功能_第4页
STM32的USART1与USART2模块串行数据通讯功能_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页STM32的USART1与USART2模块串行数据通讯功能

(STM32)的USART1与USART2模块支持多种功能,包括IrDA(红外)、SmartCard((IC)卡)等。本文就其串行数据通讯功能进行讲解。

USART功能图:

一般情况串口都采用异步方式通讯,因此本文只讲解异步通讯方式((UART))。异步模式下串口采用Tx、Rx两线,其数据模式如图:

上图为数据长度为8位(包括1位校验)的情形。位数据的意义:

总线空闲:空闲时线上为高电平。

起始位:一位逻辑0(信号)帧,代表传输开始。

数据位:可以为7位或8位数据。低位开始传输

校验位:若启用,使得逻辑1的位数应为偶数(偶校验)或奇数(奇校验)。若不启用,该位由一位数据帧替代(多一位数据)。

停止位:一位或两位逻辑1,标志一个数据字符传输完成。

※一般情况下个人(推荐)①数据长度为9位(有效数据8位+一位校验)或②数据8位(无校验);并尽量采用ascii或16进制编码方式。

UART配置结构体LL_USART_InitTypeDef

typedefstruct{uint32_tBaudRa(te);/*配置波特率;通过LL_USART_SetBaudRate()函数实现@pa(ram)BaudRate=115200,9600.etc*/uint32_tDataWidth;/*配置数据帧数;通过LL_USART_SetDataWidth()函数实现@paramDataWidth=LL_USART_DATAWIDTH_8BLL_USART_DATAWIDTH_9B*/uint32_tStopBits;/*设置停止位数;通过LL_USART_SetStopBitsLength()实现@paramStopBits=LL_USART_STOPBITS_0_50.5stopbitLL_USART_STOPBITS_11stopbitLL_USART_STOPBITS_1_51.5stopbitsLL_USART_STOPBITS_22stopbits*/uint32_tParity;/*设置校验位;通过LL_USART_SetParity()实现@paramParity=LL_USART_PARITY_NONELL_USART_PARITY_EVEN偶校验LL_USART_PARITY_ODD奇校验*/uint32_tTransferDirec(ti)on;/*设置数据收发模式;通过LL_USART_SetTransferDirection()实现@paramTransferDirection=LL_USART_DIRECTION_NONE双向禁用LL_USART_DIRECTION_RX单接收LL_USART_DIRECTION_TX单发送LL_USART_DIRECTION_TX_RX发送/*用于(RS232)的其他硬件引脚配置(CTS、RTS);通过LL_USART_SetHWFlowCtrl()实现@paramHardwareFlowControl=LL_USART_HWCONTROL_NONE无LL_USART_HWCONTROL_RTSRTSLL_USART_HWCONTROL_CTSCTSLL_USART_HWCONTROL_RTS_CTSCTS/*设置过采样。通过LL_USART_SetOverSampling()实现。※不要更改@paramOverSampling=LL_USART_OVERSAMPLING_16LL_USART_OVERSAMPLING_8*/}LL_USART_InitTypeDef;__STATIC_INLINEvoidLL_USART_Enable(USART_TypeDef*USARTx);/*启用USART模块;生成的初始化代码中已调用。@paramUSARTx=USART1USART2.etc*/__STATIC_INLINEvoidLL_USART_Disable(USART_TypeDef*USARTx);/*关闭USART模块*/__STATIC_INLINEuint32_tLL_USART_IsEnabled(USART_TypeDef*USARTx);/*(检测)USART模块是否已开启。@retval=0!0*/※Erro(rS)tatusLL_USART_Init(USART_TypeDef*USARTx,LL_USART_InitTypeDef*USART_InitStruct);/*USART初始化函数;@retval=SUCCESSERROR*/以下函数与状态(寄存器)有关(相关函数只用于指示状态,可以不使用):

请在reset时先将使用到的位清零

※但若使能中断,则中断处理完全必须清零状态位方能产生下一次interrupt

__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_PE(USART_TypeDef*USARTx);/*接收使能时,判断是否发生奇偶性校验错误(检测PE位,当错误时置位,通过软件清零)※当CubeMx设置了奇偶校验时有效@retval=1发生过错误*/__STATIC_INLINEvoidLL_USART_ClearFlag_PE(USART_TypeDef*USARTx);/*清零PE位。*/__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_FE(USART_TypeDef*USARTx);/*判断是否发生帧错误(噪声、断开符)。(检测FE位,当错误时置位,通过软件清零)@retval=1发生过错误*/__STATIC_INLINEvoidLL_USART_ClearFlag_FE(USART_TypeDef*USARTx);/*清零FE位*/__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_NE(USART_TypeDef*USARTx);/*检测噪声错误。(检测NE位,当错误时置位,通过软件清零)*/__STATIC_INLINEvoidLL_USART_ClearFlag_NE(USART_TypeDef*USARTx);/*清零NE位*/__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_(OR)E(USART_TypeDef*USARTx);/*检测过载错误。(读取寄存器中数据尚未被读取时收到新数据)(ORE位)*/__STATIC_INLINEvoidLL_USART_ClearFlag_ORE(USART_TypeDef*USARTx);/*清零ORE位*/__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_IDLE(USART_TypeDef*USARTx);/*检测总线空闲;(IDLE位)*/__STATIC_INLINEvoidLL_USART_ClearFlag_IDLE(USART_TypeDef*USARTx);/*清零IDLE位*/以下为使用频繁的状态寄存器相关函数:

__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_RXNE(USART_TypeDef*USARTx);/*读数据非空;检测读取数据寄存器RDR状态。※读取数据寄存器RDR完全完成一次数据接收时,该位被置位。@retval=1※对读取数据寄存器RDR的读取操作可以(硬件)清零该位。不推荐软件清零*/__STATIC_INLINEvoidLL_USART_ClearFlag_RXNE(USART_TypeDef*USARTx);/*慎用*/__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_TC(USART_TypeDef*USARTx);/*发送完成;读TC当发送完一帧,且发送数据寄存器空时@retval=1需要通过软件清零*/__STATIC_INLINEvoidLL_USART_ClearFlag_TC(USART_TypeDef*USARTx);__STATIC_INLINEuint32_tLL_USART_IsActiveFlag_TXE(USART_TypeDef*USARTx);/*发送数据寄存器空;检测发送数据寄存器TDR状态※当发送数据寄存器TDR数据被送出时,该位被置位。@retval=1※对发送数据寄存器TDR的写入操作可以硬件清零该位。不推荐软件清零*/__STATIC_INLINEvoidLL_USART_ClearFlag_TXE(USART_TypeDef*USARTx);/*慎用*/相关寄存器:

串口中断的使用关于中断源:

IDLE中断:总线空闲中断

RXNE中断:接收缓冲区非空中断※常用

TC中断:发送完成中断

TXE中断:发送缓冲区空中断

PE中断:校验失败中断※常用

※以上中断发生将同时调用同一中断函数voidUSARTx_IRQHandler(void)。可在函数内判断具体的中断源。

配置中断使能:__STATIC_INLINEvoidLL_USART_EnableIT_IDLE(USART_TypeDefUSARTx);/

使能总线空闲中断

*/

__STATIC_INLINEvoidLL_USART_EnableIT_RXNE(USART_TypeDefUSARTx);/

使能RXNE中断

*/

__STATIC_INLINEvoidLL_USART_EnableIT_TC(USART_TypeDefUSARTx);/

使能TC中断

*/

__STATIC_INLINEvoidLL_USART_EnableIT_TXE(USART_TypeDefUSARTx);/

使能TXE中断

*/

__STATIC_INLINEvoidLL_USART_EnableIT_PE(USART_TypeDefUSARTx);/

使能PE中断

*/

**禁用中断**

函数模板为LL_USART_DisableIT_xxx(USART_TypeDef*USARTx);

中断程序编写使能串口中断后,中断调用函数为voidUSART▢_IRQHandler(void)

若启用了多个对应的中断源,则应该在中断函数中

判断中断源,再进行对应操作。

判断原理:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论