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

nucleo 072串口发送不出数据,你想到了没有?

[复制链接]
zhang_123-55168 发布时间:2014-12-21 09:48
本帖最后由 zhang_123-55168 于 2015-1-13 12:16 编辑
+ I& x7 g* X1 G- v+ ~
" A! @- X# E* ~! ]     收到nucleo有几天了,昨天拿来发送数据竟然发送不出来,莫名其妙。收货当天已经验证了我的板子是好的,可以有数据经虚拟串口发送到pc机。昨晚再次用MBED编程得到hex文件下载还行。上网下了网友发布的那个串口和adc3的 例子还是好的。证明硬件没有问题。那还什么可能性呢?
* `, M7 `) g$ L8 A, ~    我是个超级懒的人,再说水平也是差强人意。程序一行一行的实在是看不下去。一个一个从网上找程序试验,中间省略10000字,中间省略一个晚上。* r3 D* B$ {) v
   大早起来,没办法,还是查程序吧,串口号了?????????、嗯,真错了。程序是1,nucleo怎么是2呐,无语。都是例子,为啥串口号不一样啊。。。。。。。。。。。。。。。。。。。。。。。
5 z; [' @' q8 i+ ]$ D$ O7 {& W  不叨叨了,附上我可以单独直接发数据的例子,灯闪烁。
2 K( }9 d3 I( ~& f) B  b PS: 例子程序好大,顺便把不必须的文件夹删掉几个。删除半天压缩后还是100M。没办法,单把main.c发来吧7 g% W) D# `- J% a

# b) m8 p/ y) L$ Q, l6 L) ]. V& ?

main.rar

下载

3.69 KB, 下载次数: 24

nucleo 072串口发送main文件

收藏 1 评论16 发布时间:2014-12-21 09:48

举报

