STM32HAL库中断模式串口初始化收发数据

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); //每次接收完之后重新使能串口接收接受一个字节

}

猜你喜欢

转载自blog.csdn.net/zzYuanWai/article/details/81136532