zoukankan      html  css  js  c++  java
  • STM32对HAL库的串口不定长度的读写操作(三)

    关于利用中断实现串口不定长接收,还可以使用串口通讯协议来控制读写的长度。

    先设定停止结束标志位为0x02(自定义)。

    新建一些数组备用:

    uint8_t value;    //进入中断接收数据的变量  或 uint8_t value[1];
    uint8_t getBuffer[50];  //保存接收到的数据的数组
    uint8_t countOfGetBuffer = 0;    //接受到的数据长度

    在main函数的while循环前利用下面函数开启串口接收中断:

    HAL_UART_Receive_IT(&huart1, (uint8_t *)(&value), 1); //打开串口中断接收
    //或者value[1]对应的HAL_UART_Receive_IT(&huart1, (uint8_t *)value, 1);
    
    

    接下来可以选在重写串口接收回调函数,也可以在it.c中的中断执行函数中写。

    这里用stm32f1xx_it.c中的串口中断函数写,回调函数也是一样内容的:

    void USART1_IRQHandler(void)
    {
      /* USER CODE BEGIN USART1_IRQn 0 */
      /* USER CODE END USART1_IRQn 0 */
      HAL_UART_IRQHandler(&huart1);
      /* USER CODE BEGIN USART1_IRQn 1 */
        getBuffer [countOfGetBuffer] = value;    
        if(getBuffer[countOfGetBuffer] == 0x2A)  //停止位
        {
            Flag = 1;
        }
        countOfGetBuffer++;
        
        if(Flag == 1)  //停止位
        {
            if(getBuffer[0] == 0x00)//左移
            {
                Left();
            }
                else if(getBuffer[0] == 0x01)//右移复位
                {
                Reset_Motor();
                }
                else if(getBuffer[0] == 0x02)
                {
                    if((S2_Read != 0) && (S3_Read != 0))
                        HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7);
                }
                          
                for(uint8_t i = 0;i < 50;i++)  //清空缓存数组
                {
                        getBuffer[i] = 0;
                }
                Flag = 0;
                countOfGetBuffer = 0;            
        }        
          HAL_UART_Receive_IT(&huart1, (uint8_t *)&value,1); //每接收一个数据就打开一次接收
        
      /* USER CODE END USART1_IRQn 1 */
    }

    对于清空数组,有函数memset也可以直接清空缓存数组。

  • 相关阅读:
    oracle安装异常汇总
    使用口令文件认证
    oracle的网络连接
    只有数据文件恢复数据库
    ORACLE-SQLLOAD导入外部数据详解
    主,备数据库--静态监听配置
    使用RMAN Active duplicate创建异地auxiliary Database
    maven仓库之第一篇
    Oracle数据库之第四篇
    Oracle数据库之第三篇
  • 原文地址:https://www.cnblogs.com/zjx123/p/12928451.html
Copyright © 2011-2022 走看看