• 2015.8.3stm32f4串口调试记录


    由于最近要做一个IRIGB的转码模块,需要从GPS模块获取时间数据,处理器和GPS采用串口通信的方式。由于串口通信用得太多,就直接上手将串口的配置代码写完,然后试着用串口发送一个字符‘2‘,然后通过PC上的串口调试助手,可以看到我收到的是一个’向上的箭头‘。于是问题来了,对于我这个单片机玩了都不玩的人来说,这似乎有点弱智,可是我调了一下午也没发现什么端倪,因为,这个代码确实是比较简单。最后没有办法只有用百度去搜搜类似的问题,百度上答案无非都是在说是时钟配置问题,但是这一点我似乎不太相信。因为之前我也遇到过类似时钟配置的问题,但是后来我都改过来了,所以时钟配置应该是没什么问题的。我还用个LED测试了一下,让他每隔一秒闪烁一下,结果显示正常。之前时钟出问题是由于板载时钟是8MHz,但是在文件system_stm32f4xx.c中却将PLL_M设置成了25,改过来之后就好了。

    /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
    #define PLL_M      8
    #define PLL_N      336
    

    抱着对时钟配置正确的想法,我又折腾了很久,还是没有丝毫进展,于是又去仔细查看别人的回答,偶然看到一个人的回答,他说时钟配置除了以上位置要改之外,还有一处要设置,我按照他的方法设置之后,测试结果正确。这一处代码就在stm32f4xx.h中:

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

      原来里面的是((uint32_t)25000000),这里由于板载时钟是8MHz,所以要将其改为8000000

      2016.5.30

    做网络通信,用串口配置WiFi时,发现串口出现乱码,调试许久无果。怀疑是时钟问题,经查找,发现除了上面两处跟时钟相关的地方之外还有一处就是在stm32f4xx.conf.h里面。有这样一段代码:

    #if defined (HSE_VALUE)
    /* Redefine the HSE value; it's equal to 8 MHz on the STM32F4-DISCOVERY Kit */
    #undef HSE_VALUE
    #define HSE_VALUE ((uint32_t)8000000)
    #endif /* HSE_VALUE */

    由于本次单片机用的时钟是10MHz的时钟,修改时只修改了上面头两处,然后在主函数里面用IO和延时输出脉冲发现,输出方波正常,但是串口乱码。然后发现在stm32f4xx.conf.h里面有这样一处,发现在这里将之前的HSE_VALUE(10MHz)已经#undef,然后重定义成了8MHz,所以造成串口时钟对不上。

  • 相关阅读:
    Phpstudy升级到Mysql8
    PHP 匿名函数使用技巧
    PHP 中的CURL 模拟表单的post提交
    Go中局部全局变量的区分
    Php中的goto用法
    struct的匿名用法详解
    Go中多个返回值的技巧
    C# 多线程之List的线程安全问题
    C# 多线程七之Parallel
    C# 多线程六之Task(任务)三之任务工厂
  • 原文地址:https://www.cnblogs.com/wan0807/p/4699711.html
Copyright © 2020-2023  润新知