你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HAL驱动的串口编程陷阱

[复制链接]
党国特派员 发布时间:2015-1-4 21:49
手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。# J! g4 w! v8 ]
使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。
+ q+ v" [& T2 q4 P9 U* ?使用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
. M+ i# A$ M9 [3 P' D* y  */

( Y/ Q# b9 ^; X8 X  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);
  X. t" Z9 r2 F0 A5 v0 c) u! I4 y3 q6 s% ?; t4 ^
  /*Configure GPIO pin : PA */
8 _& y; X# q: h; E- f) T  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
# ]: I; {  ]$ Y. K8 u" j* x% {  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   
2 G% K8 N8 C: J    PA2     ------> USART2_TX: V; z# G& g8 E# B
    PA3     ------> USART2_RX
' Y6 y, ?9 ~" G' A    */
/ a. n5 m! m" b+ y) X
    GPIO_InitStruct.Pin = GPIO_PIN_2;
$ |, l0 V( q$ H3 g9 x    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
) V  B/ e# j4 c, f7 |: J1 e9 Y    GPIO_InitStruct.Pull = GPIO_NOPULL;
' [3 B6 N  r9 K# _- w4 x: ~    GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
* \0 h+ [7 a! g0 n    GPIO_InitStruct.Alternate = GPIO_AF4_USART2;3 |! U! c0 n9 ?* [4 T7 |- X
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
# N$ `/ M* R: ~/ p  u4 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

' d9 Q* @- Q. E& l希望能给后面使用HAL驱动的人提供点经验,少走弯路。& F4 x9 S( F$ B) V3 c% I
收藏 评论4 发布时间:2015-1-4 21:49

举报

4个回答
大器所成 回答时间:2015-1-4 22:13:29
在HAL驱动方式里,RX,TX必须都配置成GPIO_MODE_AF_PP。----我也试试!!!感谢楼主
qzwx741 回答时间:2015-1-4 22:20:26
标记下,正在尝试用hal库
晓枫VS枯叶 回答时间:2015-1-5 08:37:59
  1. GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
    1 \! N9 q; \( T2 {( t7 J/ k, }& M: C/ M
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    " ?. j" A/ S5 C+ H- h7 f
  3.     GPIO_InitStruct.Pull = GPIO_NOPULL;
    9 A, }& z- E& W
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;; C. y. z( `* G1 U, Q7 M" J
  5.     GPIO_InitStruct.Alternate = GPIO_AF4_USART2;: F0 {5 X: i5 |  d- G: C* ~
  6.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);3 _& d" \1 L$ b. Y. |
  7.                
    + @! m2 @5 t! j8 h+ F9 I) O
  8.                 __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
复制代码

# o/ j+ C" i9 B( h- ?, }楼主我这样配置也能接收哦!
党国特派员 回答时间:2015-1-5 09:32:24
晓枫VS枯叶 发表于 2015-1-5 08:376 B* w; Z* v5 {! L
楼主我这样配置也能接收哦!
: K& v+ o. g! X4 Z, u
合在一起写也是可以的。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版