stm32f103 串口通讯 乱码问题 DeBug

  1. 问题现象:STM32F103VET6 + FreeRTOS_V9.0 + UART1   使用printf重映射后,串口输出汉子乱码。
  2. 使用固件版本: FreeRTOS V9.0.0   
  3. 可能原因分析:
    • 重映射错误
    • FreeRTOS操作系统实时性打断一帧数据发送
    • 时钟配置错误
    • 串口助手问题
  4. 调试思想与步骤:
    • 重映射错误的可能性不大: 重映射代码如下
      /**
        * 函数功能: 重定向c库函数printf到DEBUG_USARTx
        * 输入参数: 无
        * 返 回 值: 无
        * 说    明:无
        */
      int fputc(int ch, FILE *f)
      {
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
        return ch;
      }
      
      /**
        * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
        * 输入参数: 无
        * 返 回 值: 无
        * 说    明:无
        */
      int fgetc(FILE * f)
      {
        uint8_t ch = 0;
        HAL_UART_Receive(&huart1,&ch, 1, 0xffff);
        return ch;
      }

      能够printf数据。

    • 更换串口助手,发现不同串口助手收到的数据格式一样。基本可以排除串口助手问题。
    • 尝试发送英文字母,是否能够正常发送。 我的工程再发送英文字符时,仍为乱码。
    • 通过上一步,基本确定是项目工程设置,或者代码问题。
    • 硬件使用的时钟是8MHz,而系统时钟配置文件:system_stm32f1xx.c中的宏定义
      /*******************************************************************************
      *  Clock Definitions
      *******************************************************************************/
      #if defined(STM32F100xB) ||defined(STM32F100xE)
        uint32_t SystemCoreClock         = 24000000U;        /*!< System Clock Frequency (Core Clock) */
      #else 
        uint32_t SystemCoreClock         = 16000000U;        /*!< System Clock Frequency (Core Clock) */
      #endif

      使用的是:  SystemCoreClock         = 16000000U;

    • 将上面的代码改为: SystemCoreClock         = 8000000U;

    • 打印英文字符正常,然后打印中文字符,正常解决。中文字符能够正常显示。

  5. 思考:SystemCoreClock 的值对系统正常运行的影响。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪域蓝天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值