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

stm32f4串口3提示NE错误

[复制链接]
stary666 发布时间:2018-12-6 16:23
今天在调试时,遇到个棘手的问题,分享解决方法给大家,$ I. s! A) U7 b
我使用HAL库,一个让人抓狂的烂库啊,想骂娘,一直骂都不解气的烂库。5 D+ _/ ]( C% m# z) W3 V
串口+DMA,官网407的DMA例程移植过来的,不需要过多说明,上代码即可
/ ]0 y0 p# `  n' e! ]7 \  Dvoid HAL_UART_MspInit(UART_HandleTypeDef* huart)
6 N2 L# G5 ^# m{' J: ?( a2 i1 I7 m
  GPIO_InitTypeDef GPIO_InitStruct;4 b! H% [; |  ]' |" U3 }
  
- }0 A" S0 e5 Z: g" K* O  if(huart->Instance==USART3)
4 h- u' ]; w6 f8 j( `  {5 s# N: q/ G2 u1 ]2 j0 g# U6 K
  /* USER CODE BEGIN USART3_MspInit 0 */& \0 ~: ?! R' B9 A" ^9 M4 T
- W1 s$ ^# n5 B2 v/ O7 v
4 x% f  n$ r$ M: y1 m
  /* USER CODE END USART3_MspInit 0 */
7 {* \/ p  f, V0 S$ R1 R    /* Peripheral clock enable */9 a6 ^2 O: H% s9 b* x
    __HAL_RCC_USART3_CLK_ENABLE();9 q, q' x4 F& e4 ?# Q
  
: L1 O/ m! b8 ~7 C5 @* W    /**USART3 GPIO Configuration    . M2 {1 G+ n" a: f0 h8 X
    PB10     ------> USART3_TX( i9 w5 r8 D( q8 b
    PB11     ------> USART3_RX
* I! b: V8 b4 |    */. }1 m/ W+ @# p0 Z
    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
2 s% j4 N& {; M/ O& g: x6 W7 h    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;4 I) Y4 W; k7 ?$ n6 n$ D! Z$ j/ X
    GPIO_InitStruct.Pull = GPIO_PULLUP;  ]$ x  f1 z& Q) M' l0 u
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
2 z; g, Y% r1 E. c    GPIO_InitStruct.Alternate = GPIO_AF7_USART3;  M* q6 z( n- ?
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);2 p; v# a$ |8 B# ]+ X
: ?6 w7 S3 K. y6 g0 f& N, L
3 l5 R" |) ]! V& A9 N
    /*##-3- Configure the DMA streams ##########################################*/0 `4 |3 P. N2 G/ U* J6 \
  /* Configure the DMA handler for Transmission process */
& l0 d; c$ n7 _& a/ h! t. F  hdma_usart3_tx.Instance                 = USARTx_TX_DMA_STREAM;
: f) z" G: I! u9 V  7 Y8 s$ ]2 {0 b( }/ j( ~
  hdma_usart3_tx.Init.Channel             = USARTx_TX_DMA_CHANNEL;
: d4 n( @8 s5 h! Y7 s  hdma_usart3_tx.Init.Direction           = DMA_MEMORY_TO_PERIPH;
) A4 `2 J( i8 `' J% g) J; v  d  hdma_usart3_tx.Init.PeriphInc           = DMA_PINC_DISABLE;
. `* G2 I8 F0 `  hdma_usart3_tx.Init.MemInc              = DMA_MINC_ENABLE;) |2 l2 I7 z9 H7 o
  hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
, N; P" O5 C: k: W9 O' l  hdma_usart3_tx.Init.MemDataAlignment    = DMA_MDATAALIGN_BYTE;- a: j5 [# e- D4 l; |- r! j6 U2 H- F
  hdma_usart3_tx.Init.Mode                = DMA_NORMAL;5 a* u: f* j/ h1 y, ?: z1 n5 ?5 a
  hdma_usart3_tx.Init.Priority            = DMA_PRIORITY_LOW;+ l( y3 W+ [& Z: v$ K2 }
  hdma_usart3_tx.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;  k5 Q+ Z$ `7 D3 T. Z+ [6 }
  hdma_usart3_tx.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
- R! J2 o2 S1 z2 J4 C$ u: V. O  hdma_usart3_tx.Init.MemBurst            = DMA_MBURST_INC4;0 P" A; X& r6 B; H# a+ n" N# E
  hdma_usart3_tx.Init.PeriphBurst         = DMA_PBURST_INC4;3 E; Z- T7 ~, [
  
9 l1 I+ N6 N! a$ ^0 `  HAL_DMA_Init(&hdma_usart3_tx);   % H9 c2 K0 V5 `
  
9 j9 ~$ {% j7 P  /* Associate the initialized DMA handle to the UART handle */- [, y8 [$ u' E/ f9 S4 d+ H# o
  __HAL_LINKDMA(huart, hdmatx, hdma_usart3_tx);
# x3 s& z. h2 A  y  
: p& L; A; M6 d* F9 u* Y4 {! o1 z  /* Associate the initialized DMA handle to the the UART handle */. o- i. u! {7 g' @% t+ s# K
  __HAL_LINKDMA(huart, hdmarx, hdma_usart3_rx);
+ \2 n! f1 C3 |9 Q- f    2 y! p* \5 A4 o( g3 o
  /*##-4- Configure the NVIC for DMA #########################################*/
1 W+ H! _, E6 X) j! _$ R  /* NVIC configuration for DMA transfer complete interrupt (USARTx_TX) */) q0 C" @' Z4 g4 K, N4 Q. P! g
  HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 0, 1);
9 ?* ~3 I: i+ u4 S! D  HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
6 @( b, j8 ^" ?# a: k& Y$ a$ c1 M8 q8 U: ], g7 a; S2 `

6 U2 Q9 `( J; P/ R  /* USER CODE BEGIN USART3_MspInit 1 */
; `( {3 F3 U, d/ }4 Z    HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
2 E7 {9 n* `1 I; {4 {& a    HAL_NVIC_EnableIRQ(USART3_IRQn);' y: v" V- l1 z* ^
    5 t+ H% v; p% C6 n! u! P6 o; K
  /* USER CODE END USART3_MspInit 1 */   j9 ?5 m/ R1 \) b: [0 n
  }
6 Y# R* b. {1 n1 `0 ~2 }}1 K: v8 l0 ]: P5 n7 k$ t4 J
/* USART3 init function */3 O! ?! H; t$ ~2 Y* Y( g; O
static void MX_USART3_UART_Init(void)+ I' v) d( y: ?' |: U5 e
{) n$ r& m& k/ o1 P4 t4 f

1 W# Y) w5 F5 J6 M$ \

  i9 O7 S3 Y* B9 D! u  huart3.Instance = USART3;
" I6 d* q9 J4 ~; t  huart3.Init.BaudRate = 115200*2;4 k/ g- S+ R1 t6 W( g6 d3 P
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
7 ~9 z" d2 Y, X' g' v  huart3.Init.StopBits = UART_STOPBITS_1;
+ b7 a- F$ R' K- `  huart3.Init.Parity = UART_PARITY_NONE;
7 s+ A/ P; P, Z1 n9 L) f  huart3.Init.Mode = UART_MODE_TX_RX;5 F5 ^) B, A) N. p
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
; ~9 l$ C2 b* ]2 l( K  huart3.Init.OverSampling = UART_OVERSAMPLING_16;6 |5 p* y1 R# K9 Z/ d) \" f4 D" k
  if (HAL_UART_Init(&huart3) != HAL_OK)9 ~+ a3 y- f! B( W6 ]
  {
& }1 q; s0 e  b8 d) C* _. h* a    _Error_Handler(__FILE__, __LINE__);
6 X- y/ {% w0 g9 S( S+ f  B  }
7 B% N) ]5 p+ Z
' M9 I+ K+ e/ i: r% }( V. s' i
" J! w, q7 @( S5 p
}1 X' }) o2 b4 P! l' U. R

