STM32L476 NUCLEO 开发板 串口被坑2小时解决
STMCU
4095 人阅读
|
1 人回复
|
2016-09-27
TA的每日心情 | 无聊 2016-12-23 14:05 |
|---|
签到天数: 7 天 连续签到: 1 天 [LV.3]偶尔看看II
进士
- 积分
- 2165
|
本次被坑,就是这个函数居然发送不成功。
注意我不是直接用的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的每日心情 | 慵懒 2025-4-18 17:49 |
|---|
签到天数: 170 天 连续签到: 1 天 [LV.7]常住居民III
版主
- 积分
- 1734
 
|
沙发
jinyi7016
发表于 2016-9-27 15:06:59
|
只看该作者
|
只有声明没有定义,也可能是把源文件编译成了一个库了。 |
|
|
|
|
|
|
|
|