STM32 通用同步异步收发器 USART
STM32考试习题及答案

STM32考试习题及答案一、填空题1.当STM32的I/O端口配置为输入时, 输出缓冲器被禁止,施密特触发输入被激活.根据输入配置(上拉,下拉或浮动)的不同,该引脚的弱上拉和下拉电阻被连接。
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。
2.STM32的所有端口都有外部中断能力。
当使用外部中断线时,相应的引脚必须配置成输入模式。
3.STM32具有单独的位设置或位清除能力。
这是通过GPIOx_BSRR 和GPIOx_BRR 寄存器来实现的。
4.ST公司还提供了完善的通用IO接口库函数,其位于stm32f10x_gpio.c ,对应的头文件为stm32f10x_gpio。
h 。
5.为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上.这时,复用功能不再映射到它们原始分配的引脚上。
在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR) 来实现引脚的重新映射。
二、选择题1.在APB2上的I/O脚的翻转速度为(A )。
A.18MHz B.50MHzC.36MHz D.72MHz4.当输出模式位MODE[1:0]=“10”时,最大输出速度为(B ).A.10MHz B.2MHzC.50MHz D.72MHz三、简答题1.简述不同复用功能的重映射.答:为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。
这时,复用功能不再映射到它们原始分配的引脚上.在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)来实现引脚的重新映射.各个复用功能的重映射可以参阅正文的介绍,由于内容比较多,正文介绍非常详细,这里省略。
2.简述STM32的GPIO的一些主要特点(至少5个)。
答:主要特点如下:❑通用I/O,可以作为输出、输入等功能。
❑单独的位设置或位清除.❑外部中断/唤醒线.❑复用功能(AF)和重映射。
STM32考试习题及答案

STM32考试习题及答案一、填空题1.当STM32的I/O端口配置为输入时,输出缓冲器被禁止,施密特触发输入被激活。
根据输入配置(上拉,下拉或浮动)的不同,该引脚的弱上拉和下拉电阻被连接。
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。
2.STM32的所有端口都有外部中断能力。
当使用外部中断线时,相应的引脚必须配置成输入模式。
3.STM32具有单独的位设置或位清除能力。
这是通过GPIOx_BSRR 和GPIOx_BRR寄存器来实现的。
4.ST公司还提供了完善的通用IO接口库函数,其位于stm32f10x_gpio.c,对应的头文件为stm32f10x_gpio.h。
5.为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。
这时,复用功能不再映射到它们原始分配的引脚上。
在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)来实现引脚的重新映射。
二、选择题1.在APB2上的I/O脚的翻转速度为(A)。
A.18MHz B.50MHzC.36MHz D.72MHz4.当输出模式位MODE[1:0]=“10”时,最大输出速度为(B)。
A.10MHz B.2MHzC.50MHz D.72MHz三、简答题1.简述不同复用功能的重映射。
答:为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。
这时,复用功能不再映射到它们原始分配的引脚上。
在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)来实现引脚的重新映射。
各个复用功能的重映射可以参阅正文的介绍,由于内容比较多,正文介绍非常详细,这里省略。
2.简述STM32的GPIO的一些主要特点(至少5个)。
答:主要特点如下:?通用I/O,可以作为输出、输入等功能。
?单独的位设置或位清除。
?外部中断/唤醒线。
?复用功能(AF)和重映射。
?GPIO锁定机制。
stm32 usart 默认电平

