hal库里面路径:STM32Cube_FW_L0_V1.10.0\Projects\STM32L053C8-Discovery\Examples \UART\UART_TwoBoards_ComIT
工程是串口1中断收发模式配置
UART_HandleTypeDef UartHandle; //串口结构体变量
UartHandle.Instance = USARTx; //初始化串口实例 USART1
UartHandle.Init.BaudRate = 9600; //设置波特率
UartHandle.Init.WordLength = UART_WORDLENGTH_8B; //8位数据位
UartHandle.Init.StopBits = UART_STOPBITS_1; //一个停止位
UartHandle.Init.Parity = UART_PARITY_NONE; //奇偶校验位无
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; //硬件控制流无
UartHandle.Init.Mode = UART_MODE_TX_RX; //RX和TX模式
if(HAL_UART_Init(&UartHandle) != HAL_OK) //使能结构体变量
{
Error_Handler();
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart) //自己写的函数,对串口引脚初始化 在 HAL_UART_Init函数里面自动调用 不用声明,
{
GPIO_InitTypeDef GPIO_InitStruct;
USARTx_TX_GPIO_CLK_ENABLE(); //串口引脚时钟使能
USARTx_RX_GPIO_CLK_ENABLE();
USARTx_CLK_ENABLE(); //串口时钟使能
/* UART TX GPIO pin configuration */
GPIO_InitStruct.Pin = USARTx_TX_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
GPIO_InitStruct.Alternate = USARTx_TX_AF; //引脚功能复用 来作为串口1的TX
HAL_GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStruct);
/* UART RX GPIO pin configuration */
GPIO_InitStruct.Pin = USARTx_RX_PIN;
GPIO_InitStruct.Alternate = USARTx_RX_AF;
HAL_GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStruct);
/* NVIC for USART1 */
HAL_NVIC_SetPriority(USARTx_IRQn, 0, 1); //设置中断优先级
HAL_NVIC_EnableIRQ(USARTx_IRQn); //使能中断
}
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) //自己写函数 失能串口功能
{
失能外围时钟
将GPIO和NVIC配置恢复到默认状态
}
//it.c中的中断函数
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&UartHandle);
}
//串口配置完成
********************************************************************************
使能一下串口接收函数
uint8_t aRxBuffer, //
HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer,1); //串口配置完成后使能一下串口接收函数
发送函数 怎么使用可以自己封装
uint8_t aTxBuffer[] = " ****UART_TwoBoards_ComIT**** ";
HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer,strlen(aTxBuffer));//把aTxBuffer数据发送出去
//中断回调函数 程序自动调用 收到的数据会存储到Data_BUF数组中,每次使用完记得把 FramLength清零 变量全局
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if(FramLength<(BUF_MAX_LEN-1)) //判断接受长度
Data_BUF[FramLength++]=rxdata;
HAL_UART_Receive_IT(&usart1_handler,&rxdata,1); //每次接收完之后重新使能串口接收接受一个字节
}