16个回答
Dylan疾风闪电 回答时间:2015-1-7 20:30:13
用库函数或者直接操作寄存器来控制串口好了。串口的驱动没什么内容的。
  1. /**: Y' g# I! U, P9 s5 s6 I
  2.   * <b>初始化通用异步收发器。</b>
    ( u4 P; u  q5 }
  3.   * @param  USARTx            串口外设7 r5 I# v; q7 Q5 F  A# h- e8 ^
  4.   * @param  baudrate    波特率
    ( W3 \  R" {2 [! {
  5.   * @param  parity      校验位。0 None,1 Odd, 2 Even$ R2 N& _0 P- W5 o4 d
  6.   * @param  length      数据位个数。带校验7 or 无校验8
    8 n2 v8 y" z3 U7 V6 [* t# w
  7.   * @param  stopbits    停止位个数。1 1bit, 2 2bits, 3 1.5bits
    ; E' J: H$ I+ p7 L' Q2 X: R* ?
  8.   * @retval pdFALSE (0) , else return pdTRUE (1).4 A% [# q5 u4 ^7 F# }! f
  9.   * @version            v1.0(2013-12-5)
    8 q6 W& ^) Y! z' r
  10.   * <p>重写函数的功能说明!6 q+ U; {9 g$ P% I2 Q: x
  11.   * @author             Dylan
    1 G7 D+ b! X) c
  12.   */, P" J9 |/ b- {
  13. uint8_t BSP_USART_Init(USART_TypeDef* USARTx, u32 baudRate, u8 parity, u8 length, u8 stopBits)
    9 [; O8 K& ]8 u* }
  14. {
    ) _" y. }+ r( `
  15.         GPIO_InitTypeDef GPIO_InitStructure;* t6 U" W4 K2 e) x  u
  16.         USART_InitTypeDef USART_InitStructure;
    ( ^7 c. Z% ^5 f0 K: j% O/ v

  17. . v! n: _/ {7 i/ E9 }
  18.         if (USARTx == USART1)
    7 {7 b3 K) {$ g2 `; u2 e
  19.         {% S* r/ L+ W3 Y6 v
  20.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);% ?, O: T  ]! I+ C' @
  21. 4 Q2 w0 k# F9 R, B
  22.                 // GPIO的公共特性4 `/ z2 }5 p4 w9 g1 u" l# O) d3 W
  23.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    , C. ]  s8 |4 g" V
  24. " r: y. A3 P; t$ O" A2 j$ d
  25.                 //COM1
    9 X/ m$ }4 L6 M
  26.                 //USARTx_TX   GPIO_Mode_AF_PP
    3 P1 D) E' ~& t1 X7 s' U
  27.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  Q! i: w' L  y5 t* E  J( J
  28.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;6 C& l! U+ g8 T5 j" {, @% y
  29.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;$ P5 n: ^8 z6 G; z4 G
  30.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Tx);4 V2 b* {0 ?- n( K2 Q+ W/ G: W/ N. `
  31.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Tx) , &GPIO_InitStructure);9 F" U' v& T, U; M$ F- Q4 T
  32.                 SetAF_COM1_Tx;//必须选择复用功能! p% [" Z0 J& U% W* b
  33. 0 [9 G% |" }9 C1 K1 Q* _' M5 b# W1 O
  34.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU
    3 ?$ n* j, E; K* u( A" n' ]' c
  35.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    1 y( H2 c$ L& s) }% A6 p7 a
  36.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;# }7 F: s7 C3 O' z( y+ G/ u- q' _1 W
  37.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    ) U) B7 M' [. Q
  38.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Rx);
    4 j: }% \$ B6 |/ n! B5 o! ^, A9 D2 o
  39.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Rx), &GPIO_InitStructure);
    % V* W  b) o9 q. e
  40.                 SetAF_COM1_Rx;//必须选择复用功能
    : ]" z- S$ D- O; b) G9 V

  41. # s' Z' X- B8 B
  42.                 //RS485-DE
    , T+ C( {, C, l5 E: U1 o
  43.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;8 d5 @& m" l& f( d9 U" j1 _
  44.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    / M3 ]7 w  q' v5 D1 |4 ^
  45.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    4 T& F; z9 t- O1 k4 b: {0 v
  46.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_DE);  n% R/ g- j+ g3 u) C3 a5 Q
  47.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_DE), &GPIO_InitStructure);
    + n' P! u1 x2 d
  48.                 GPIO_SetBits(RS485_DE);' S8 D9 O" l+ }0 S# Z
  49. 1 \7 _2 A& J' E4 Q; x" Y8 g
  50.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    ( X$ b/ X6 V7 ]$ U' C. V
  51.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
    , G" u0 {8 ~! }! Q  X: P9 O8 d
  52.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);; v4 l7 t0 \% e+ i1 D, U% s
  53.         }
    8 W5 D$ N- b+ `8 G. ?
  54.         else if (USARTx == USART2)
    - ^# M6 ]. M- h# r
  55.         {
    / l7 ^5 C8 A6 u5 Y9 M+ L
  56.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);) I" g  l# A+ \( c
  57. ! m/ m3 V5 P. d: C
  58.                 // GPIO的公共特性
    $ {( P# e+ o" d2 n1 E
  59.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 }# y, l6 Z7 H" u! {" T6 J
  60. 3 P/ r) j9 b1 N* F; V9 M
  61.                 //COM1
      X0 e- W% b0 S+ |- f) ^  y) V
  62.                 //USARTx_TX   GPIO_Mode_AF_PP+ P1 K7 ^9 I: `) M! @0 h
  63.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;+ I* Z1 }4 c& D3 G
  64.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    " o) l: W1 J8 a1 K
  65.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    ( R* S8 l; O0 y5 }
  66.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Tx);
    & q4 q# P  Z4 X+ h* h: q
  67.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Tx) , &GPIO_InitStructure);
    ) A' Z; H7 v- t) ]
  68.                 SetAF_COM2_Tx;//必须选择复用功能
    / P/ O: `7 b, M( \+ W4 w' K4 A* t
  69. : G1 w" _. _  ]8 V0 P( \
  70.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU0 R# j2 e. y+ L% N
  71.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    , f1 _2 r- e: e
  72.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    . \% q' Q5 M; i
  73.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    7 W9 c) i! Z/ C2 E& w* s
  74.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Rx);, _( D% _7 M! h2 K2 u+ o  q
  75.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Rx), &GPIO_InitStructure);
    4 O+ k* a# Y* K1 o; P* v
  76.                 SetAF_COM2_Rx;//必须选择复用功能) j! p9 J" \( ?/ s

  77. 6 A" r7 C; E7 x# O; c2 f
  78.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    4 T- O/ X: [5 d& ^" ^4 W6 n
  79.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);+ C5 J0 \8 Z, R0 h% n! P
  80.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
    6 b7 w4 [( N; l4 R9 [% I( j1 w- _
  81.         }6 b5 B/ D+ V* ^& P  W( k4 q
  82.         else/ e! D# Y, M9 k0 c7 U: K
  83.         {
    $ ~$ L1 r% ^. ^! q  e" I. f1 u
  84.                 return pdFALSE;, c8 ?( U2 y% g+ N
  85.                 //#warning "Make sure USARTx is exist ?"
    - [; n, y: l# |7 @
  86.         }' i$ m9 E, Z. X) {4 w  G1 }9 l

  87. ' E# B/ g# z8 v! w3 w  z/ }
  88.         /* now start init usartx info. */0 C$ W/ P% V; z& j7 T# n: r
  89.         switch (parity): Y! q" m  D, L' S! q
  90.         {
    7 Q5 e& V  J2 M% ~9 S  L% X( ]
  91.                 case 1://奇2 W# `3 t; R  L" ?/ |
  92.                         USART_InitStructure.USART_Parity = USART_Parity_Odd;
    ! T$ L2 f+ k$ f( V* x
  93.                         if (length == 7)* c, n0 F) g8 ~) Z5 r
  94.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;; q/ `$ U7 [/ m9 l% n
  95.                         else
    ( z; b* d0 f% A1 G) z
  96.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;$ U! T8 j- ~$ U, R. i3 D# P
  97.                         break;5 {) D6 N7 V+ u! t
  98.                 case 2://偶8 h" ?2 p. N: v0 \+ u
  99.                         USART_InitStructure.USART_Parity = USART_Parity_Even;
    3 o& x4 N$ S7 ~' j& u" Y
  100.                         if (length == 7)( _3 l/ O- J& U8 ^
  101.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;, M2 h! R" P! d) ?3 a
  102.                         else7 {) Q. w5 Y; A9 K1 N/ o
  103.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
    * A, v, S: ]# a5 ~5 P" U2 {9 D
  104.                         break;+ H5 j$ m: X2 B1 t
  105.                 default://0无8位数据位
    , ^1 t5 K# j/ Y  _# U2 R
  106.                         USART_InitStructure.USART_Parity = USART_Parity_No;
    2 F* m/ s4 x; }7 `8 q6 S4 v
  107.                         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    3 |- N6 K% b  h8 i& E% ^6 [% N
  108.                         break;) x7 I' N9 `5 o5 E/ F: y( ^
  109.         }
    5 T; u. h" e4 H3 ^0 x+ N/ F

  110. ' i5 C9 O! T: c; |; Y
  111.         switch (stopBits)
    ! \, r, b5 X' P
  112.         {" C  @) ^, V5 T/ a- y8 A
  113.                 case 2:
    ) y4 Q* \! f" W- J' L
  114.                         USART_InitStructure.USART_StopBits = USART_StopBits_2;
    ; y7 M$ x6 V) C% }
  115.                         break;$ T" O; |( C! d0 L0 i
  116.                 case 3:: d# P7 m/ L' u0 o3 H
  117.                         USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
    9 V5 G# x: c8 l( }  F3 X
  118.                         break;
    1 Y8 v4 s& g$ k& ?$ x% S+ P
  119.                 #if defined  (STM32F051) || defined (STM32F042)
    * F" O# ~+ P7 m: o0 A. |3 z
  120.                         //null1 ^, L& }3 O, e3 e8 S5 ]( h
  121.                 #elif defined (STM32F100) || defined (STM32F101) || defined (STM32F103)2 q( g' u7 f7 R7 m- r& q& A8 @
  122.                         case 0://保留STM32F05不支持,STM32F10支持
    % M/ M- h* [* B* P; N( T
  123.                                 USART_InitStructure.USART_StopBits = USART_StopBits_0_5;) e* E8 b; K4 e9 @6 i5 }
  124.                                 break;" }0 u& T' d8 u
  125.                 #else3 P# i2 w( ?( K+ t) _) k/ `; }
  126.                         #warning "Make sure needn't define STM32F051 etc. ?"
    / C, i4 _1 Y1 g8 ?; G
  127.                 #endif4 q, m5 j% N! L9 p: m4 v
  128.                 default://13 n) {+ _& I, X+ ~) z) J; T
  129.                         USART_InitStructure.USART_StopBits = USART_StopBits_1;& w0 A/ _6 Z; Y3 Q  E2 P2 x
  130.                         break;$ q6 B: P/ c2 u$ ]4 N9 Y# l- y7 L) [
  131.         }
    % ?5 }6 j( Z4 F( L1 H4 ]# n8 ^
  132. 3 P9 V2 o. I8 Z3 a: G; ?
  133.         USART_InitStructure.USART_BaudRate = baudRate;. d2 v  W( ~1 K0 m9 N
  134.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;6 w4 n- w  O& n( a
  135.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    ' V8 [$ V4 v9 L+ L! X# j
  136.         USART_Init(USARTx, &USART_InitStructure);7 s  x" ^1 P9 ^- u2 \
  137. # f, f& H3 W% _6 L; @
  138.         USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);
    . u7 N5 `- \% Q5 ~- c: R! F. [( [
  139.         USART_ITConfig(USARTx, USART_IT_TXE, DISABLE);
    ) Y* z7 e' {, p2 x* x# V3 `3 h! l

  140. $ c$ D9 Z; p9 E/ A- K  ^  Q5 i
  141.         USART_Cmd(USARTx, ENABLE);
    ! H/ n' c! n3 _& e( i
  142.         8 X: ^# G& r  K( [+ ?' V: t5 h: j4 a
  143.         return pdTRUE;8 r3 ^. Q- b  R; X7 }
  144. }