stm32 usart 默认电平STM32是一款广泛应用于嵌入式系统开发的微控制器系列,而USART(通用同步/异步收发传输器)则是STM32中常用的通信接口之一。
在使用STM32的USART模块进行数据传输时,了解和正确设置默认电平是非常重要的。
1. 什么是默认电平默认电平是指在特定的时间段内,信号线上未被任何外部因素驱动时,信号线上的电平状态。
在串行通信中,通常使用高电平(通常为逻辑1)和低电平(通常为逻辑0)来表示数据和信号的传输状态。
2. USART模块的默认电平在STM32的USART模块中,默认电平与USART的通信模式密切相关。
根据USART的工作模式和配置,以下是不同情况下的默认电平设置:- 单工模式(单向传输):在没有数据传输的情况下,默认电平为高电平。
- 半双工模式(双向交替传输):在没有数据传输的情况下,默认电平为高电平。
- 全双工模式(同时双向传输):- 当USART处于空闲状态时(即无数据传输),默认电平为高电平。
- 当USART接收数据时,RX引脚处于低电平,默认电平为低电平。
- 当USART发送数据时,TX引脚处于低电平,默认电平为低电平。
需要注意的是,这些默认电平设定是STM32 USART模块的硬件特性,开发者在使用时应当根据具体的应用场景和需求进行相应的配置。
3. 默认电平的配置为了正确使用STM32的USART模块并设置默认电平,首先需要配置USART模块的相关寄存器。
以下是基本的配置步骤:- 选择合适的USART模块和对应的引脚。
- 配置USART的工作模式(单工、半双工、全双工)。
- 根据需要设置USART的通信参数,如波特率、数据位数、校验位和停止位等。
- 根据通信模式,设置USART的默认电平:- 如果需要单工或半双工模式,只需将对应的发送引脚设置为输出模式,输出高电平即可。
- 如果需要全双工模式,可以通过相应的寄存器设置接收引脚和发送引脚的默认电平。
stm32串口烧写程序的原理

stm32串口烧写程序的原理STM32是一种由意法半导体(STMicroelectronics)开发的32位微控制器系列。
它提供了丰富的外设接口和强大的处理能力,广泛应用于嵌入式系统中。
其中,串口烧写是一种常用的方式,用于在开发过程中向STM32芯片加载程序。
本文将介绍STM32串口烧写的原理。
串口烧写是通过串行通信接口将程序文件传输到STM32芯片的过程。
在STM32中,常用的串口通信接口为USART(通用同步/异步收发器)或UART(通用异步收发器)。
这两种接口通过串口与计算机连接,可进行数据的收发。
为了进行程序烧写,首先需要在计算机上安装相应的烧写软件,如ST-Link Utility或者STM32CubeProgrammer。
这些软件提供了用于将程序文件上传到芯片的功能,它们通过USB端口与ST-Link或者JTAG进行连接。
烧写过程中,需要将STM32芯片连接到计算机。
一种常见的连接方法是通过SWD(串行线路调试)接口连接,该接口位于STM32芯片上,并由4条线组成,包括SWDIO(串行数据线)、SWCLK(串行时钟线)、GND(地线)和VCC(供电线)。
在连接完毕后,烧写软件将打开与STM32芯片的通信通道。
软件首先对STM32芯片进行复位操作,然后通过串口发送烧写指令和数据。
烧写指令包含了一系列指示芯片进行烧写操作的命令,如擦除芯片、写入数据等。
STM32芯片接收到烧写指令后,会执行相应的操作。
首先,芯片会根据指令对内部存储器进行擦除操作,将原有的程序数据清空。
接下来,芯片会按照指令中的地址顺序,逐个写入新的程序数据。
写入完成后,芯片会进行校验操作,以确保写入的数据与发送的数据一致。
完成校验后,芯片将发送烧写结束的响应信号给烧写软件,表示完成烧写操作。
此时,软件会关闭与STM32芯片的通信通道,烧写过程结束。
总的来说,STM32串口烧写的过程是通过将程序文件通过串口发送给芯片,芯片按照指令进行擦除和写入操作,最后进行校验,完成烧写过程。
STM32F030_USART详细配置说明_stm32f030串口

