
手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。# J! g4 w! v8 ] 使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。 使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在.+ I& J! T$ h j; y( Z 首先看STM32F103传通驱动的代码:! _/ [6 t2 V& x# ] /** USART1 GPIO Configuration + M3 a: Y3 c4 a. G4 [ PA9 ------> USART1_TX$ \# g8 u7 N. J' D9 H PA10 ------> USART1_RX */ S" c! B( V1 R /*Configure GPIO pin : PA */. k2 ` ~6 s$ [8 b( U3 ] GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;! z. n7 o$ X! t- r7 `" }% f GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;3 E3 I6 s P N2 `2 E' d GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;# D5 _; [1 l+ U& w8 w1 | GPIO_Init(GPIOA, &GPIO_InitStruct); ! I4 y3 q6 s% ?; t4 ^ /*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;, L4 O8 H6 t( B4 W( M GPIO_Init(GPIOA, &GPIO_InitStruct);* g$ F% ~/ U- h* C2 ` 在传通驱动下我们配置IO的时候,对于TX 我们配置GPIO_Mode为GPIO_Mode_AF_PP,对于RX我们配置GPIO_Mode为GPIO_Mode_IN_FLOATING。有时候人有惯性思维认为理所应当的在HAL里也应该一样,我就是在这个地方栽了跟头。在HAL驱动方式里,RX,TX必须都配置成GPIO_MODE_AF_PP。0 f' X9 [ S8 z1 S7 u 代码如下:用HAL驱动时3 v- I: Q1 U$ w' K6 n: T /**USART2 GPIO Configuration PA2 ------> USART2_TX: V; z# G& g8 E# B PA3 ------> USART2_RX *// a. n5 m! m" b+ y) X GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF4_USART2;3 |! U! c0 n9 ?* [4 T7 |- X HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 4 I9 G4 d1 ^, P& h3 y& g2 g GPIO_InitStruct.Pin = GPIO_PIN_3;3 [3 Z8 o$ f2 \2 I; @. C //GPIO_InitStruct.Mode = GPIO_MODE_INPUT;(这句千万不能要)+ i- @, i( {% h" G1 ^3 q3 \: G7 U& J GPIO_InitStruct.Alternate = GPIO_AF4_USART2;6 T2 W4 O( K h' L F HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);( A1 {% V# f' I' f2 s/ d 希望能给后面使用HAL驱动的人提供点经验,少走弯路。& F4 x9 S( F$ B) V3 c% I |
楼主我这样配置也能接收哦!
合在一起写也是可以的。