与其他外设一样,USART需要使用的寄存器在固件库中也有一个初始化结构体,比如这个结构体是USART_InitTypeDef,结构体成员用于设置外设工作参数,然后再由外设初始化配置函数USART_Init()调用,从而实现串口配置的初始化。
初始化结构体定义在stm32f4xx_usart.h文件中,初始化库函数定义在stm32f4xx_usart.c文件中。
1.USART-InitTypeDef结构体
定义如下:
结构体很清晰,需要设置波特率、字长、停止位、校验、USART模式、硬件流控制,设置的参数说明如下:
(1)USART_BaudRate:波特率设置。常设置为2400bps、9600bps、19200bps、115200bps。标准库函数会根据设定值计算得到USARTDIV值,并设置USART_BRR寄存器值。
(2)USART_WordLength:数据帧字长。可选8位或9位。它设定USART_CR1寄存器的M位的值。如果没有使能奇偶校验控制,一般使用8个数据位;如果使能奇偶校验,则一般设置为9个数据位。
(3)USART_StopBits:停止位设置,可选0.5个、1个、1.5个和2个停止位。它设定USART_CR2寄存器的STOP[1:0]位的值,一般选择1个停止位。
(4)USART_Parity:奇偶校验控制选择,可选USART_Parity_No(无奇偶校验)、USART_Parity_Even(偶校验)以及USART_Parity_Odd(奇校验)。它设定USART_CR1寄存器的PCE位和PS位的值。
(5)USART_Mode:USART模式选择,有USART_Mode_Rx和USART_Mode_Tx两种,允许使用逻辑或运算同时选择两个模式。它设定USART_CR1寄存器的RE位和TE位。
2.USART时钟初始化结构体(仅在同步模式下)
使用同步模式时需要配置SCLK引脚输出脉冲的属性。标准库使用一个时钟初始化结构体USART_ClockInitTypeDef来设置,因此该结构体内容也只有在同步模式下才需要设置。
(1)USART_Clock:同步模式下SCLK引脚上时钟输出使能控制,可选禁止时钟输出(USART_Clock_Disable)或开启时钟输出(USART_Clock_Enable);如果使用同步模式发送,一般都需要开启时钟。它设定USART_CR2寄存器的CLKEN位的值。
(2)USART_CPOL:同步模式下SCLK引脚上输出时钟极性设置,可设置在空闲时SCLK引脚为低电平(USART_CPOL_Low)或高电平(USART_CPOL_High)。它设定USART_CR2寄存器的CPOL位的值。(www.xing528.com)
(3)USART_CPHA:同步模式下SCLK引脚上输出时钟相位设置,可设置在时钟第一个变化沿捕获数据(USART_CPHA_1Edge)或在时钟第二个变化沿捕获数据。它设定USART_CR2寄存器的CPHA位的值。USART_CPHA与USART_CPOL配合使用可以获得多种模式时钟关系。
(4)USART_LastBit:选择在发送最后一个数据位的时候时钟脉冲是否在SCLK引脚输出,可以选择不输出脉冲(USART_LastBit_Disable)或输出脉冲(USART_LastBit_Enable)。它设定USART_CR2寄存器的LBCL位的值。
3.USART-Init()函数
USART_Init()函数在stm32f4xx_usart.c中可以找到,如图7-14所示。因函数比较长,从使用的角度看,读者不需要了解具体语句的实现过程,只需知道函数的入口参数如何使用即可。入口参数有USARTx、USART_InitStruct结构体。USARTx指的是初始化x串口,x是串口号;USART_InitStruct则是串口初始化参数的结构体。使用初始化函数前必须先赋值设定好USART_InitStruct结构体。
图7-14 USART_Init()函数
4.GPIO-PinAFConfig()函数
USART属于GPIO的复用功能,因此必须使用GPIO_PinAFConfig函数对GPIO进行设置。该函数在stm32f4xx_gpio.c中可以找到,专门用于复用设置。该函数有3个形参,如图7-15(a)所示。第一个形参GPIOx代表第几组IO;第二个形参GPIO_PinSource代表第几脚;最后一个形参GPIO_AF代表复用类型。复用类型非常多,不同引脚可以复用的功能也不尽相同,读者可以查阅STM32F407数据手册。作为USART1使用的复用类型是GPIO_AF_USART1,如图7-15(b)所示。
图7-15 GPIO_PinAFConfig()函数与说明
如果使用PA9作为USART1的TX复用,则GPIO_PinAFConfig函数如下:
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
如果使用PA10作为USART1的RX复用,则GPIO_PinAFConfig函数如下:
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。