5 r9 S2 e3 L/ Q
% K( x6 ^. U. m
以上是初始化代码/ c8 c% |: f/ k0 \
使用的DMA发送,中断接收,9 U# t4 X0 f3 I4 n5 e
串口是和4G模块通讯,具体哪个厂家的就不说了,只能说很low。
: z( B* H- q4 E在配置模块时,出现了如图所示,9 F8 F; w' a! `
捕获.JPG
4 c! c0 ~- d5 m( x
" Q4 a  n. H: V; _, P8 b6 K  R$ ?$ p再次上电没有错误了,就接上f4的串口,开始调试,顿时来个下马威啊,一直在反复进入串口中断,单步跟踪,先是 Framing error,后来一直是 Noise detected flag,Overrun error这2个错误,相当于进入死循环了,急得我直骂娘啊,百度一下,基本没有收获,能知道是硬件问题,就上了示波器,果然是波形出问题了,f4的串口是使用串口助手调试了N遍的,肯定没问题,只能把4G模块的波特率降低一个档次,因为之前使用115200(出厂默认值)一直没出问题,果然是没问题,又再次把波特率升到230400,直到在调试软件上没有任何错误,反复测试都OK,才放心大胆的使用,果然,一切正常了,权当发个水贴,给大家分享一下经验了。( {# z# x+ ?- R" X8 n3 D. j/ E

/ a6 w0 N3 W6 U) Q
7 a  k' X* N" L) G4 V% h* P9 z4 T2 O% J  |2 `8 m. ~4 S& {. t5 f& b
收藏 评论4 发布时间:2018-12-6 16:23

举报

4个回答
zero99 回答时间:2018-12-6 17:23:50
谢谢分享啊
stary666 回答时间:2018-12-7 00:16:49
客气了
五哥1 回答时间:2018-12-7 02:27:08
这个库各种出错,唉,不能提,怎么办,只有在错误中前行,收获也很大。
stary666 回答时间:2018-12-8 16:13:24
是啊,库里问题太多

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版