尝试使用CubeMX做stm32开发之十二:USART配置 您所在的位置:网站首页 USART是什么的简称 尝试使用CubeMX做stm32开发之十二:USART配置

尝试使用CubeMX做stm32开发之十二:USART配置

2024-07-04 22:57| 来源: 网络整理| 查看: 265

        参考《STM32中文参考手册_V10》,研究CubeMX中有关USART1的配置。

一、配置参数

Mode

Asynchronous:全双工异步通信

Synchronous:发送方为同步传输提供时钟的同步通信。在USART_CR2寄存器上写CLKEN位选择同步模式,用户可以以主模式方式控制双向同步串行通信,增加CK引脚作为USART发送器时钟的输出。

Single Wire:单线半双工通信。单线半双工模式通过设置USART_CR3寄存器的HDSEL位选择。RX引脚不再被使用,TX和RX引脚在芯片内部互联,通过单线半双工协议与对侧交互数据。

Multiprocessor Communication:多处理器通信。可以将几个USART连载一个网络里。

IrDA:通过设置USART_CR3寄存器的IREN位选择IrDA模式。

LIN:局域互联网模式。通过设置USART_CR2寄存器的LINEN位选择LIN模式。

Smart Card:智能卡模拟功能。设置USART_CR3寄存器的SCEN位选择智能卡模式。智能卡是一个单线半双工通信协议。

Smart Card with Card Clock:CLKEN位可以被设置,以提供时钟给智能卡。

Hardware Flow Control

Disable:只通过RX和TX实现基本的串口通信

CTS Only:在RX和TX的基础上增加CTS引脚,发送清除信号。若为高电平,在当前数据传输结束时阻断下一次的数据发送。

RTS Only:在RX和TX的基础上增加RTS引脚,发送请求信号。若为低电平,表明USART准备好接收数据。在485通信中,需要使用该引脚。

CTS/RTS:在RX和TX的基础上增加CTS和RTS引脚。

Parameter Settings

Baud Rate:波特率。通过波特率寄存器(USART_BRR)设置。

Word Length:字长。通过控制寄存器1(USART_CR1)中的M位设置。

Parity:奇偶校验选择。通过控制寄存器1(USART_CR1)中的PCE位和PS位设置。

Stop Bits:停止位。通过控制寄存器2(USART_CR2)中的STOP位设置。

Data Direction:数据方向。通过控制寄存器1(USART_CR1)中的TE和RE位设置。

二、生成代码 void MX_USART1_UART_Init(void) { /* USER CODE BEGIN USART1_Init 0 */ /* USER CODE END USART1_Init 0 */ /* USER CODE BEGIN USART1_Init 1 */ /* USER CODE END USART1_Init 1 */ huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN USART1_Init 2 */ /* USER CODE END USART1_Init 2 */ } void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(uartHandle->Instance==USART1) { /* USER CODE BEGIN USART1_MspInit 0 */ /* USER CODE END USART1_MspInit 0 */ /* USART1 clock enable */ __HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**USART1 GPIO Configuration PA9 ------> USART1_TX PA10 ------> USART1_RX PA12 ------> USART1_RTS */ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USART1 interrupt Init */ HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); /* USER CODE BEGIN USART1_MspInit 1 */ /* USER CODE END USART1_MspInit 1 */ } }

对比标准库代码:

void usart1_init(u32 baud) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //TX GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //RX GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); //RN GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); 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(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); RS485_RN = 0; }  三、小结

        USART1的配置比较简单,主要是数据格式的配置和中断的配置。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有