精华内容
下载资源
问答
  • STM32踩坑:STM32串口发送乱码问题

    千次阅读 2020-10-16 09:36:05
    STM32串口发送乱码问题 小编是一个嵌入式初学者,才学没多久,将近两个月的样子,在学习过程中遇到了一些问题,在这里给大家分享一下解决方案。 今天要分享的问题是 STM32 串口发送字符串,但是在调试助手上面接收到...

    STM32串口发送乱码问题

    小编是一个嵌入式初学者,才学没多久,将近两个月的样子,在学习过程中遇到了一些问题,在这里给大家分享一下解决方案。

    今天要分享的问题是 STM32 串口发送字符串,但是在调试助手上面接收到的字符却是一串乱码,看着让人头疼。
    这是乱码的图片
    这是乱码的图片

    然后问了公司办公室的大佬,也在网上查了一下资料,总结了一下,原因大致有两点:
    1) 开发板上外部时钟的晶振与代码中的外部时钟的晶振不一致(这是我写的串口实验发生乱码的原因)
    在这里插入图片描述

    2) 串口调试助手接收数据的波特率与串口初始化时的波特率不一致(这种乱码情况我没有遇见过)

    如果是第一种情况,那么找到 stm32Fxxx.h (F1 系列的是 stm32F1xx.h,F3 系列的是 stm32F3xx.h,F4 系列的是 stm32F4xx.h,F7 系列的是 stm32F7xx.h,没用过 F3 系列的,不过文件应该是对应的)文件,找到以下相对应的代码进行修改即可。

    //以下代码是对 HSE 外部高速时钟的晶振的一个设置
    //修改前
    #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
    
    //修改后
    #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
    

    这里我是将参数 25000000 改成了 8000000,具体的还是要看开发板上晶振模块的数值。

    如果是第二种情况,那么就需要检查串口调试助手接收数据的波特率与串口初始化时的波特率(一般在串口初始化函数中,如果使用的自带的函数初始化,那么需要找到对应的文件进行修改)是否一致了,下面是我自己的检查结果截图,仅供参考。
    波特率检查结果
    下面是修改成功后,调试助手收到的结果截图。
    最终结果
    以上均为小编自己的总结,若存在侵权,请联系小编。

    展开全文
  • stm32写了个串口程序 上位机发送一个数字 返回一个数字,可是返回的是些不认识的字符,波特率已经同步9608 数据停止位 等都是一样的,tx接rx 还是乱 换了3个串口调试助手都是一样的,有谁知道,谢谢解答
  • 在用原子的F407探索者开发板时,由于是用的野火的工程模板,导致了一些串口发送乱码、定时器定时不准的问题。如果你也有类似的问题,这个或许可以帮到你。 原因 SYSCLK 系统时钟来源有三个方面:HSI,HSE 和 PLL。在...

    前言

    在用原子的F407探索者开发板时,由于是用的野火的工程模板,导致了一些串口发送乱码、定时器定时不准的问题。如果你也有类似的问题,这个或许可以帮到你。

    原因

    SYSCLK 系统时钟来源有三个方面:HSI,HSE 和 PLL。在我们实际应用中,因为对时钟速度要求都比较高我们才会选用 STM32F4 这种级别的处理器,所以一般情况下,都是采用 PLL 作为 SYSCLK时钟源,而系统时钟配置不正确就是PPL这里出了问题。

    先看一下主PPL在整个时钟树中间的位置。
    在这里插入图片描述
    在这里插入图片描述

    高速系统时钟一般由PPL_P提供,一般配置为最高168M。

    根据公式:
    PLL = HSE * N / (M * P) = 8MHz * 336 / (8 * 2) = 168MHz

    参数 说明
    HSE 晶振大小(MHz)
    N 倍频器倍频系数
    P 分频器分频系数
    M 分频器分频系数

    系数可以随意选择,只要是让公式最后的结果为168应该都可以,但是在标准库中一般N、PD固定了的。HSE会随着板子上不同的晶振而修改,还有M也可以用来修改系统时钟频率。不过不建议随意修改,因为我菜,菜,菜,留下了没有技术含量的眼泪。

    接下来只要在库文件中修改HSE和PPL_M就可以了。

    修改

    之所以会出现这个问题,是由于系统时钟配置不正确

    1. 要将高亮的地方改为8000000
    (在stm32f4xx.h里面)
    在这里插入图片描述

    2. 将高亮的地方改为8
    (在system_stm32f4xx.c里面)

    在这里插入图片描述
    经过这两个修改就可以正常使用了。

    展开全文
  • STM32F105的串口乱码问题

    千次阅读 2017-10-11 23:56:38
    STM32F105的串口乱码问题我在调试STM32F105时,串口发送数据一致乱码,找来找去,原来问题还是出现在软件配置上。 然后我发现在文件stm32f10x.h中有这么一段代码。if !defined HSE_VALUE#ifdef STM32F10X_CL #...

    STM32F105的串口乱码问题

    我在调试STM32F105时,串口发送数据一致乱码,找来找去,原来问题还是出现在软件配置上。
    然后我发现在文件stm32f10x.h中有这么一段代码。

    if !defined HSE_VALUE

    #ifdef STM32F10X_CL
    #define HSE_VALUE ((uint32_t)25000000) /!< Value of the External oscillator in Hz /
    #else
    #define HSE_VALUE ((uint32_t)8000000) /!< Value of the External oscillator in Hz /
    #endif /* STM32F10X_CL */

    endif /* HSE_VALUE */

    HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator
    这个是官网默认外部晶振25MHZ
    然而我使用的外部晶振为8MHZ所以改成

    ifdef STM32F10X_CL

    #define HSE_VALUE ((uint32_t)8000000) /!< Value of the External oscillator in Hz /
    #else
    #define HSE_VALUE ((uint32_t)8000000) /!< Value of the External oscillator in Hz /
    #endif /* STM32F10X_CL */

    endif /* HSE_VALUE */

    展开全文
  • 问题现象:STM32F103VET6 + FreeRTOS_V9.0 + UART1 使用printf重映射后,串口输出汉子乱码。 使用固件版本: FreeRTOS V9.0.0 可能原因分析: 重映射错误 FreeRTOS操作系统实时性打断一帧数据发送 时钟配置...
    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 的值对系统正常运行的影响。

     

     

    展开全文
  • 关于STM32 USART DMA数据发送串口助手接收显示乱码问题总结 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解...
  • 串口调试助手向STM32发送数据过多时,串口调试助手会自动返回一组乱码数据,如图。想知道原理和解决方法!!!波特率、缓冲区字节之类的参数都是设置正确的。数据在120个字节以下,不会出现次现象。求解答!!!!!...
  • 在代码中,用串口发送数据乱码...... 检查配置发现:RCC中的HSI Calibration Value为16,查看Cube生成的代码: 默认值16是针对47x或48x的,我使用的432x不能使用该值,手动设置该值为0,串口输出数据不再乱码了....
  • 我把源代码打开后找到bsp文件夹,发现里面有stm32f40x的移植工程,于是惊喜万分,没有做任何修改就把工程下载到了我自己的stm32f407 开发板上,led显示的状态正常,可就是串口发回来的数据全是乱码...从网站上看了看好多...
  • STM32串口通信中遇到有规律的乱码

    千次阅读 2013-07-24 15:31:33
    STM32串口通信  这几天学习调试串口通信,一连好几天串口收发的都是乱码。之前的乱码毫无规律,发现是串口硬件没有配置好,此处的配置有三处。 (1)程序中,向量中断控制器的初始化配置 (2)电脑硬件串口...
  • stm32f103串口发送问题

    2013-08-02 01:51:53
    TimeVal = TIM4->CNT; TimeVal = TimeVal; datal = TimeVal & 0x00ff; //取低八位 ... datah = TimeVal & 0xff00;... while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==...为什么我串口接收到的数据乱码
  • 使用两个蓝牙HC08透传时,接收端接STM32C8T6串口1 9600波特率,数据总是读取不正确,发过来乱码。同样的程序改为有线ÿ...接收端是STM32使用程序读取串口1。 有没有高手帮忙解决问题?</p>
  • 一般我们发送一个字符的话就是使用下面这个函数。 比如: USART_SendData(USART1,'a');...然而呢,大家应该发现了,如果直接这么用的话,接受到的数据乱码。 然后,经过多次尝试的朋友可能发现:如果在中间...
  • STM32串口通讯问题

    2019-04-07 10:05:00
    关于STM32,本人还是小白,以下是我在串口遇到的一些问题总结及解决方法,希望能帮到你 1、乱码问题,首先考虑的是波特率问题(波特率要统一) 2、上位机接收不到数据(前提是代码逻辑没问题),还是波特率...
  • 后面经过排查发现是串口发送函数导致的,出错代码如下。出错原因就是发送完成标志还没有置位,就进入了低功耗模式,导致退出时再次发送就会出问题(具体原因还未知,手册里面有这样一段话“ 数据发送期间不应复位 ...
  • 简介:STM32与上位机之间用通信协议(自己定义)进行串口通信。怎么判断上位机发过来的指令是正确的,而不是一串乱码?怎么从正确的指令中提取出想要的命令代号,从而实现想要的功能?(闲来无事,写个玩玩,原创!第...
  • 单片机从出现到现在被普遍应用,时间并不长,但是单片机的发展是非常迅猛的。 我们在常见的电子产品中常常会见到它的身影。 例如:遥控器、手机、PC外围...当STM32串口发送时,首先我们要先检查STM32的状态如何,状
  • 使用开发板为stm32f103. USART串口显示乱码问题往下翻 上原理图: DHT11数据传送过程解释: 步骤一: DHT11 上电后(DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境 温湿度数据,并...
  • STM32 USART出现乱码

    万次阅读 多人点赞 2017-09-27 19:41:51
    USART使用串口助手调试时出现乱码的情况,一般都是波特率的问题,例如:向串口发送“hello world\r\n”,但是串口助手收到的数据却是这样: 于是我仔细检查代码中设置的波特率的大小,发现没错,也是设置为115200,...
  • 刚开始的时候,以为是晶振没弄清楚,检查了板子上是H8.000k5,那个官方文件HSE值也是8M没有问题的,,检查MDK的设置,也是8M,...折磨了很久,求助大神呢用官方探索者stm32F407ZET6开发板的串口实验也乱码这是串口相...
  • stm32f103 串口实验

    2021-04-06 16:35:22
    但是在串口调试助手发送数据时,乱码,甚至发不出去 <code>#include "stm32f10x.h" #include "sys.h" #include"delay.h" #include"usart.h" void My_USART1_Init...
  • 今天总结一下关于串口双机通信的方法,我们在日常项目开发中经常会用到串口,需要将一包数据从一个单片机发到另一个单片机上,经常会有人在这块儿遇到困难,要么会出现不能发送,或者不能接收,或者数据出现乱码,丢...
  • 用MFC写了一个串口接收的函数,为了测试,单片机stm32每隔一秒不停地发送同一个数,比如是0x32,想显示在接收框里面,但是每次显示都是乱码,如果以16进制显示就是8位16进制码。 设置断点调试了一下,发现bt是成功...
  • 最近玩stm32,使用串口发送数据在PC端使用串口工具检测接收到的数据,发现STM32串口发送到电脑的数据乱码,按下复位键总是显示FF,配置GPIO的时候先打开GPIO时钟再初始化GPIO和串口问题就解决了(可能是顺序问题) ...
  • ={1,2,3,4,5,6,7,8},然后分别利用普通串口发送函数发送可以正常发送和利用DMA发送,并利用串口调试助手查看,发现助手可以正确接收普通串口发送函数所发出的数据,而对于DMA发送的数据,接收到的是一堆乱码。...
  • 串口输出中文乱码

    千次阅读 2020-07-29 17:14:03
    最近在使用OpenMV,但是由于没有转接板和软排线来连接串口,不过手上有一块STM32F4的开发板,于是就想到将其作为一个转接,通过其接收OpenMV发送数据,并将其转发到电脑上,结果串口助手一直输出乱码。 寻找问题...
  • 问题1:两个串口无法同时发送数据;一个正常,一个乱码; 解决:修改fifo大小 问题2:两个串口同时打开才可以正常通信 原因:usb缓冲区数据未被上位机读走时,缓冲区满后会溢出,导致无法hcdc->TxState未...
  • 1、查看你使用的USB转串口是3.3V的串口还是5V串口,如果发送方使用的是3.3V然后你使用的USB转串口是5V是可以收到数据的但收到的数据都是错误的 2、查看波特率、奇偶校验、停止位等是否设置正确。 3、如果是STM32,...
  • 使用两个STM32F103ZET6单片机,主机负责采集语音,AD转换后存入内部FLASH; 再通过串口协议将FLASH里的内容发送至从机,使用激光头代替串口线; 从机收到串口的信息并DA转换后,经功放传至喇叭。 问题出在将...
  • 并通过队列给线程D、线程E、和线程F发送数据;线程D负责通过队列获取C发送的数据,并将数据处理后通过队列将结果发送给线程F;线程E负责将接收的数据保存到SD卡;线程F负责将接收的数据通过...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

stm32串口发送数据乱码