1回答

1收藏

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

STMCU STMCU 4095 人阅读 | 1 人回复 | 2016-09-27

本次被坑,就是这个函数居然发送不成功。
注意我不是直接用的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 这个文件,我都不知道还有它。



分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

jinyi7016

发表于 2016-9-27 15:06:59 | 只看该作者

只有声明没有定义,也可能是把源文件编译成了一个库了。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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