通用异步/同步接收发送接口(USART)Page2USART主要特性3个USART:USART1位于APB2高速总线,USART2,USART3位于APB1总线可编程数据字长度(8位或9位)分数波特率发生器系统,最高达4.5Mbits/s可配置的停止位-支持1或2个停止位LIN通信(局域互联网)IRDASIR编码器解码器(红外通讯)智能卡模拟功能可配置的使用DMA的多缓冲器通信Page3UART主要特性检测标志接收缓冲器满RXNE对USART_DR的读操作可将该位清零。发送缓冲器空TXE对USART_DR的写操作可将该位清零。传输结束标志TC校验控制发送校验位对接收数据进行校验四个错误检测标志溢出错误ORE噪音错误NE帧错误FE校验错误PE10个带标志的中断源Page4USART引脚PA8PA10PA9PA11PA12Page5USART电路连接PA8PA10PA9PA11PA12Page6USART结构控制寄存器USART_SRUSART_BRRUSART_CR1USART_CR2USART_CR3USART_GTPRPage7异步串口通信配置GPIO配置,时钟使能字长(一次传送的数据长度)停止位波特率(每秒传输的数据位数)奇偶校验位Page8GPIO配置,时钟使能需要同时开启GPIOA时钟和USART1时钟PA8PA10PA9PA11PA12浮空输入或上拉输入复用推挽输出?是否需要开启AFIO时钟?Page9课堂练习编写程序配置PA9,PA10为USART1输入输出端口并开启时钟。Page10AFIOPage11字长Page12字长Page13停止位配置USART_CR2-STOP[1:0]00:1Stopbit01:0.5Stopbit10:2Stopbits11:1.5StopbitPage14波特率配置APB时钟PCLK1用于USART2、3,最高36MHzPCLK2用于USART1,最高72MHzPage15设置波特率时误差计算Page16奇偶校验偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数Page17串口初始化函数voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct);USART1USART2USART3typedefstruct{uint32_tUSART_BaudRate;uint16_tUSART_WordLength;uint16_tUSART_StopBits;uint16_tUSART_Parity;uint16_tUSART_Mode;uint16_tUSART_HardwareFlowControl;}USART_InitTypeDef;波特率:2400,9600,19200,57600,115200字长:USART_WordLength_8bUSART_WordLength_9b停止位:USART_StopBits_0_5USART_StopBits_1USART_StopBits_1_5USART_StopBits_2奇偶校验:USART_Parity_NoUSART_Parity_Even偶校验USART_Parity_Odd奇校验工作模式:USART_Mode_RxUSART_Mode_TxUSART_Mode_Rx|USART_Mode_Tx硬件流控制:USART_HardwareFlowControl_NoneUSART_HardwareFlowControl_RTSUSART_HardwareFlowControl_CTSUSART_HardwareFlowControl_RTS_CTSPage18例1USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_InitStructure);设置USART1波特率115200,8位字长,1停止位,无校验,无硬件流控制,收发模式Page19串口使能函数voidUSART_Cmd(USART_TypeDef*USARTx,FunctionalStateNewState);USART1USART2USART3ENABLEDISABLE例,使能USART1USART_Cmd(USART1,ENABLE);Page20串口数据发送函数voidUSART_SendData(USART_TypeDef*USARTx,uint16_tData)USART1USART2USART3例,通过USART1发送数据0x30USART_SendData(USART1,0x30);Page21串口数据收发状态查询函数FlagStatusUSART_GetFlagStatus(USART_TypeDef*USARTx,uint16_tUSART_FLAG)USART1USART2USART3例,查询TXE标志状态USART_GetFlagStatus(USART1,USART_FLAG_TXE);USART_FLAG_CTSUSART_FLAG_LBDUSART_FLAG_TXEUSART_FLAG_TCUSART_FLAG_RXNEUSART_FLAG_IDLEUSART_FLAG_OREUSART_FLAG_NEUSART_FLAG_FEUSART_FLAG_PESETRESETPage22常用标志介绍USART-SRTDR空发送完成RDR非空,接收到数据可以读出