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

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日

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器