查看: 3437|回复: 1

STM32L476 NUCLEO 开发板 串口被坑2小时解决

[复制链接]
  • TA的每日心情
    无聊
    2016-12-23 14:05
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2016-9-27 11:24:42 | 显示全部楼层 |阅读模式
    分享到:
    本次被坑,就是这个函数居然发送不成功。
    注意我不是直接用的ST 的例程,而是自己写的,调用这行代码。
    if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000)!= HAL_OK)
      {
        Error_Handler();   
      }

    怀疑
    1: aTxBuffer有问题。试过OK。
    2: TXBUFFERSIZE有问题。试过OK。
    3: 串口GPIO定义错误,实际我确实用错了串口吗,不过改了还是没反应。
    #define USARTx_TX_PIN                    GPIO_PIN_9
    #define USARTx_TX_GPIO_PORT              GPIOA
    #define USARTx_TX_AF                     GPIO_AF7_USART1
    #define USARTx_RX_PIN                    GPIO_PIN_10
    #define USARTx_RX_GPIO_PORT              GPIOA
    #define USARTx_RX_AF                     GPIO_AF7_USART1

    4. 我怀疑是晶振的问题,可能我用的外部晶振,但是外部晶振没焊接,但是LED正常,用示波器测试TXD电平没变化。
    5. 这个时候,我想看下普通GPIO配置成UART的函数,为什么有这个想法,因为我把整个程序读完了,没发现这一部分。所以我直接搜索 USARTx_TX_PIN          这个在哪里出现过。
    这一搜不打紧,搜出的结果道吃惊,因为我只搜到一条定义。
    main.h 60 #define USARTx_TX_PIN                    GPIO_PIN_9
    根本就没用道。

    6. 因此我对比原版ST例程,这个定义出现的地方,原版确在 stm32l4xx_hal_msp.c 用到,而我的工程没这个头文件。但是也编译过了.  而我程序用到了 stm32l4xx_hal_msp.c 里面的函数,那么我产生一个疑问,如果一个函数只有声明没有定义,难道编译也能通过?仅此教训
    7. 加入此文件,串口正常。
    8. 这次总结2条,第一,如果一个函数只有声明没有定义也能编译通过。第二: ST的 新库变化较大,和我以前用M3差别很大,比如 stm32l4xx_hal_msp.c 这个文件,我都不知道还有它。



    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-7-6 08:48
  • 签到天数: 169 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-9-27 15:06:59 | 显示全部楼层
    只有声明没有定义,也可能是把源文件编译成了一个库了。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 09:46 , Processed in 0.120512 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.