阿麥Mai 2023-03-20 20:32 采纳率: 57.1%
浏览 76
已结题

stm32串口传输乱码是为什么?

int main(void)
{
    uint16_t Buf[2] = {0};
  /* 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_DMA_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_ADCEx_Calibration_Start(&hadc1);
  HAL_ADC_Start_DMA(&hadc1, (uint32_t * )Buf, 2);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      printf("ADC1=%d\n\r", Buf[0]);
      HAL_UART_Transmit(&huart1, Buf, sizeof(Buf), 10000);
      HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */
}

img

  • 写回答

3条回答 默认 最新

  • qllaoda 2023-03-21 09:42
    关注

    因为你的串口传输的是原始数值,而数值对应的ascii码一般都不是可显示字符,即使可显示也不是你想要的,所以当然就是“乱码”,你也说了hex模式是正常的,那自然就不是文本了,接收显示用文本模式当然就是乱码了。
    说到底还是C语言基础没学好,没搞清字符和数值的区别和联系。
    如果你希望传输文本,建议你先把数值转换成对应的文本字符串,可以用sprintf转换
    比如
    char dispbuf[100]
    sprintf(disbuf, "%d", buf[0]);
    HAL_UART_Transmit(&huart1, dispbuf, strlen(dispbuf), 10000);
    当然,如果print重定向好了,也可以直接用printf格式化输出

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月23日
  • 已采纳回答 3月21日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题