关注分享主机优惠活动
国内外VPS云服务器

串口通信基础知识4(串口通信的全部流程)

概要:串口波特率设置。 通过状态寄存器可以读取串口状态。 关闭接收完成中断,让中断通道获得优先级,获得第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 超时);

未经允许不得转载:主机频道 » 串口通信基础知识4(串口通信的全部流程)

评论 抢沙发

评论前必须登录!