串口接受不了消息,乱码问题

收不了消息(一)

发送消息,代码所写应该为接受后发送,但是并没有出现

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
    
  uint8_t byte;
  uint8_t len;
  uint8_t buf[32]="";
 
  while (1)
  {
			if(HAL_UART_Receive(&huart1,&byte,1,100)==HAL_OK)
		{
		   if(byte=='\n')
			 {
			 	HAL_UART_Transmit(&huart1,buf,len,100);
				 // printf("%s\n",buf);
				memset(buf,0,sizeof(buf));
				  len=0;
			 }
			 else
			 buf[len++]=byte;
		}

  }

}

image.png

解决方法


  uint8_t len;
  
int main(void)
{
      uint8_t byte;
    uint8_t buf[32]="";
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  while (1)
  {
			if(HAL_UART_Receive(&huart1,&byte,1,100)==HAL_OK)
		{
		   if(byte=='\n')
			 {
			 	HAL_UART_Transmit(&huart1,buf,len,100);
				 // printf("%s\n",buf);
				memset(buf,0,sizeof(buf));
				  len=0;
			 }
			 else
			 buf[len++]=byte;
		}

  }

}

image.png解决了,将变量定义为全局,细节上,可以只把len变量放在全局就行了

收不了消息(二)


  uint8_t len;
  
int main(void)
{
      uint8_t byte;
    uint8_t buf[32]="";
    HAL_Delay(500);
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  while (1)
  {
			if(HAL_UART_Receive(&huart1,&byte,1,100)==HAL_OK)
		{
		   if(byte=='\n')
			 {
			 	HAL_UART_Transmit(&huart1,buf,len,100);
				 // printf("%s\n",buf);
				memset(buf,0,sizeof(buf));
				  len=0;
			 }
			 else
			 buf[len++]=byte;
		}

  }

}

解决方案

去掉第8行的HAL_Delay(500); 就解决了

收不了信息(三)

当代码这些都没有问题的时候,需要大胆考虑是不是硬件方面的问题。

  1. 串口接线换一下
  2. 主板换一下
  3. 考虑一下干扰问题

乱码问题

用重定向实现,发现是乱码

//重定向
int  fputc(int ch,FILE *F)
{
  while(!(USART1->ISR & 1<<7)){}
  USART1->TDR=ch;
	return 0;
}

printf("hello\n");

image.png

解决方案

image.png
勾选Use Micro LIB
image.png

posted @ 2023-07-03 15:58  moveddowm  阅读(42)  评论(0编辑  收藏  举报