
手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。 使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。 使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在. 首先看STM32F103传通驱动的代码: /** USART1 GPIO Configuration PA9 ------> USART1_TX# h" T3 q' b4 X% O/ M! D& ~$ w [* R+ n PA10 ------> USART1_RX% O- `5 \* Z' a' k" t */2 _, @ [5 Q' H8 C . l9 Y7 w! c0 t" \, e- O /*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;! x+ C5 P) `$ o; a: r7 X' s GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;8 Q* c7 L% y [9 X GPIO_Init(GPIOA, &GPIO_InitStruct); M8 b( V/ q7 P, r3 @ /*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;$ v g9 C: E6 f1 f* F: x GPIO_Init(GPIOA, &GPIO_InitStruct);9 j+ S3 ~6 q* y9 m5 V3 X 在传通驱动下我们配置IO的时候,对于TX 我们配置GPIO_Mode为GPIO_Mode_AF_PP,对于RX我们配置GPIO_Mode为GPIO_Mode_IN_FLOATING。有时候人有惯性思维认为理所应当的在HAL里也应该一样,我就是在这个地方栽了跟头。在HAL驱动方式里,RX,TX必须都配置成GPIO_MODE_AF_PP。 代码如下:用HAL驱动时 /**USART2 GPIO Configuration PA2 ------> USART2_TX PA3 ------> USART2_RX % k5 `7 ?( B$ o */ GPIO_InitStruct.Pin = GPIO_PIN_2;" `$ p' }5 B# f3 _; W/ C% d. p GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;8 j1 a$ E- w3 O% b. b- z GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF4_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_3; //GPIO_InitStruct.Mode = GPIO_MODE_INPUT;(这句千万不能要)& L( C. G( t4 _6 S5 z GPIO_InitStruct.Alternate = GPIO_AF4_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);. M" n( ^2 |" |* J$ n 希望能给后面使用HAL驱动的人提供点经验,少走弯路。 |
楼主我这样配置也能接收哦!
合在一起写也是可以的。