STM32G431学习笔记(二)之串口的发送和接收

一、串口的配置

PA10->USART1_Rx

PA9->USART1_Tx

USART1 Mode:Asyncharonous

波特率:9600

开启串口收发使能中断

二、串口的初始化

char rxarr[8];//串口接收数组
char arrow=0;//串口计数
uint8_t rxdata;//串口缓存

三、串口接收

1、串口接收需要在主函数中开启中断;

2、接着编写串口接收的中断回调函数;

3、然后编写串口接收中断的处理函数。

/* USER CODE BEGIN 2 */
	
	LCD_Init();
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
	
	HAL_TIM_Base_Start_IT(&htim16);
	HAL_UART_Receive_IT(&huart1,(uchar *)&rxdat,1);//开启串口接收中断
	HAL_TIM_PWM_Start_IT(&htim2,TIM_CHANNEL_2);
 
	LED_disp(0x00);

  /* USER CODE END 2 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//接收中断回调函数
{
    if(huart->Instance==USART1)//如果中断来自串口1
    {
        rxarr[arrow++]=rxdata;//将接收到的字符rxdata存储到Rxarr数组中,并增加串口计数的值
        HAL_UART_Receive_IT(&huart1,&rxdata,1);//只能中断一次,连续接收再次打开
    }
}
void UART_RX(void)//判断串口有没有接收完字符
{
    uchar temp;
    if (arrow != 0)
    {
        temp=arrow;
        HAL_Delay(1);
        if(temp==arrow)
       {
            StringHandle();//串口接收处理函数
       }
    }
}

//处理串口接收的数据
void StringHandle(void)
{
    if(arrow>0)
    {
        //这里编写接收的处理
    }
}

四、串口发送

串口发送不需要中断


  * @param huart   UART handle. //函数句柄,例如&huart1 
  * @param pData   Pointer to data buffer (u8 or u16 data elements). //要发送的数据地址,常为数组名
  * @param Size    Amount of data elements (u8 or u16) to be sent. //发送的数据大小
  * @param Timeout Timeout duration. //发送有效时间
 
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

例如:

HAL_UART_Transmit_IT(&huart1,"Error of type\r\n",sizeof("Error of type\r\n"));
while(huart1.gState != HAL_UART_STATE_READY);//确保上次中断发送完,再进行下次中断

你可能感兴趣的:(STM32G431,学习,笔记)