|
手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。 使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。1 L f' E5 e( q+ S$ x3 `: T* Z 使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在. 首先看STM32F103传通驱动的代码:& h2 {4 l4 W5 @7 a! `1 P0 U- q /** USART1 GPIO Configuration : Y; ? b8 o9 X3 n; _/ T PA9 ------> USART1_TX PA10 ------> USART1_RX */ - b9 N K! t0 N/ b /*Configure GPIO pin : PA *// D3 L* X* ?0 X GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;. r% X0 d6 X# X GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;: |+ O( H1 L0 K5 L# H/ N, k GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;; n& p" [0 T. V1 ^ GPIO_Init(GPIOA, &GPIO_InitStruct); 在传通驱动下我们配置IO的时候,对于TX 我们配置GPIO_Mode为GPIO_Mode_AF_PP,对于RX我们配置GPIO_Mode为GPIO_Mode_IN_FLOATING。有时候人有惯性思维认为理所应当的在HAL里也应该一样,我就是在这个地方栽了跟头。在HAL驱动方式里,RX,TX必须都配置成GPIO_MODE_AF_PP。 代码如下:用HAL驱动时8 c* ?* J/ a* S /**USART2 GPIO Configuration PA2 ------> USART2_TX PA3 ------> USART2_RX , a, j* S5 a. }0 ?& } */ GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;( C w/ `. W3 m& y/ u- d5 q+ W2 z GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF4_USART2;% \3 ]+ R& r. F% f: u HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 9 G. I/ ]+ N! D! V GPIO_InitStruct.Pin = GPIO_PIN_3; //GPIO_InitStruct.Mode = GPIO_MODE_INPUT;(这句千万不能要), c! u0 d' P& |3 w$ H5 u; ?8 G GPIO_InitStruct.Alternate = GPIO_AF4_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);- P6 C: e8 K! N 7 N7 G* I* g# I. K' K 希望能给后面使用HAL驱动的人提供点经验,少走弯路。: t, q. X, A& B" r5 E+ U' }% v4 L |
微信公众号
手机版
楼主我这样配置也能接收哦!
合在一起写也是可以的。