概要:串口波特率设置。 通过状态寄存器可以读取串口状态。 关闭接收完成中断,让中断通道获得优先级,获得第5子优先级,编写中断服务函数,接收和发送第6个串口数据。 发送和接收是通过数据寄存器实现的。
串口基本配置寄存器。 配置过程可以总结如下:
1. 使能串口时钟。 这里串口1的设置是APB2ENR寄存器的位4。
2.串口波特率设置。 每个串口都有自己独立的波特率寄存器USART_BRR。 通过设置该寄存器,可以设置各种波特率。
3. 每个STM32F429串口有3个控制寄存器,USART_CR1-3。 许多串口设置都是通过这三个寄存器来配置的。 现在,只需使用 USART_CR1 来实现该功能即可。
4. 发送和接收数据。 STM32F429的发送和接收是通过数据寄存器USART_DR来完成的,该寄存器是一个包含TDR和RDR的双寄存器。
5. 串口状态。 串口状态可以通过状态寄存器USART_SR读取。
讨论:使用HAL库进行配置时的实现流程是怎样的?
第一:初始化函数HAL_UART_Init 相关函数:
HAL_StatusTypeDef HAL_UART_Init (UART_HandleTypeDef *huart) );
说明:该函数只有一个入口参数huart。 UART_HandleTypeDef 结构体指针的类型称为句柄。
第二:开启串口和GPIO口时钟
要使用串口,必须开启串口时钟和想要使用的GPIO口钟。
__HAL_RCC_USART1_CLK_ENABLE(); //启用USART1时钟使用映射设置
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10; //PA9/PA10 GPIO_Initure .Mode=GPIO_MODE_AF_PP; //多路推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速
>
GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为USART1 HAL_GPIO_Init(GPIOA,&GPIO_Initure)。 //初始化PA9/PA10
第四:使能串口相关中断并设置串口中断优先级
__HAL_UART_ENABLE_IT(huart,UART_IT_RXNE ); //使能接收完成中断
第一个参数:huart为串口句柄。 第二个参数:要启用的中断类型。
__HAL_UART_DISABLE_IT(huart,UART_IT_RXNE); //关闭接收完成中断
HAL_NVIC_EnableIRQ(USART1_IRQn); //启用USART1中断通道 HAL_NVIC_SetPriority(USART1_IRQn,3,3); //占用优先级3,子优先级3
第五:写中断服务函数
void USART1_IRQHandler(void);
第六:串口数据接收和发送
发送和接收是通过数据寄存器USART_DR来实现的。 当向该寄存器写入数据时,串口自动传输数据。 当接收到数据时,它也存储在该寄存器中。
操作USART_DR寄存器并发送数据的HAL库函数有:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
p>
通过以下函数向串口寄存器USART_DR写入数据:
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t 大小, uint32_t 超时);
评论前必须登录!
注册