1、大家好大家好第5讲 USARTUSART: Universal Synchronous & Asynchronous Receiver and Transmitter STM32通用同步通用同步/异步收发器异步收发器n5.1 串行通信相关概念串行通信相关概念n5.2 STM32的通用串口结构的通用串口结构n5.3 串口相关寄存器串口相关寄存器n5.5 库函数库函数n5.6 程序设计举例程序设计举例5.1 串行通信相关概念串行通信相关概念n串行通信:串行通信: 串行通信是指在单根数据线上将数据一位一位地依次串行通信是指在单根数据线上将数据一位一位地依次传送。发送过程中,每发送完一个数据,再发送第
2、二个,传送。发送过程中,每发送完一个数据,再发送第二个,依此类推。接受数据时,每次从单根数据线上一位一位地依此类推。接受数据时,每次从单根数据线上一位一位地依次接受,再把它们拼成一个完整的数据。依次接受,再把它们拼成一个完整的数据。n在远距离数据通信中,一般采用串行通信方式,它具有占在远距离数据通信中,一般采用串行通信方式,它具有占用通信线少、成本低等优点。用通信线少、成本低等优点。同步和异步通信方式同步和异步通信方式 n同步串行通信同步串行通信方式是指在相同的数据传送速率下,发送端和方式是指在相同的数据传送速率下,发送端和接受端的通信频率保持严格同步。接受端的通信频率保持严格同步。 由于不需
3、要使用起始位和停止位,可以提高数据的传输速由于不需要使用起始位和停止位,可以提高数据的传输速率,但发送器和接受器的成本较高。率,但发送器和接受器的成本较高。n异步串行通信异步串行通信是指发送端和接受端在相同的波特率下不需是指发送端和接受端在相同的波特率下不需要严格地同步,允许有相对的时间时延,即收、发两端的要严格地同步,允许有相对的时间时延,即收、发两端的频率偏差在频率偏差在1010以内,就能保证正确实现通信。以内,就能保证正确实现通信。 异步通信在不发送数据时,数据信号线上总是呈现高异步通信在不发送数据时,数据信号线上总是呈现高电平状态,称为空闲状态(又称电平状态,称为空闲状态(又称MARK
4、MARK状态)。当有数据发状态)。当有数据发送时,信号线变成低电平,并持续一位的时间,用于表示送时,信号线变成低电平,并持续一位的时间,用于表示发送字符的开始,该位称为起始位(也称发送字符的开始,该位称为起始位(也称SPACESPACE状态)。状态)。 起始位之后,在信号线上依次出现待发送的每一位字起始位之后,在信号线上依次出现待发送的每一位字符数据,并且按照先低位后高位的顺序逐位发送。待发送符数据,并且按照先低位后高位的顺序逐位发送。待发送的每个字符的位数可以在的每个字符的位数可以在5 5、6 6、7 7或或8 8位之间选择。数据位位之间选择。数据位的后面可以加上一位奇偶校验位,也可以不加,
5、由编程指的后面可以加上一位奇偶校验位,也可以不加,由编程指定。最后传送的是停止位(高电平),一般选择定。最后传送的是停止位(高电平),一般选择1 1位、位、1.51.5位或位或2 2位。位。数据传送方式n单工方式。单工方式。单工方式采用一根数据传输线,只允许数据按单工方式采用一根数据传输线,只允许数据按照固定的方向传送。照固定的方向传送。n半双工方式。半双工方式。半双工方式采用一根数据传输线,允许数据半双工方式采用一根数据传输线,允许数据分时地在两个方向传送,但不能同时双向传送。分时地在两个方向传送,但不能同时双向传送。n全双工方式。全双工方式。全双工方式采用两根数据传输线,允许数据全双工方式
6、采用两根数据传输线,允许数据同时进行双向传送。同时进行双向传送。波特率波特率 n波特率是指每秒内传送二进制数据的位数,以波特率是指每秒内传送二进制数据的位数,以b/s和和bps(位(位/秒,秒,bit per second)为单位。它是衡量串行数据传)为单位。它是衡量串行数据传送速度快慢的重要指标和参数。送速度快慢的重要指标和参数。n计算机通信中常用的波特率是:计算机通信中常用的波特率是:110,300,600,1200,2400,4800,9600,19200bps。PC机串口通信流控制n这里讲到的这里讲到的“流流”,当然指的是数据流。数据在两个串口之当然指的是数据流。数据在两个串口之间传输
7、时间传输时,常常会出现丢失数据的现象常常会出现丢失数据的现象, 或者两台计算机的或者两台计算机的处理速度不同处理速度不同, 如台式机与单片机之间的通讯如台式机与单片机之间的通讯,接收端数据接收端数据缓冲区已满缓冲区已满,则此时继续发送来的数据就会丢失。则此时继续发送来的数据就会丢失。 n流控制能解决这个问题流控制能解决这个问题, , 当接收端数据处理不过来时当接收端数据处理不过来时, ,就就发出发出“不再接收不再接收”的信号的信号, ,发送端就停止发送发送端就停止发送, ,直到收到直到收到“可以继续发送可以继续发送”的信号再发送数据。因此流控制可以控的信号再发送数据。因此流控制可以控制数据传输
8、的进制数据传输的进 程程, ,防止数据的丢失。防止数据的丢失。nPC机中常用的两种流控制是硬件流控制(包括机中常用的两种流控制是硬件流控制(包括RTS/CTS、 DTR/DSR等)和软件流控制等)和软件流控制XON/XOFF(继续(继续/停止)停止) 硬件流控制硬件流控制 n硬件流控制常用的有硬件流控制常用的有RTS/CTS流控制和流控制和DTR/DSR(数据终端(数据终端就绪就绪/数据设置就绪)流控制。数据设置就绪)流控制。n硬件流控制必须将相应的电缆线连上硬件流控制必须将相应的电缆线连上,用用RTS/CTS(请求发送(请求发送/清除发送)流控制时清除发送)流控制时,应将通讯两端的应将通讯两
9、端的RTS、CTS线对应相连线对应相连,数据终端设备(如计算机)使用数据终端设备(如计算机)使用RTS来起始调制解调器或其来起始调制解调器或其它数据通讯设备的数据流它数据通讯设备的数据流,而数据通讯设备(如调制解调器)而数据通讯设备(如调制解调器)则用则用CTS来起动和暂停来自计算机的数据流。来起动和暂停来自计算机的数据流。n这种硬件握手方式的过程为:我们在编程时根据接收端缓冲这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的区大小设置一个高位标志(可为缓冲区大小的75)和一个)和一个低位标志(可为缓冲区大小的低位标志(可为缓冲区大小的25),当缓冲区
10、内数据量达到当缓冲区内数据量达到高位时高位时,我们在接收端将我们在接收端将CTS线置低电平(送逻辑线置低电平(送逻辑0),当发送当发送端的程序检测到端的程序检测到CTS为低后为低后,就停止发送数据就停止发送数据,直到接收端缓冲直到接收端缓冲区的数据量低于低位而将区的数据量低于低位而将CTS置高电平。置高电平。RTS则用来标明接则用来标明接收设备有没有准备好接收数据。收设备有没有准备好接收数据。n常用的流控制还有还有常用的流控制还有还有DTR/DSR(数据终端就绪(数据终端就绪/数据设置就数据设置就绪)。我们在此不再详述。绪)。我们在此不再详述。 RS-232-CnRS-232-C是美国电子工业
11、协会是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。)制定的一种串行物理接口标准。RS是英文是英文“推荐标准推荐标准”的缩写,的缩写,232为标识号,为标识号,C表示修改次数。表示修改次数。 nRS-232-C标准规定的数据传输速率为标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特。波特。nRS-232-C标准规定,驱动器允许有标准规定,驱动器允许有2500pF的电容负载,的电容负载,通信距离将受此电容限制,例如,采用通信距离将受此电容限制
12、,例如,采用150pF/m的通信电的通信电缆时,最大通信距离为缆时,最大通信距离为15m;若每米电缆的电容量减小,;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是通信距离可以增加。传输距离短的另一原因是RS-232属属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于因此一般用于20m以内的通信。以内的通信。 nEIA-RS-232C规定:在规定:在TxD和和RxD上,上, 逻辑逻辑1(MARK)=-3V-15V;逻辑;逻辑0(SPACE)=+3+15V 5.2 USART简介简介n通用同步异步收发器通用同步异
13、步收发器(USART)提供了一种灵活的方法与使用提供了一种灵活的方法与使用工业标准工业标准NRZ异步串行数据格式的外部设备之间进行全双工异步串行数据格式的外部设备之间进行全双工数据交换。数据交换。USART利用分数波特率发生器提供宽范围的波特利用分数波特率发生器提供宽范围的波特率选择。率选择。 n它支持同步单向通信和半双工单线通信,也支持它支持同步单向通信和半双工单线通信,也支持LIN(局部互局部互连网连网),智能卡协议,智能卡协议,IrDA (Infra Red Data Association,红外数据组织)SIR ENDEC(Serial Infrared,串行红外协议)规范,规范,以及
14、调制解调器以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。操作。它还允许多处理器通信。使用多缓冲器配置的使用多缓冲器配置的DMA方式,可以实现高速数据通信。方式,可以实现高速数据通信。总之,总之,STM32F10 x系列芯片所提供的系列芯片所提供的USART串口功能十分强大,串口功能十分强大,基本上所有的串口功能,它都能通过硬件实现基本上所有的串口功能,它都能通过硬件实现USART模式配置。(模式配置。(X=支持,支持,NA=不支持)不支持)(STM32F103内置内置3个个USART和和2个个UART)STM32的的USART主要特性n全双工的,异步通信全双工的,异步通信 nNR
15、ZNRZ(Not Return to Zero,不归零码,不归零码)标准格式)标准格式 n分数波特率发生器系统分数波特率发生器系统-发送和接收共用的可编程波特率,发送和接收共用的可编程波特率,最高达最高达4.5Mbits/s 4.5Mbits/s n可编程数据字长度可编程数据字长度(8(8位或位或9 9位位) ) n可配置的停止位。支持可配置的停止位。支持1 1或或2 2个停止位个停止位 n单线半双工通信单线半双工通信 n检测标志。接收缓冲器满、发送缓冲器空、传输结束标志。检测标志。接收缓冲器满、发送缓冲器空、传输结束标志。n四个错误检测标志四个错误检测标志n1010个带标志的中断源个带标志的
16、中断源 n USART功能概述:功能概述:n总线在发送或接收前应处于空闲状态(高电平)总线在发送或接收前应处于空闲状态(高电平) n一个起始位一个起始位 n一个数据字一个数据字(8(8或或9 9位位) ),最低有效位在前,最低有效位在前 n0.50.5,1.51.5,2 2个的停止位,由此表明数据帧的结束个的停止位,由此表明数据帧的结束 n使用分数波特率发生器使用分数波特率发生器-12-12位整数和位整数和4 4位小数的表示方法。位小数的表示方法。 n一个状态寄存器一个状态寄存器(USART_SR) (USART_SR) n数据寄存器数据寄存器(USART_DR) (USART_DR) n一个
17、波特率寄存器一个波特率寄存器(USART_BRR)(USART_BRR),1212位的整数和位的整数和4 4位小数位小数 n一个智能卡模式下的保护时间寄存器一个智能卡模式下的保护时间寄存器(USART_GTPR) (USART_GTPR) nCKCK:发送器时钟输出。:发送器时钟输出。nIrDA_RDI: IrDAIrDA_RDI: IrDA模式下的数据输入。模式下的数据输入。 nIrDA_TDO: IrDAIrDA_TDO: IrDA模式下的数据输出。模式下的数据输出。 nnCTS: nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据清除发送,若是高电平,在当前数据传输结
18、束时阻断下一次的数据发送。发送。nnRTS: nRTS: 发送请求,若是低电平,表明发送请求,若是低电平,表明USARTUSART准备好接收数据准备好接收数据 5.3 STM32的通用串口结构的通用串口结构n任何任何USART双向通信至少需要两个脚:接收数据双向通信至少需要两个脚:接收数据输入输入(RX)和发送数据输出和发送数据输出(TX)。 nRX:接收数据串行输入端。通过采样技术来区别数:接收数据串行输入端。通过采样技术来区别数据和噪音,从而恢复数据。据和噪音,从而恢复数据。 nTX:发送数据输出端。当发送器被禁止时,输出引:发送数据输出端。当发送器被禁止时,输出引脚恢复到它的脚恢复到它的
19、I/O端口配置。当发送器被激活,并且端口配置。当发送器被激活,并且不发送数据时,不发送数据时,TX引脚处于高电平。引脚处于高电平。在单线和智能在单线和智能卡模式里,此卡模式里,此I/O口被同时用于数据的发送和接收。口被同时用于数据的发送和接收。 端口重映射 nP132.图7-1.重映射步骤为重映射步骤为:1.打开复用打开复用IO时钟和时钟和USART重映射后的重映射后的I/O口引脚时钟口引脚时钟, RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);2.I/O口重映射开启口重映射开启. GPIO
20、_PinRemapConfig(GPIO_Remap_USART1,ENABLE);3.配制重映射引脚配制重映射引脚, 这里只需配置重映射后的这里只需配置重映射后的I/O,原来的不需要去原来的不需要去配置配置.GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.G
21、PIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);起始位侦测:起始位侦测:在在USARTUSART中,如果辨认出一个特殊的采样序列,那么就中,如果辨认出一个特殊的采样序列,那么就认为侦测到一个起始位。认为侦测到一个起始位。 该序列为:该序列为:1 1 1 0 X 0 X 0 X 0 0 0 0 1 1 1 0 X 0 X 0 X 0 0 0 0 接收器起始位侦测接收器起始位侦测n如果如果3个采样点都为个采样点都为0(在第在第
22、3、5、7位的第一次采样,和在位的第一次采样,和在第第8、9、10的第二次采样都为的第二次采样都为0),则确认收到起始位,这,则确认收到起始位,这时设置时设置RXNE标志位,如果标志位,如果RXNEIE=1,则产生中断。,则产生中断。n如果两次如果两次3个采样点上仅有个采样点上仅有2个是个是0(第第3、5、7位的采样点位的采样点和第和第8、9、10位的采样点位的采样点),那么起始位仍然是有效的,但,那么起始位仍然是有效的,但是会设置是会设置NE噪声标志位。如果不能满足这个条件,则中止起噪声标志位。如果不能满足这个条件,则中止起始位的侦测过程,接收器会回到空闲状态始位的侦测过程,接收器会回到空闲
23、状态(不设置标志位不设置标志位)。n如果有一次如果有一次3个采样点上仅有个采样点上仅有2个是个是0(第第3、5、7位的采样位的采样点或第点或第8、9、10位的采样点位的采样点),那么起始位仍然是有效的,那么起始位仍然是有效的,但是会设置但是会设置NE噪声标志位。噪声标志位。5.4 USART寄存器描述寄存器描述n状态寄存器状态寄存器(USART_SR) n数据寄存器数据寄存器(USART_DR) n波特比率寄存器波特比率寄存器(USART_BRR) n控制寄存器控制寄存器1(USART_CR1) n控制寄存器控制寄存器2(USART_CR2) n控制寄存器控制寄存器3(USART_CR3) n
24、保护时间和预分频寄存器保护时间和预分频寄存器(USART_GTPR) 可以用半字可以用半字(16位位)或字或字(32位位)的方式操作这些外设寄存器。的方式操作这些外设寄存器。 状态寄存器(USART_SR)D31-D10:保留D9-D0:状态位D4-IDLE:监测到总线空闲:监测到总线空闲 (IDLE line detected) D3-ORE:溢出错误:溢出错误 (Overrun error) D2-NE: 噪声错误标志噪声错误标志 (Noise error flag) D1-FE: 帧错误帧错误 (Framing error) D0-PE: 校验错误校验错误 (Parity error)
25、n溢出错误溢出错误:如果:如果RXNERXNE还没有被复位,又接收到一个字符,还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当则发生溢出错误。数据只有当RXNERXNE位被清零后才能从移位位被清零后才能从移位寄存器转移到寄存器转移到RDRRDR寄存器。寄存器。n噪音错误噪音错误:使用过采样技术:使用过采样技术( (同步模式除外同步模式除外) ),通过区别有,通过区别有效输入数据和噪音来进行数据恢复。效输入数据和噪音来进行数据恢复。n帧错误帧错误:由于没有同步上或大量噪音的原因,停止位没有:由于没有同步上或大量噪音的原因,停止位没有在预期的时间上接和收识别出来。在预期的时间上接和收识别
26、出来。 噪音错误当在接收帧中检测到噪音时: 在RXNE位的上升沿设置NE标志。 无效数据从移位寄存器传送到USART_DR寄存器。 nRXNE:读数据寄存器非空读数据寄存器非空 (Read data register not empty) 。 当当RDR移位寄存器中的数据被转移到移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬寄存器中,该位被硬件置位。如果件置位。如果USART_CR1寄存器中的寄存器中的RXNEIE为为1,则产生中断。对,则产生中断。对USART_DR的读操作可以将该位清零。的读操作可以将该位清零。RXNE位也可以通过写入位也可以通过写入0来清来清除,只有在多缓存
27、通讯中才推荐这种清除程序。除,只有在多缓存通讯中才推荐这种清除程序。 0:数据没有收到;:数据没有收到;1:收到数据,可以读出。:收到数据,可以读出。 nTC:发送完成发送完成 (Transmission complete) 。 当包含有数据的一帧发送完成后,并且当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位时,由硬件将该位置置1。如果。如果USART_CR1中的中的TCIE为为1,则产生中断。由软件序列清,则产生中断。由软件序列清除该位除该位(先读先读USART_SR,然后写入,然后写入USART_DR)。TC位也可以通过写位也可以通过写入入0来清除,只有在多缓存通讯中才推荐这
28、种清除程序。来清除,只有在多缓存通讯中才推荐这种清除程序。 0:发送还未完成;:发送还未完成; 1:发送完成。:发送完成。 数据寄存器(USART_DR) nDR8:0:数据值:数据值 (Data value)包含了发送或接收的数据。包含了发送或接收的数据。n当使能校验位当使能校验位(USART_CR1中中PCE位被置位位被置位)进行发送时,写到进行发送时,写到MSB的值的值(根据数据的长度不同,根据数据的长度不同,MSB是第是第7位或者第位或者第8位位)会被后来的校验会被后来的校验位该取代。位该取代。 n当使能校验位进行接收时,读到的当使能校验位进行接收时,读到的MSB位是接收到的校验位。位
29、是接收到的校验位。 波特比率寄存器(USART_BRR) n位位15:4:DIV_Mantissa11:0-USARTDIV的整数部分,这的整数部分,这12位定位定义了义了USART分频器除法因子分频器除法因子(USARTDIV)的整数部分。的整数部分。n位位3:0:DIV_Fraction3:0-USARTDIV的小数部分,这的小数部分,这4位定义了位定义了USART分频器除法因子分频器除法因子(USARTDIV)的小数部分。的小数部分。 n注意:注意: 如果如果TE或或RE被分别禁止,波特计数器停止计数被分别禁止,波特计数器停止计数分数波特率的产生:分数波特率的产生:nfCK是给外设的时钟
30、是给外设的时钟(PCLK1用于用于USART2、3、4、5,PCLK2用于用于USART1) n只有只有USART1使用使用PCLK2(最高最高72MHz)。其它。其它USART使用使用PCLK1(最高最高36MHz)。nUSARTDIV是一个无符号的定点数。这是一个无符号的定点数。这12位的值设置在位的值设置在USART_BRR寄存器。寄存器。 如何从如何从USART_BRR寄存器值得到寄存器值得到USARTDIV ?n例例1: 如果如果 DIV_Mantissa = 27 , DIV_Fraction = 12 (USART_BRR=0 x1BC), 于是于是 , Mantissa (US
31、ARTDIV) = 27 , Fraction (USARTDIV) = 12/16 = 0.75 , 所以,所以, USARTDIV = 27.75 n例例2:要求:要求 USARTDIV = 25.62, 就有:就有: DIV_Fraction = 16*0.62 = 9.92,最接近的整数是:,最接近的整数是:10 = 0 x0A, DIV_Mantissa = mantissa (25.620) = 25 = 0 x19, 于是,于是,USART_BRR = 0 x19A n例例3: 要求要求 USARTDIV = 50.99 就有,就有,DIV_Fraction = 16*0.99
32、= 15.84 最接近的整数是,最接近的整数是,16 = 0 x10 = DIV_frac3:0溢出溢出 = 进位必须加到整数部分进位必须加到整数部分 DIV_Mantissa = mantissa (50.990 + 进位进位) = 51 = 0 x33 于是,于是,USART_BRR = 0 x330,USARTDIV=51 设置波特率时的误差计算设置波特率时的误差计算 控制寄存器控制寄存器1 (USART_CR1) nUE:USART使能使能 (USART enable) nM:字长:字长 (Word length) 。0:一个起始位,:一个起始位,8个数据位,个数据位,n个停止位;个停
33、止位; 1:一个起始位,:一个起始位,9个数据位,个数据位,n个停止位。个停止位。 nWAKE:唤醒的方法:唤醒的方法 (Wakeup method) nPCE:检验控制使能:检验控制使能 (Parity control enable) nPS:校验选择:校验选择 (Parity selection) 。0:偶校验;:偶校验; 1:奇校验。:奇校验。 nPEIE:PE中断使能中断使能 (PE interrupt enable) nTXEIE:发送缓冲区空中断使能:发送缓冲区空中断使能 (TXE interrupt enable) nTCIE:发送完成中断使能:发送完成中断使能 (Transmi
34、ssion complete interrupt enable) nRXNEIE:接收缓冲区非空中断使能:接收缓冲区非空中断使能 (RXNE interrupt enable) n字长设置控制寄存器控制寄存器2 (USART_CR2) nLINEN:LIN(局域互联网)模式使能(局域互联网)模式使能 (LIN mode enable) 。该位由。该位由软件设置或清除。软件设置或清除。 0:禁止:禁止LIN模式;模式; 1:使能:使能LIN模式。模式。 在在LIN模式模式下,可以用下,可以用USART_CR1寄存器中的寄存器中的SBK位发送位发送LIN同步断开符同步断开符(低低13位位),以及检
35、测,以及检测LIN同步断开符。同步断开符。 nSTOP:停止位:停止位 (STOP bits) ,这这2位用来设置停止位的位数。位用来设置停止位的位数。 00:1个停止位;个停止位;01:0.5个停止位;个停止位; 10:2个停止位;个停止位;11:1.5个停个停止位;注:止位;注:UART4和和UART5不能用不能用0.5停止位和停止位和1.5停止位。停止位。 停止位的设置保护时间和预分频寄存器(USART_GTPR) n用于红外或智能卡模式。用于红外或智能卡模式。n位位15:8:GT7:0-保护时间值保护时间值 (Guard time value) 。该位域规定了。该位域规定了以波特时钟为
36、单位的保护时间。在智能卡模式下,需要这个功能。当以波特时钟为单位的保护时间。在智能卡模式下,需要这个功能。当保护时间过去后,才会设置发送完成标志。保护时间过去后,才会设置发送完成标志。n位位7:0:PSC7:0-预分频器值预分频器值 (Prescaler value) - 在红外在红外(IrDA)低功耗模式下:低功耗模式下:PSC7:0=红外低功耗波特率红外低功耗波特率 - 在智能卡模式下:在智能卡模式下:PSC4:0:预分频值。对系统时钟进行分频,给:预分频值。对系统时钟进行分频,给智能卡提供时钟。智能卡提供时钟。 5.5 库函数库函数n5.5.1 USART寄存器结构n5.5.2 USAR
37、T库函数5.5.1 USART寄存器结构typedef struct vu16 SR; u16 RESERVED1; vu16 DR; u16 RESERVED2; vu16 BRR; u16 RESERVED3; vu16 CR1; u16 RESERVED4; vu16 CR2; u16 RESERVED5; vu16 CR3; u16 RESERVED6; vu16 GTPR; u16 RESERVED7; USART_TypeDef; 寄存器:寄存器: SR - USART状态寄存器状态寄存器DR - USART数据寄存器数据寄存器BRR - USART波特率寄存器波特率寄存器CR1
38、- USART控制寄存器控制寄存器1 CR2 - USART控制寄存器控制寄存器2 CR3 - USART控制寄存器控制寄存器3 GTPR - USART保护时间和预分频寄存器保护时间和预分频寄存器5.5.2 USART库函数串口常用函数:uUSART_DeInit:将外设:将外设USARTx寄存器重设为缺省值寄存器重设为缺省值uUSART_Init:根据:根据USART_InitStruct中指定的参数初始化外中指定的参数初始化外设设USARTx寄存器寄存器uUSART_Cmd:使能或者失能:使能或者失能USART外设外设uUSART_ITConfig:使能或者失能指定的:使能或者失能指定的
39、USART中断中断uUSART_SendData:通过外设:通过外设USARTx发送单个数据发送单个数据uUSART_ReceiveData:返回:返回USARTx最近接收到的数据最近接收到的数据uUSART_GetFlagStatus:检查指定的:检查指定的USART标志位设置与否标志位设置与否uUSART_ClearFlag:清除:清除USARTx的待处理标志位的待处理标志位uUSART_GetITStatus:检查指定的:检查指定的USART中断发生与否中断发生与否函数USART_DeInit n功能描述:将外设功能描述:将外设USARTx寄存器重设为缺省值寄存器重设为缺省值n函数原形:
40、函数原形: void USART_DeInit(USART_TypeDef* USARTx)n例:例:/* Resets the USART1 registers to their default reset value */ USART_DeInit(USART1); 函数USART_Init n功能:根据功能:根据USART_InitStruct中指定的参数初始化外设中指定的参数初始化外设USARTx寄存器寄存器n函数原形:函数原形: void USART_Init (USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)US
41、ART_InitTypeDef structure typedef struct u32 USART_BaudRate; /波特率波特率u16 USART_WordLength; /字长字长u16 USART_StopBits; /停止位停止位u16 USART_Parity; /奇偶校验奇偶校验u16 USART_HardwareFlowControl; /硬件流控制硬件流控制u16 USART_Mode; /模式模式u16 USART_Clock; u16 USART_CPOL; u16 USART_CPHA; u16 USART_LastBit; USART_InitTypeDef; 串
42、口串口1配置举例配置举例/* The following example illustrates how to configure the USART1 */ USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USA
43、RT_Parity = USART_Parity_Odd; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_RTS_CTS; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_InitStructure.USART_Clock = USART_Clock_Disable; USART_InitStructure.USART_CPOL = USART_CPOL_High; USART_InitStructur
44、e.USART_CPHA = USART_CPHA_1Edge; USART_InitStructure.USART_LastBit = USART_LastBit_Enable; USART_Init(USART1, &USART_InitStructure); nUSART_WordLength USART_WordLength_8b:8位数据USART_WordLength_9b:9位数据nUSART_StopBits USART_StopBits_1:在帧结尾传输1个停止位USART_StopBits_0.5: 在帧结尾传输0.5个停止位USART_StopBits_2:在帧结尾传输2
45、个停止位USART_StopBits_1.5:在帧结尾传输1.5个停止位nUSART_Parity USART_Parity_No:奇偶失能 USART_Parity_Even:偶模式 USART_Parity_Odd:奇模式 nUSART_HardwareFlowControl USART_HardwareFlowControl_None:硬件流控制失能 USART_HardwareFlowControl_RTS:发送请求RTS使能USART_HardwareFlowControl_CTS:清除发送CTS使能USART_HardwareFlowControl_RTS_CTS:RTS和CTS使
46、能nUSART_Mode USART_Mode_Tx:发送使能 USART_Mode_Rx:接收使能nUSART_CLOCKUSART_Clock_Enable:时钟高电平活动 USART_Clock_Disable:时钟低电平活动 函数USART_StructInit n功能描述:功能描述: 把把USART_InitStruct中的每一个参数按缺省值填入中的每一个参数按缺省值填入n例:例: /* The following example illustrates how to initialize a USART_InitTypeDef structure */ USART_InitType
47、Def USART_InitStructure; USART_StructInit (&USART_InitStructure); USART_InitStruct缺省值函数USART_Cmd n功能描述:使能或者失能功能描述:使能或者失能USART外设。外设。n函数原形:函数原形: void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState) n例:例: /* Enable the USART1 */ USART_Cmd (USART1, ENABLE); 函数USART_ITConfig n功能描述功能描述:使能或者失能指定
48、的使能或者失能指定的USART中断中断n函数原形函数原形:void USART_ITConfig (USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState) n例:例:/* Enables the USART1 transmit interrupt */ USART_ITConfig(USART1, USART_IT_TC, ENABLE); USART_IT值:值:USART中断请求函数USART_SendData n功能描述功能描述:通过外设通过外设USARTx发送单个数据发送单个数据n函数原形函数原形:void USAR
49、T_SendData(USART_TypeDef* USARTx, u8 Data) nx可以是可以是1,2或者或者3,来选择,来选择USART外设。外设。n例:例:/* Send one HalfWord on USART3 */ USART_SendData(USART3, 0 x26); 函数USART_ReceiveData 例:例: /* Receive one halfword on USART2 */ u8 RxData; RxData = USART_ReceiveData(USART2);函数USART_GetFlagStatus n功能描述:检查指定的功能描述:检查指定的U
50、SART标志位设置与否。标志位设置与否。n函数原形:函数原形:FlagStatus USART_GetFlagStatus (USART_TypeDef* USARTx, u16 USART_FLAG) n返回值返回值 :USART_FLAG的新状态(的新状态(SET或者或者RESET) n例:例: /* Check if the transmit data register is full or not */ FlagStatus Status; Status = USART_GetFlagStatus(USART1, USART_FLAG_TXE); USART_FLAG值:值: 函数US