复制代码
  ]5 y/ m% y9 U( P+ K" U
Dylan疾风闪电 回答时间:2015-1-7 20:35:32
发送和接收就是写、读数据寄存器xDR(x=T,R, ' ')。
& v4 K7 m9 e$ V: t
  1. /**
    5 p4 o% R- M1 r; m
  2.   * <b>串口向外发送数组。</b>7 Q) ~4 r- o" N; T2 K, P( d
  3.   * @param  USARTx      COM外设
    3 _$ c7 L& C- c& Q) [7 p# w% Q! ^
  4.   * @param pBuff        数组# {1 G5 ]9 c. @- {  |
  5.   * @param length       数据长度
    4 x" C' Q0 R* @/ e
  6.   * @version                        v2.0(2014-11-22)  A1 ~* u% p+ e4 o# b9 d) w; }
  7.   * @author                 Dylan3 X5 F. F) s/ z/ x' c2 ?  v
  8.   */. F$ g# s5 |9 [2 D) Q
  9. void COM_SendBytes(USART_TypeDef* USARTx, uint8_t* pBuff, uint8_t length)# {  `, o3 K5 Q( U( d( n4 ?+ R2 ^
  10. {; `6 O6 f: M9 R; V# L' g7 M5 i5 m  }5 v
  11.         uint16_t srValue = USARTx->ISR;7 c6 J" n& Q; ^4 [  }' H
  12.         7 r* _) h: z% J( V- j
  13.         while (length--)
    / z3 T! C4 A9 m6 l- Y( }) b* ^. Q* Z
  14.         {                       
    # i, {5 w$ ~  @$ u1 J$ E
  15.                 while ((USARTx->ISR & 0xC0) == 0);//等待数据被移到移位寄存器,或者数据发送完成。
    . Y9 N3 c, r. B8 R0 P
  16.                 USARTx->TDR = *pBuff++;
    6 ~) H9 w5 k9 p, m; @) ]# q$ Q) x0 x
  17.         }3 W0 E# `$ L1 x. u6 ]
  18. }
