手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。* A0 N: L. {4 ^+ b% ]! d! L0 q 使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。: \) W/ r7 t* l# ^8 X7 O$ Q" b 使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在.1 P/ D, N# ^( G1 Z0 F L 首先看STM32F103传通驱动的代码:8 n/ x! n# h+ M& o4 p C, Q /** USART1 GPIO Configuration / J0 e: Y3 o: v* m PA9 ------> USART1_TX PA10 ------> USART1_RX */ 0 l7 O% \/ S" k/ L4 D /*Configure GPIO pin : PA */5 H9 ?" Y, \# N& w. A. s4 H GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;/ [7 {/ Z- h( a( ?6 i7 @ GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); . e5 }. f' g% K2 r6 B9 n /*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;; S/ y+ L1 v. }; y 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驱动时 /**USART2 GPIO Configuration PA2 ------> USART2_TX4 K4 K6 y; J6 J/ M4 g. R0 h, i# w PA3 ------> USART2_RX 7 h* G' T! }# u6 k3 @. {. w */8 U7 M' n' X5 f$ h GPIO_InitStruct.Pin = GPIO_PIN_2;$ ^+ i J8 `2 h y8 a( B GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;% O6 }' P5 T/ Y) R7 s GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF4_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);6 _; b8 O. L$ f' _; z ; w2 Q( E: G4 |; c* }' x GPIO_InitStruct.Pin = GPIO_PIN_3;- L8 j8 M: D: P; B2 v' q& H //GPIO_InitStruct.Mode = GPIO_MODE_INPUT;(这句千万不能要)7 W1 f0 e0 I$ X! j9 o- {8 K* m& V GPIO_InitStruct.Alternate = GPIO_AF4_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);9 z1 g1 ]$ ]2 R3 X5 [; c2 y/ G 希望能给后面使用HAL驱动的人提供点经验,少走弯路。 |
楼主我这样配置也能接收哦!
合在一起写也是可以的。