野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5790|回复: 5

小白求助:stm32用hal库中串口发送指令为什么不行

[复制链接]
发表于 2022-9-9 23:10:46 | 显示全部楼层 |阅读模式
激光测距模块资料
屏幕截图 2022-09-09 221036.png
屏幕截图 2022-09-09 221048.png
回复

使用道具 举报

 楼主| 发表于 2022-9-9 23:11:31 | 显示全部楼层
我的代码:
/* USER CODE BEGIN 0 */
#define u8 unsigned char

        u8 receive[9],send[4];
        char str[80]="";
        struct
        {
                uint8_t sign;
                uint8_t type;
                uint8_t amount;
                uint16_t distance;
                uint8_t mode;
                uint8_t temp;
                uint8_t sum;
        }GY_56_tx = {0x5A,0x15,0x03,0,0,0,0},*p_gy=&GY_56_tx;
        struct
        {
                uint8_t spads;
                uint8_t temp_correction;
                uint8_t deviation_correction;
                uint8_t win_correction;
                uint8_t load_data;
                uint8_t  measure_mode;
                uint8_t output_mode;
                uint8_t baud;
                uint8_t save_mode;
                uint8_t max;
                uint8_t min;
        } GY_56_rx = {0x0a,0x10,0x21,0x32,0x43,0x54,0x65,0x76,0x87,0x98,0xa9},*p_gy_r=&GY_56_rx;
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
        if(huart->Instance==USART1)
        {
               
        }
        if(huart->Instance==USART2)
        {
                uint8_t receive[20]={0};
               
        }
        if(huart->Instance==UART4)
        {
               
        }
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        if(huart->Instance==USART1)
        {
               
        }
        if(huart->Instance==USART2)
        {
                uint8_t receive[20]={0};
               
        }
        if(huart->Instance==UART4)
        {
               
        }
}
//void send_com(u8 function,u8 value )
//{
//        u8 bytes[4]={0};
//        bytes[0]=0xa5;
//        bytes[1]=function;//功能指令
//        bytes[2]=value;//指令值
//        USART_Send(bytes,4);//发送帧头、功能字节、校验和
//}
//void USART_Send(uint8_t *Buffer, uint8_t Length)
//{
//        uint8_t i=0;
//        while(i<Length)
//        {
//                if(i<(Length-1))
//                Buffer[Length-1]+=Buffer[i];//累加Length-1前的数据
//                HAL_UART_Transmit(&huart1, &Buffer[i++],sizeof(Buffer[i++]),10000);
//        }
//}
void send_gy(u8 fuction,u8 value)
{
        send[0]=0xa5;
        send[1]=fuction;
        send[2]=value;
        send[3]=send[0]+send[1]+send[2];
        HAL_UART_Transmit(&huart2,send,sizeof(send),1000);
}
void receive_gy()
{
        uint8_t j=0;
        char t[20];
        for(j=0;j<9;j++)
        {
                HAL_UART_Receive(&huart2,&receive[j],sizeof(receive[j]),1000);
                sprintf(t,"%d\n",receive[j]);
                HAL_UART_Transmit(&huart1,t,sizeof(t),10000);
        }
       
        if(receive[0]!=p_gy->sign|receive[0]!=p_gy->sign)
        {
                char f[]="failure\t";
                HAL_UART_Transmit(&huart1,f,sizeof(f),10000);
        }
        else
        {
                p_gy->distance=(receive[4]<<8)|receive[5];
                p_gy->temp=receive[6];
                p_gy->temp=receive[7];
            p_gy->sum=receive[8];
                sprintf(str,"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t",receive[0], receive[1],receive[2],receive[3],receive[4], receive[5],receive[6],receive[7],receive[8]);
                HAL_UART_Transmit(&huart1,str,sizeof(str),10000);
                sprintf(str,"dis:%u cm\t mode:%u\t temp:%u\t sum:%u\n",p_gy->distance, p_gy->mode,p_gy->temp,p_gy->sum);
                HAL_UART_Transmit(&huart1,str,sizeof(str),10000);
                sprintf(str,"dis:%u cm\t mode:%u\t temp:%u\t sum:%u\n",receive[4], receive[5],receive[6],receive[7]);
                HAL_UART_Transmit(&huart1,str,sizeof(str),10000);
        }
               
}
/* USER CODE END 0 */
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-9 23:11:59 | 显示全部楼层
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART4_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  char s[]="send success\n";
  send_gy(p_gy_r->measure_mode,1);  
//   HAL_UART_Transmit(&huart1,s,sizeof(s),1000);
//  send_gy(p_gy_r->save_mode,1);
//  receive_gy();
//  HAL_UART_Transmit(&huart1,s,sizeof(s),1000);
  
//        u8 sum=0,i=0;
//    sensor GY56;
//        u8 re_Buf_Data[9]={0},Receive_ok;
//        send_com(0x65,1);//发送连续输出指令
//        while(1)
//        {
//                if(Receive_ok)//串口接收完毕
//                {
//                        for(sum=0,i=0;i<(re_Buf_Data[3]+4);i++)
//                        sum+=re_Buf_Data;
//                        if(sum==re_Buf_Data)//校验和判断
//                        {
//                                GY56.distance=re_Buf_Data[4]<<8|re_Buf_Data[5];
//                                GY56.mode=re_Buf_Data[6];
//                                GY56.temp=re_Buf_Data[7];               
//                                HAL_UART_Transmit(&huart1,&(GY56.distance),sizeof(GY56.distance),10000);//上传给上位机
//                        }
//                        Receive_ok=0;//处理数据完毕标志
//                }
//        }
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
          HAL_Delay(5000);
          receive_gy();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-9 23:12:31 | 显示全部楼层
被注释掉的是官方给的程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-10 10:01:52 | 显示全部楼层
有大佬可以帮忙看一眼吗,好几天都弄不出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-10 10:02:30 | 显示全部楼层
或者有小大佬帮忙指指路也可以的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 02:34 , Processed in 0.038157 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表