复制代码
/ n! F, i. B6 W3 r5 z

9 Z+ R4 h) C" f, W0 B
netlhx 回答时间:2014-12-21 11:50:45
NUCLEO的虚拟串口使用的是USART2,可以参考原理图,上面写的很清楚
zhang_123-55168 回答时间:2014-12-21 11:21:15
本帖最后由 zhang_123-55168 于 2014-12-21 11:24 编辑
8 j2 x- h4 I' l9 k  S, U" g1 b% [! N7 L
基于cube代码生成的工程也可以使用了。
/ v6 S  {9 P  r$ Y9 m9 Q! i串口直接发送,灯闪烁。
wamcncn 回答时间:2014-12-21 12:13:17
你是说例程 NUCLEO串口发不出数据?
lkl0305 回答时间:2014-12-21 15:08:45
板载的串口用的是USART2,这个的确是刚上手时的问题啊。
晓枫VS枯叶 回答时间:2014-12-22 12:19:11
F0的cube库里面有USART的例子,楼主可以打开看看!
sirius65 回答时间:2015-1-7 17:08:23
新手不懂 先收藏学习了
cxtarm 回答时间:2015-1-7 17:28:46
什么串口程序啊,竟然这么大
大秦正声 回答时间:2015-1-7 17:35:50
我的uart1测试正常PA9
# p% `, ^; v4 ^9 ?/ A8 J' R, hPA10
aderson 回答时间:2015-1-7 17:46:59
标准库表示可以用。。
taiyangshengqi 回答时间:2015-1-7 20:21:39
楼上说的很对,可以简化程序慢慢调试 确认问题
taiyangshengqi 回答时间:2015-1-7 20:22:05
楼上说的很对,可以简化程序慢慢调试 确认问题
万里-363223 回答时间:2015-1-8 08:34:25
还是不要太懒的好,看清楚程序先
12下一页

所属标签

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