首页 理论教育USART通信相关固件库函数的应用

USART通信相关固件库函数的应用

【摘要】:下面简单介绍几个与串口基本配置直接相关的固件库函数。此时可直接读取寄存器USART_DR,获取串行数据。在读USART_DR可以将该位清零,也可以向该位写0,直接清除。TC:当该位被置1时,表示USART_DR内的数据已经发送完成。在固件库函数里面,读取串口状态的函数如下:该函数的第2个入口参数标志用于查看串口的哪种状态,如RXNE位或TC位。

下面简单介绍几个与串口基本配置直接相关的固件库函数。这些函数和定义主要分布在stm32f4××_usart.h和stm32f4××_usart.c文件中。

1.串口时钟和GPIO时钟使能

串口是挂载在APB2下面的外设,其使能函数如下:

串口USART1对应STM32芯片的I/O接口PA9和PA10,GPIO时钟使能,即对PA口的时钟使能,其使能函数如下:

2.设置引脚复用器映射

由于USART1为PA9和PA10的复用功能,因此需要进行引脚复用器映射配置,配置方法如下:

3.GPIO端口初始化设置

在GPIO端口初始化设置中,与普通I/O配置不同的是,模式设置为复用功能,调用固件库函数GPIO_Init来实现,关键代码如下:

4.串口参数初始化设置

串口初始化通过调用固件库函数USART_Init来实现,配置完成后调用USART_Cmd函数串口使能,关键代码如下:

5.串口数据发送与接收

STM32F4的发送与接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含TDR和RDR。当向该寄存器写数据时,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。

通过USART_DR寄存器发送数据的函数为USART_SendData,可实现向串口寄存器USART_DR写入一个数据,函数结构如下:

通过USART_DR寄存器读取串口接收数据的函数是USART_ReceiveData,可以实现读取串口接收到的数据,函数结构如下:

6.串口状态读取与判定

串口的状态可以通过状态寄存器USART_SR读取,该寄存器的第5位RXNE和第6位TC功能说明如下:

RXNE(读数据寄存器非空):当该位被置1时,表明有数据被接收到,且可读出。此时可直接读取寄存器USART_DR,获取串行数据。在读USART_DR可以将该位清零,也可以向该位写0,直接清除。(www.chuimin.cn)

TC(发送完成):当该位被置1时,表示USART_DR内的数据已经发送完成。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:①读USART_SR,写USART_DR;②直接向该位写0。

在固件库函数里面,读取串口状态的函数如下:

该函数的第2个入口参数标志用于查看串口的哪种状态,如RXNE位(读数据寄存器非空)或TC位(发送完成)。例如,要判断读寄存器是否非空(RXNE位),操作库函数的方法如下:

而判断发送是否完成(TC位)的操作库函数方法如下:

7.NVIC初始化与中断使能

当需要采用串口中断方式运行时,还应进行中断配置与使能,通过调用函数NVIC_Init来设置,关键代码如下:

同时,还需要使能相应中断,使能串口中断的函数定义如下:

该函数的第2个入口参数用于标志使能串口的类型,即使能哪种中断。例如,在接收数据的时候(RXNE位,读数据寄存器非空)要产生中断,那么开启中断的代码如下:

如果在发送数据结束的时候(TC位,发送完成)产生中断,那么开启中断的代码如下:

8.判断相应中断状态

在使能某中断后,当该中断发生时,会设置状态寄存器中的某个标志位。在中断处理函数中,常常要判断其是哪种中断,使用的函数定义如下:

例如,使能串口发送完成中断,那么当中断发生时,可以在中断处理函数中调用这个函数来判断是否是串口发送完成中断,方法如下:

当返回值为SET时,说明串口发送完成中断发生。

9.中断服务函数说明

当发生中断的时候,程序就会执行中断服务函数,根据设计需要将代码编写在该函数中即可。串口1中断服务函数如下:

以上即为STM32F4处理器的串口基本配置内容。关于串口更详细的介绍,请参考《STM32F4××中文参考手册》。