(1) 初始化串口相关参数,使能串口:HAL_UART_Init ( );
void uart_init(u32 bound) //bound:波特率
{
//UART 初始化设置
UART1_Handler.Instance=USART1; //USART1
UART1_Handler.Init.BaudRate=bound; //波特率
UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B; //字长为8位数据格式
UART1_Handler.Init.StopBits=UART_STOPBITS_1; //一个停止位
UART1_Handler.Init.Parity=UART_PARITY_NONE; //无奇偶校验位
UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //无硬件流控
UART1_Handler.Init.Mode=UART_MODE_TX_RX; //收发模式
HAL_UART_Init(&UART1_Handler); //HAL_UART_Init()会使能UART1
}
(2) 串口相关IO口配置,复用配置:
在HAL_UART_MspInit中调用HAL_GPIO_Init ( );
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
//GPIO端口设置
GPIO_InitTypeDef GPIO_Initure;
if(huart->Instance==USART1) //如果是串口1,进行串口1 MSP初始化
{
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟
GPIO_Initure.Pin=GPIO_PIN_9; //PA9
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
GPIO_Initure.Pin=GPIO_PIN_10; //PA10
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10
}
(3) 发送数据,并等待数据发送完成:
HAL_UART_Transmit ( );函数
HAL_UART_Transmit(&usart 1 handler,buff,sizeof(buff),1000);
(1) 初始化串口相关参数,使能串口:HAL_UART_Init ( );
(2) 串口相关IO口配置,复用配置:
在HAL_UART_MspInit中调用HAL_GPIO_Init函数。
(3) 串口接收中断优先级配置和使能:
HAL_NVIC_EnablelRQ();
HAL_NVIC_SetPriority();
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
#if EN_USART1_RX
HAL_NVIC_EnableIRQ(USART1_IRQn); //使能USART1中断通道
HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级3,子优先级3
#endif
}
(4) 使能串口接收中断:HAL_UART_Receive_IT();
(5) 编写中断服务函数:USARTX_IRQ Handler();
(6) 接收完成回调中断函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*huart)
{
u8 rec ;
if(huart->Inst ance==USART1)//如果是串口1
rec= *((huart->pRxBuffPtr)-1);
//rec=rdata[0];
HAL_UART_Transmit(&usart 1_handler,&rec,1,1000):
}