查看: 430|回复: 1

[原创] STM32L476 NUCLEO 开发板 串口被坑2小时解决

[复制链接]

94

主题

3

好友

1764

积分

进士

Rank: 5Rank: 5

  • TA的每日心情

    2016-11-20 10:28
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 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 这个文件,我都不知道还有它。



    回复

    使用道具 举报

    12

    主题

    0

    好友

    819

    积分

    举人

    Rank: 4

  • TA的每日心情
    慵懒
    2016-11-25 23:13
  • 签到天数: 123 天

    [LV.7]常住居民III

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

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-8 06:13 , Processed in 0.079606 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部