完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言
对于STM32F1系列的开发板,串口波特率设置之后,就开始进行通信了,一般情况下是不需要修改的,但是在实际的项目开发中,我们可能需要通过串口对模块进行配置等操作,配置完模块之后进行数据之间的通信,又需要更改其波特率,所以下面要介绍如何修改串口波特率。 一、串口配置 在开发板上电之后,main函数下需要有配置好的串口参数及中断函数,下面介绍均以串口2为例。 1.串口初始化 代码示例如下: void Usart2_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //使能串口2时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //选中串口默认输出管脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //定义输出最大速率 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定义管脚9的模式 GPIO_Init(GPIOA, &GPIO_InitStructure); //调用函数,把结构体参数输入进行初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口 USART_InitStructure.USART_BaudRate = 115200; //速率115200bps USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位8位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位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(USART2, &USART_InitStructure); //将以上赋完值的结构体带入库函数USART_Init进行初始化 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); USART_Cmd(USART2, ENABLE);//开启USART2,注意与上面RCC_APB2PeriphClockCmd()设置的区别 } GPIO_Init(GPIOA, &GPIO_InitStructure); 这句代码中GPIO_InitStructure被定义为结构体类型,类型名为GPIO_InitTypeDef ,进入下面函数: typedef struct { uint16_t GPIO_Pin; /*!《 Specifies the GPIO pins to be configured. This parameter can be any value of @ref GPIO_pins_define */ GPIOSpeed_TypeDef GPIO_Speed; /*!《 Specifies the speed for the selected pins. This parameter can be a value of @ref GPIOSpeed_TypeDef */ GPIOMode_TypeDef GPIO_Mode; /*!《 Specifies the operating mode for the selected pins. This parameter can be a value of @ref GPIOMode_TypeDef */ }GPIO_InitTypeDef; 可以发现对于引脚初始化需要对引脚,速度和模式进行配置。 USART_Init(USART2, &USART_InitStructure);对于串口初始化函数,和以上类似,USART_InitStructure也是被定义为结构体类型USART_InitTypeDef ,进入下面函数: typedef struct { uint32_t USART_BaudRate; /*!《 This member configures the USART communication baud rate. The baud rate is computed using the following formula: - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct-》USART_BaudRate))) - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */ uint16_t USART_WordLength; /*!《 Specifies the number of data bits transmitted or received in a frame. This parameter can be a value of @ref USART_Word_Length */ uint16_t USART_StopBits; /*!《 Specifies the number of stop bits transmitted. This parameter can be a value of @ref USART_Stop_Bits */ uint16_t USART_Parity; /*!《 Specifies the parity mode. This parameter can be a value of @ref USART_Parity @note When parity is enabled, the computed parity is inserted at the MSB position of the transmitted data (9th bit when the word length is set to 9 data bits; 8th bit when the word length is set to 8 data bits)。 */ uint16_t USART_Mode; /*!《 Specifies wether the Receive or Transmit mode is enabled or disabled. This parameter can be a value of @ref USART_Mode */ uint16_t USART_HardwareFlowControl; /*!《 Specifies wether the hardware flow control mode is enabled or disabled. This parameter can be a value of @ref USART_Hardware_Flow_Control */ } USART_InitTypeDef; 由标准库中的代码,我们可以知道,配置串口时,需要对波特率,字节长度,停止位,校验位,模式和硬件数据流五项进行配置。 以上对串口配置完成,下面对配置好的串口修改其波特率。 2.修改波特率 之前串口2配置的波特率为115200,下面我们把波特率修改为57600,代码如下: void USART_Config(uint32_t baud) { USART_InitTypeDef USART_InitStructure; USART_Cmd(USART2, DISABLE); USART_InitStructure.USART_BaudRate =baud; 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(USART2, &USART_InitStructure); USART_Cmd(USART2, ENABLE); } 这是一个无返回值但是需要输入参数的函数,其输入参数为修改值波特率。配置完成之后,直接调用函数 USART_Config(57600);即可。 以下有两点特别说明: 其一:此函数的作用是把串口2的波特率修改为一特定值,如果想要多次修改波特率值,可以写一个数组,里面包括你想要切换的波特率,实时监测切换就行。 其二:修改串口波特率时,一定要先把串口关闭,调用函数USART_Cmd(USART2, DISABLE); ,以免造成数据传输错误,出现乱码,配置完成之后,再次打开串口,调用函数USART_Cmd(USART2, ENABLE); 。 |
|
|
|
只有小组成员才能发言,加入小组>>
2562 浏览 0 评论
1159浏览 2评论
762浏览 1评论
515浏览 0评论
272浏览 0评论
453浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 14:02 , Processed in 1.591454 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号