STM32
直播中

张国厚

8年用户 1439经验值
私信 关注
[问答]

萌新求助,求STM32HAL库中断模式串口初始化收发数据的程序

萌新求助,求STM32HAL库中断模式串口初始化收发数据的程序

回帖(1)

王坤

2021-11-16 15:11:59
hal库里面路径:STM32Cube_FW_L0_V1.10.0ProjectsSTM32L053C8-DiscoveryExamples UARTUART_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); //每次接收完之后重新使能串口接收接受一个字节
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分