STM32F030_USART详细配置说明_stm32f030串口串口是我们在编程时最经常用的问题,通常用它来发送和接收数据,同时它还有另外一个功能——检测程序是否正确,stm32f030系类单片机自然而然少不了串口,本文主要介绍STM32F030_USART的几个常用的简单应用和它的功能配置。
1、概述通用同步异步收发器(USART)提供了一个灵活的方式,使 MCU 可以与外部设备通过工业标准NRZ 的形式实现全双工异步串行数据通讯。
USART 可以使用分数波特率发生器,提供了超宽的波特率设置范围。
可以使用DMA 实现多缓冲区设置,从而能够支持高速数据通讯•全双工,异步通讯•可配置的 16 倍或 8 倍过采样方法提供速度和时钟容忍度间的灵活选择•小数波特率发生器•自动波特率检测•单线半双工通讯•停止位个数可设置 - 支持 1 个或 2 个停止位•十四个中断源和中断标志•- CTS 切换•- LIN 断开检测•-发送数据寄存器空•-发送完成•-接收数据寄存器满•-检测到线路空闲•-溢出错误•-帧错误•-噪声错误•-奇偶错误•-地址 / 字符匹配•-接收超时中断•-块结束中断•-从 Stop 模式唤醒•校验控制:•-发送奇偶校验位•-接收数据的奇偶检查2、准备工作1.认真阅读STM32F030x数据手册2.了解USART的运行原理3.查看STM32F030开发板原理图和封装图4.电脑装有keil等编译软件3、寄存器说明控制寄存器 1(USART_CR1)控制寄存器 2(USART_CR2)控制寄存器 3(USART_CR3)波特率寄存器( USART_BRR)保护时间和预分频器寄存器( USART_GTPR)中断和状态寄存器(USART_ISR)中断标志清除寄存器( USART_ICR)数据接收寄存器( USART_RDR)数据发送寄存器( USART_TDR)4、USART配置ART原理图ART代码分析3.①USART初始化void Usart_Init(uint32_t BaudRate){ USART_InitTypeDef USART_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); /* PA9-TX-推挽复用PA10-RX-浮空输入/上拉输入*/ GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1); GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStruct); /*USART基本配置*/ USART_ART_BaudRate=BaudRate;USART_ART_HardwareFlowControl=USART_Hardwa reFlowControl_None;USART_ART_Mode=USART_Mode_Tx|USART_Mode_ Rx; USART_ART_Parity=USART_Parity_No; USART_ART_StopBits=USART_StopBits_1;USART_ART_WordLength=USART_WordLength_8b; USART_Init(USART1,&USART_InitStruct); /*使能接收中断*/ NVIC_Config(USART1_IRQn); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1,ENABLE);}②USART发送数据void USART1_SendBuf(uint8_t *pBuf, uint32_tu32Len){ while(u32Len--) { /*判断发送缓冲区是否为空*/ while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE)); USART_SendData(USART1,*pBuf++); }}③USART接收数据uint8_t USART1_ReciverBuf(void){ /*判断接收缓冲区是否为非空*/ while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)); return USART_ReceiveData(USART1);}3 . printf函数重映射int fputc(int ch, FILE *f){ USART_SendData(USART1,(uint8_t)ch); while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE)); return (ch);}5、总结在进行USART的printf函数的使用时,一定要记得将微库打开:点击keil工具栏的小魔术棒符号,进入Target配置,勾选Use MicroLib。
stm32 uart dma 接收原理 -回复

stm32 uart dma 接收原理-回复STM32 UART DMA 接收原理一、引言串行通信是一种常用的数据传输方式,UART(通用异步收发传输器)是其中一种常见的串行通信接口。
对于STM32微控制器,它支持使用DMA (直接内存访问)来处理UART的接收和发送操作。
本文将重点讨论STM32 UART DMA 接收的原理,详细介绍DMA的工作原理以及如何在STM32中配置和使用DMA来实现UART的接收功能。
二、DMA 简介DMA是一种由硬件支持的直接内存访问技术,它可以在不依赖CPU的情况下,实现外设和内存之间的数据传输。
在传统的方式中,CPU需要花费大量的时间和资源来处理数据的传输,而DMA可以减轻CPU的负担,提高数据传输的效率。
对于STM32微控制器,它提供了多个DMA通道,可以与不同的外设进行数据传输。
三、UART 接收过程UART的接收过程通常分为两步:接收数据和处理数据。
1. 接收数据:UART接收数据的原理是通过接收数据寄存器(Receive Data Register)将接收到的数据保存在寄存器中,然后CPU读取该寄存器以获得接收到的数据。
在传统的方式中,CPU需要不断地查询是否有接收到的数据,并进行读取操作。
但这种方式会浪费CPU的时间和资源。
2. 处理数据:接收到的数据通常需要进行处理,例如判断数据的格式是否正确、提取有效的数据等。
这些处理过程需要CPU的参与,因此如果CPU在不断查询接收数据的过程中被占用,那么处理数据的效率将会大大降低。
四、DMA 接收原理DMA 可以在不依赖CPU的情况下自动执行数据传输操作,因此可以大大提高数据传输的效率。
对于UART的接收过程,STM32提供了DMA 来进行数据的接收,并提供了相应的寄存器和寄存器位来进行配置。
1. 配置UART DMA 模式:首先需要配置UART和DMA的工作模式。
通过UART的控制寄存器和DMA的配置寄存器,可以设置相关的模式。
STM32F4HAL库UART相关操作API介绍

STM32F4HAL库UART相关操作API介绍STM32F4 HAL库 UART相关操作API介绍本⽂绝⼤部分翻译⾃ST的官⽅⽤户⼿册Description of STM32F4 HAL and LL driversUSART 与 UART 的区别在于有没有同步通信的功能。
USART: 通⽤同步异步收发器 ; UART: 通⽤异步收发器。
当进⾏异步通信时,这两者是没有区别的。
这个同步通信功能可以把USART当做SPI来⽤,⽐如⽤USART来驱动SPI设备。
同步(阻塞模式)是指:发送⽅发出数据后,等接收⽅发回响应以后才发下⼀个数据包的通讯⽅式。
异步(⾮阻塞模式)是指:发送⽅发出数据后,不等接收⽅发回响应,接着发送下个数据包的通讯⽅式。
其中SPI IIC为同步通信 UART为异步通信, usart为同步&异步通信。
⽬录硬件相关知识STM32F427/STM32F429共有4个USART与4个UART,如下表序号U(S)ART_RX引脚U(S)ART_TX引脚U(S)ART_CK引脚USART_ CTS引脚USART_ RTS引脚USART1PA10PA9PA8PA11PA12USART2PA3/PD6PA2/PD5PA4/PD7PA0/PD3PA1/PD4USART3PB11/PC11/PD9PB10/PC10/PD8PB12/PC12/PD10PB13/PD11PB14/PD12UART4PA1/PC11PA0/PC10UART5PD2PC12USART6PC7/PG9PC6/PG14PC8/PG7PG13/PG15PG8/PG12UART7PE7PE8UART8PE0PE1RT: Receive Data 接收数据TX: Transmit Data 发送数据CK: Clock (同步)时钟硬件流控制RTS: Request To Send 请求发送数据CTS: Clear To Send 允许发送数据相关结构体变量USRT_InitTypeDef该结构体定义了⽤于初始化UART的⼀些相关参数typedef struct{uint32_t BaudRate; //波特率uint32_t WordLength;//字长取值参考 UART_Word_Length 宏定义uint32_t StopBits; //停⽌位取值参考 UART_Stop_Bits 宏定义uint32_t Parity; //奇偶校验模式取值参考 UART_Parity 宏定义uint32_t Mode; //收发模式取值参考 UART_Mode 宏定义uint32_t HwFlowCtl; //是否打开硬件流控制取值参考 UART_Hardware_Flow_Control 宏定义uint32_t OverSampling;//是否打开过采样模式取值参考 UART_Over_Sampling 宏定义 .}UART_InitTypeDef;UART_HandleTypeDef该结构体定义的则是UART句柄(个⼈理解为⽤于操作UART)的⼀些参数该结构体中只有*Instance与Init两个成员变量是需要我们配置的typedef struct{USART_TypeDef *Instance; /*!< UART registers base address */// UART/USART相关寄存器的地址已经在HAL库中定义完参数为 U(S)ARTx x=1 (8)UART_InitTypeDef Init; /*!< UART communication parameters */// UART初始化参数结构体uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */// 缓存指针uint16_t TxXferSize; /*!< UART Tx Transfer size */// 缓存指针指向的数据的⼤⼩(字节)uint16_t TxXferCount; /*!< UART Tx Transfer Counter */// 缓存指针指向的数据的的数量(字节)uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */uint16_t RxXferSize; /*!< UART Rx Transfer size */uint16_t RxXferCount; /*!< UART Rx Transfer Counter */DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters *// DMA句柄DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */HAL_LockTypeDef Lock; /*!< Locking object */// 锁对象__IO HAL_UART_StateTypeDef State; /*!< UART communication state */// UART通信状态__IO uint32_t ErrorCode; /*!< UART Error code */// 错误码}UART_HandleTypeDef;HAL Locked The HAL lock is used by all HAL APIs to prevent accessing by accident shared resources.HAL库中的API通过该参数来判断某个API是否正在执⾏,如__HAL_LOCK(__HANDLE__)与__HAL_UNLOCK(__HANDLE__)所实现的typedef enum {HAL_UNLOCKED = 0x00, /*!<Resources unlocked*/HAL_LOCKED = 0x01 /*!< Resources locked */}HAL_LockTypeDef;#define __HAL_LOCK(__HANDLE__) \do{ \if((__HANDLE__)->Lock == HAL_LOCKED) \{ \return HAL_BUSY; \} \else \{ \(__HANDLE__)->Lock = HAL_LOCKED; \} \}while (0)#define __HAL_UNLOCK(__HANDLE__) \do{ \(__HANDLE__)->Lock = HAL_UNLOCKED; \}while (0)使⽤⽅法1. 声明UART_HandleTyperDef句柄结构体2. 使⽤HAL_UART_MspInit()初始化 UART 的底层资源1. 打开 USARTx 接⼝的时钟2. 配置 UART 引脚1. 开启 GPIO 时钟2. 配置引脚模式为复⽤上拉3. 如果使⽤了中断需要配合 NVIC 中断优先级1. 配置优先级2. 启动 NVIC USART IRQ 句柄4. 如果使⽤了DMA处理需要配置DMA1. 为输⼊流或输出流声明DMA句柄2. 开启DMAx接⼝的时钟3. 配置DMA句柄结构体的参数4. 配置DMA的输⼊输出流5. 将DMA句柄与UART DMA Tx/Rx句柄关联6. 配置并启⽤ NVIC3. 配置 UART 通信的上层参数,包括波特率、字长、停⽌位等4. 根据不同的⼯作模式调⽤不同的初始化函数HAL_UART_Init()异步通信HAL_HalfDuplex_Init()半双⼯通信HAL_LIN_Init() LIN总线通信HAL_MultiProcessor_Init()多处理器通信相关函数API介绍初始化类函数1. HAL_StatusTypeDef HAL_UART_Init (UART_HandleTypeDef * huart)2. HAL_StatusTypeDef HAL_HalfDuplex_Init (UART_HandleTypeDef * huart)3. HAL_StatusTypeDef HAL_LIN_Init (UART_HandleTypeDef * huart, uint32_t BreakDetectLength)4. HAL_StatusTypeDef HAL_MultiProcessor_Init (UART_HandleTypeDef * huart, uint8_t Address, uint32_t WakeUpMethod)5. HAL_StatusTypeDef HAL_UART_DeInit (UART_HandleTypeDef * huart)UART上层参数的初始化/注销函数,根据⼯作模式选⽤相应的初始化函数需要配置的参数包括波特率、字长、停⽌位、奇偶校验模式、是否开启硬件流控制、收发模式、过采样模式参数说明:*huart UART句柄结构体的指针返回API的执⾏情况,调⽤时注意检查6. void HAL_UART_MspInit (UART_HandleTypeDef * huart)7. void HAL_UART_MspDeInit (UART_HandleTypeDef * huart)UART底层参数的初始化/注销函数,具体配置内容见使⽤⽅法说明在代码移植时修改该配置初始化函数即可轮询(Polling)模式的IO操作1. HAL_StatusTypeDef HAL_UART_Transmit (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size, uint32_t Timeout)2. HAL_StatusTypeDef HAL_UART_Receive (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size, uint32_t Timeout)⽤于接收与发送数据阻塞模式,在接收、发送数据时⽆法进⾏其他操作参数说明:*huart: UART句柄,⽤于操作UART*pData:缓冲区指针Size:缓冲区⼤⼩(以字节为单位)Timeout:超时时间,不可能让程序⼀直等待数据接收或发送,超过这个时间之后将放弃发送或接收返回该API的执⾏状态中断模式的IO操作1. HAL_StatusTypeDef HAL_UART_Transmit_IT (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)2. HAL_StatusTypeDef HAL_UART_Receive_IT (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)⽤于开启UART接收/发送中断,这两个函数会设置发送/接收的缓冲区地址,⼤⼩,数量并且开启相应的中断参数说明:*huart: UART句柄,⽤于操作UART*pData:缓冲区指针Size:缓冲区⼤⼩(以字节为单位)返回该API的执⾏状态,调⽤时注意检查以HAL_UART_Receive_IT()为例/*** @brief Receives an amount of data in non blocking mode* @param huart: pointer to a UART_HandleTypeDef structure that contains* the configuration information for the specified UART module.* @param pData: Pointer to data buffer* @param Size: Amount of data to be received* @retval HAL status*/HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size){uint32_t tmp = 0;tmp = huart->State;if((tmp == HAL_UART_STATE_READY) || (tmp == HAL_UART_STATE_BUSY_TX)){if((pData == NULL ) || (Size == 0)){return HAL_ERROR;}/* Process Locked */__HAL_LOCK(huart);huart->pRxBuffPtr = pData;huart->RxXferSize = Size;huart->RxXferCount = Size;huart->ErrorCode = HAL_UART_ERROR_NONE;/* Check if a transmit process is ongoing or not */if(huart->State == HAL_UART_STATE_BUSY_TX){huart->State = HAL_UART_STATE_BUSY_TX_RX;}else{huart->State = HAL_UART_STATE_BUSY_RX;}/* Enable the UART Parity Error Interrupt */__HAL_UART_ENABLE_IT(huart, UART_IT_PE);/* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */__HAL_UART_ENABLE_IT(huart, UART_IT_ERR);/* Process Unlocked */__HAL_UNLOCK(huart);/* Enable the UART Data Register not empty Interrupt */__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);return HAL_OK;}else{return HAL_BUSY;}}3. void HAL_UART_IRQHandler (UART_HandleTypeDef * huart)UART中断处理的公共函数,需要⽤户在中断处理函数void USARTx_IRQHandler()中调⽤该函数,或者可以由STM32CubeMX程序⾃动⽣成。
STM32F407的UART串口初始化

STM32F407的UART串口初始化STM32F407xx内嵌四个通用同步/异步接收器(USART1,USART2,USART3 和USART6)和两个通用异步收发器(UART4和UART5)。
这6个接口提供异步通信的IrDASIR ENDEC支持,多机通信模式,单线半双工通信模式LIN主/从功能。
USART1和USART6接口能够速度高达10.5 Mbit / s的通信其他可用的接口通信高达5.25bit/s。
USART1,USART2,USART3和USART6还提供硬件管理的CTS,RTS信号,智能卡的模式(ISO7816兼容)和类似的SPI通信能力。
所有接口都可以通过DMA控制器。
这里只使用了两根线的最简单串口设置。
硬件环境:STM32F4-Discovery软件环境:MDK4.7a实现的功能:1、串口初始化,2、通过串口发送数据3、中断方式接收数据,并将接收到的数据回送。
使用库函数操作首先,配置NVIC使用NVIC_PriorityGroupConfig()设置优先级分组,使用NVIC_Init ()对NVIC进行初始化本文引用地址:http://21ic/app/mcu/201812/783926void NVIC_Config(){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USART1唤醒连到EXTI25
AHB分频 因子 APB分频 因子 PCLK max 48MHz
fCK SYSCLK max 48MHz HSI LSE 8MHz 32.768KHz
USART1SW[1:0] @ RCC_CFGR3
USART1
检测阶段结束
成功检测到波特率 硬件置位ABRF、RxNE,并同时由硬件更新USART_BRR 如果线路噪声过大,检测值BRR不准确 硬件置位ABRF、RxNE,以及ABRE和FE等错误标志 无论是否成功检测,第一个数据都能接收 ABRE置位时,收到RDR中的数据可能不正确
硬件检测数据块结尾,无需软件或其他资源干预
RTU:通过超时@USART_RTOR检测长时间的空闲总线 中 断 ASCII:通过特定的字符序列进行字符匹配 中断
协议的控制部分,地址识别、数据块完整性控制、命令 解析,需要软件实现
13
智能卡模式
支持ISO 7816-3标准定义的智能卡异步通信协议
Transmit message DTE DEAT
DEM: 方向信号使能,DE信号从RTS引脚输出 DEP: 方向信号(输出)极性 DEAT[4:0]: Driver Enable assertion time DEDT[4:0]: Driver Enable deassertion time
发送、接收引脚可通过软件交换@SWAP 发送、接收使能应答 新增标志
BUSY:表示接收线上是否有通信在进行 REACK:进入STOP模式前用以确认模块准备好接收了 TEACK:用于发送空闲帧时确保满足TE=0的最小时间(复位TE之 后,置位TE之前)
18
RS485的DE信号时序要求
UART活动能把MCU从停止模式唤醒 波特率设置更方便,独立于外设总线时钟
收、发引脚可互换(New) 支持单线半双工通信
USART特性(2)
独立的发送、接收标志(TxE和RxNE),并可触发中断 支持DMA功能,可触发DMA的发送和接收请求 支持主模式下的同步通行 支持硬件流控(CTS和RTS) 兼容LIN协议的主设备、从设备
USART比以往模块新增4种中断源
Interrupt event
Transmit Data Register Empty Transmission Complete
Interrupt flag
TXE TC
CTS
Receive Data Register Not Emptyy Overrun Error Idle line detection Parity Error LIN break Noise Flag, Overrun error and Framing Error in multibuffer communication. Character Match Receiver timeout error End of Block Wakeup from STOP mode
同时置位RWU; 硬件置位RWU; 随后的数据不会置位 收到的不匹配地址字节和后续的数据字 进入后的状态 RxNE以及触发接收中断 节都不会置位RxNE,也没有相应中断和 DMA请求;
如何退出 退出后
检测到Idle frame 硬件清零RWU; 不会置位IDEL
收到匹配的地址字节 (MSB=1,4位或7位LSB是地址信息) 硬件清零RWU; 该匹配的地址字节会置位RxNE
串行红外通行编/解码模式
智能卡模式
对字块模式(T=1)的支持(New) 对反向协议(inverse convention)的支持(New)
支持基本的MODBus通信(New)
地址/字符匹配 接收超时特性
USART特性(3)
多处理器通信
USART模块可进入静默模式 静默模式下关闭接收中断 可通过空闲帧检测或地址匹配检测来被唤醒
CTSIF
RXNE ORE IDLE PE LBDF NE, ORE, FE CMF RTOF EOBF WUF
新增中断源
CMF,字符匹配标志
收到和定义在ADD[7:0]中匹配的字符
可以用ADD[6:0]+ADD[7]=1来定义该模块的节点地址(用于从静默模式唤 醒);也可以用ADD[7:0]来定义要被识别的特殊字符
唤醒后
硬件置位WUF@ISR 如果使能了WUFIE还将产生中断
注意:
进入STOP模式前必须使能WUF中断 使用LSE作为USART时钟源时,唤醒字节波特率最高不能超 过4K(16倍采样时)、2K(8倍采样时)
9
和静默模式一起使用
若MCU进入STOP模式之前,USART已进入静默模式
智能卡模式特性比较 F0 Vs. F1
Features
智能卡模式下的最大波特率 发送出错时,根据协议发送方必 需重传数据
STM32F05x
3Mbits/s USART可以自动重发,并且重发的次数 可配置(最多8次) 能够重新接收的次数也是可编程的(最 多8次) 如果多次接收的数据还是有错,USART 不再发送NAK信号,而是硬件置位校验 错误标志 硬件支持
10
波特率自动检测
USART_BRR包含由用户设置的波特率;它也可 以在自动波特率检测模式下由硬件自动更新
使能控制 @ABREN
使能检测之前,要给USART_BRR赋上非0值
检测方法选择 @ABRMOD[1:0]
以”1”开头的字符:检测起始位的长度 以”10”开头的字符:检测起始位和第一位的长度
5
多处理器通信环境
一主多从的通信环境
只有目标接收者收到完整的数据帧 非目标接收者保持“静默”状态,减少接收开销
使能控制位:MME@USART_CR1 接收状态位不被置位 接收中断被关闭
唤醒(退出“静默”状态)的方式
WAKE@USART_CR1=0:检测到空闲帧 WAKE@USART_CR1=1:检测到地址标志
STM32F1xx
4.5Mbits/s
T=0 字符模式
接收出错时,根据协议智能卡也 必需重传数据
必需由软件来处理自动重 传的要求
发送时,两个连续的字符之间自 动插入用户设置的保护时间 字符等待超时(CWT)
无此特性
New
T=1 字块模式
字块等待超时(BWT) 使用新增的超时机制来实现 字块长度以及结尾检测 正向/反向协议 新增MSB/LSB数据位序可配置以及逻辑 电平反转的特性 所有T=1模式下的特性都 有软件来实现
单线半双工通信
TX引脚和智能卡一起驱动双向数据线,配置成AF-OD 置位CLKEN,以向智能卡提供时钟信号
收、发的数据帧格式
带校验的9位数据 & 1.5位停止位
支持字符协议(T=0)和字块协议(T = 1) 可配置的时钟分频器以提供智能卡宽泛的时钟信号范围
USART
Tx
SCLK
STOP模式唤醒 (WUS[2:0]@CR3) 相关控制寄存器:UESM、USART1SW、WUS、 WUFIE 相关标志寄存器:WUF 00 匹配地址 0 相关寄存器: Idle帧 MMRQ、 Mute模式唤醒 RWU、 1 (wake@CR1) RxNE 匹配 地址 10 起始位 11 RxNE
备注
8
从停止模式唤醒
USART可以把MCU从停止模式唤醒
使能控制:UESM@USART_CR1
建议进入停止模式前置位它,退出后就复位它
前提:时钟采用HSI或LSE
唤醒源选择:WUS@USART_CR3
RxNE置位 检测到起始位 收到匹配的地址字节
RxNE都会置位,这个唤醒字节不会丢
USART1
Tx Rx Rx Tx
USART2
Rx Tx
USART3
Rx Tx
USART4
主设备
从设备
从设备
从设备
6
从静默状态唤醒
空闲帧唤醒 WAKE=0
唤醒后硬件清零RWU 并不置位IDLE@SR
地址标志唤醒 WAKE=1
总线上传输的字节由MSB=1 来表示是地址字节 地址字节的低4/7位指明目标接 收节点 USART设备自身地址的定义
通用同步异步收发器 USART
通信外设
USART特性(1)
灵活可配置的串行通信属性
数据位长度:8位或9位 校验位(奇或偶)的产生和检测 停止位长度:1位、1.5位或2位 波特率可灵活配置 过采样位数:16位或8位
最高6M波特率(48MHz外设频率+8位过采样) 模块的双时钟域使得 (New)
11
可以通过软件置位ABRRQ来复位ABRF和ABRE标志,使 得再发起一次波特率自动检测
自动波特率检测时都使用16倍过采样,所能自动检测到的 波特率范围:f CK/65535 ≤ 位时间 ≤ f CK/16
LSE(32.768KHz):允许的波特率范围是0.5~2048 HIS(8MHz):允许的波特率范围是122~500K
用于智能卡通信模式
WUF,从停止模式唤醒标志
检测到由WUS定义的唤醒事件 只在停止模式下才会触发对应WUF中断
17
其他新特性
接收、发送寄存器分开
USART_RDR USART_TDR
RS485硬件控制模式
和nRTS复用的DTE信号(Data Transmit Enable) DEAT[4:0]: Driver Enable assertion time DEDT[4:0]: Driver Enable deassertion time DEP: Driver enable polarity selection DEM: Driver enable mode,DE信号从RTS引脚输出