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

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

[复制链接]
zhang_123-55168 发布时间:2014-12-21 09:48
本帖最后由 zhang_123-55168 于 2015-1-13 12:16 编辑
6 w3 `7 p$ S& |3 y( u2 N! b1 H7 C) u) d  X8 w" Q/ u+ ]
     收到nucleo有几天了,昨天拿来发送数据竟然发送不出来,莫名其妙。收货当天已经验证了我的板子是好的,可以有数据经虚拟串口发送到pc机。昨晚再次用MBED编程得到hex文件下载还行。上网下了网友发布的那个串口和adc3的 例子还是好的。证明硬件没有问题。那还什么可能性呢?
# W9 C0 q( x4 a6 S" ]    我是个超级懒的人,再说水平也是差强人意。程序一行一行的实在是看不下去。一个一个从网上找程序试验,中间省略10000字,中间省略一个晚上。
6 @! ?: T2 c2 }! S   大早起来,没办法,还是查程序吧,串口号了?????????、嗯,真错了。程序是1,nucleo怎么是2呐,无语。都是例子,为啥串口号不一样啊。。。。。。。。。。。。。。。。。。。。。。。
- q0 ]& ^, _( {# N+ _2 W5 ^  不叨叨了,附上我可以单独直接发数据的例子,灯闪烁。4 z2 V& I) k( T3 W- j& y5 x5 d
PS: 例子程序好大,顺便把不必须的文件夹删掉几个。删除半天压缩后还是100M。没办法,单把main.c发来吧
* Z! ^% v! I4 v
/ ~8 Z7 {7 W5 `( q, P

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. /**
    ( ]* j- K" u* R
  2.   * <b>初始化通用异步收发器。</b>& G0 X# \, A# p0 w9 u4 j: |3 N
  3.   * @param  USARTx            串口外设: P+ N# X; _( V- l* k! A' i
  4.   * @param  baudrate    波特率5 T9 b5 Q$ Y3 ~9 W
  5.   * @param  parity      校验位。0 None,1 Odd, 2 Even
    1 a0 w% G. M6 G2 b# h
  6.   * @param  length      数据位个数。带校验7 or 无校验8
    - D; ?; L* H& o% S# I
  7.   * @param  stopbits    停止位个数。1 1bit, 2 2bits, 3 1.5bits
    ' Q" w+ j5 N( F$ \$ d  {. \
  8.   * @retval pdFALSE (0) , else return pdTRUE (1).
    + ~& s( l. f6 `; b$ \7 n7 }
  9.   * @version            v1.0(2013-12-5)3 `; P' {8 w5 `! P
  10.   * <p>重写函数的功能说明!# X# U5 s7 k, s- u
  11.   * @author             Dylan
    " u/ Z  W9 E# J0 c- x* z7 K" V
  12.   */
    ( y7 e* n" H( |2 I4 s! o
  13. uint8_t BSP_USART_Init(USART_TypeDef* USARTx, u32 baudRate, u8 parity, u8 length, u8 stopBits)* ~1 S/ C8 q. {2 k
  14. {
    7 N8 S* x% |0 q- X
  15.         GPIO_InitTypeDef GPIO_InitStructure;2 }' }: c8 T  b7 D+ `- |% q
  16.         USART_InitTypeDef USART_InitStructure;2 t, E5 ~7 F1 a9 ?. B& a9 R) m

  17. ) ^8 f, R7 X' g7 D: q7 D8 i
  18.         if (USARTx == USART1)* G0 y* A( ]5 ^
  19.         {5 f( g6 R! p# X# u! B, M+ t% o
  20.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    ' j2 x# t- J' f! K& d

  21.   G6 y' F! n" J
  22.                 // GPIO的公共特性- Q. h3 ]6 G4 U4 n! F; ?/ n
  23.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;5 e, l7 l) r0 ]

  24. ( _$ n* R5 z. C0 |. Q% {) j9 l
  25.                 //COM1
    & M3 V! z" m- h. [* k* ~3 @
  26.                 //USARTx_TX   GPIO_Mode_AF_PP$ i. s3 V! P6 j4 |- z
  27.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    # n# T) w; Y7 t  g+ D
  28.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;+ ^6 \! r' h( a0 q" w7 v* v8 _
  29.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;* E$ X5 }! L3 f4 [% a1 G
  30.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Tx);
      t# p" L9 Y; h7 R5 p6 T+ O" D6 D% H
  31.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Tx) , &GPIO_InitStructure);
    4 w0 X$ g# W5 [! N$ ]  X; C
  32.                 SetAF_COM1_Tx;//必须选择复用功能
    . ~' f4 X' ~* o7 G: T. ?5 J

  33. ' `- I+ |3 b. N) z! M/ `
  34.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU% c. [8 _: l  X& y! _
  35.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    - N" C  C/ h" O2 t5 }* b
  36.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;, ~% X( j' D9 {, y# V) N& b
  37.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;" B. j7 p2 y9 L. D; Z1 b8 q! N
  38.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Rx);: B( ^: @: L. H" b( a8 l( ?
  39.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Rx), &GPIO_InitStructure);
    " x* [6 }0 L/ i
  40.                 SetAF_COM1_Rx;//必须选择复用功能
    " }  c4 y8 }) J, S. v  o2 v

  41. : l: [0 D+ O5 k4 O' o4 F  {4 s
  42.                 //RS485-DE& i! C" I( @/ o! G3 c
  43.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    ) {  v* [7 n$ j! m/ a% }
  44.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;+ Q1 |9 n& t( s
  45.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    / [. {; ?7 ~, D; j) }' y( k! p/ x
  46.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_DE);9 z1 d6 K) Q" o' z  h, d* f4 U
  47.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_DE), &GPIO_InitStructure);
    9 Z! H" {. a  i
  48.                 GPIO_SetBits(RS485_DE);
    + P# g2 s( D0 N1 }
  49. & S- L* d7 o$ T& v
  50.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    1 _' R4 d/ p% ~4 p2 `
  51.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
    7 j( k7 I1 @; ], k6 q6 l* u* {
  52.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
    , c4 ]6 O+ @( v" K0 x/ i3 j. r
  53.         }; ^" ?- a3 ~" G% e: b
  54.         else if (USARTx == USART2)0 R! z' P" [; k$ D) q9 t
  55.         {5 g8 W$ O0 I" b( U- s: W
  56.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    $ X- Q( n( k  g: n; L$ {
  57. 0 G3 D5 V0 n; y, _  }9 K
  58.                 // GPIO的公共特性- s4 u& s) Q9 H1 T
  59.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    - P' w) t7 D( O0 z/ v9 o& K+ A7 ^

  60. 8 L1 o& W. i, w" ?4 D
  61.                 //COM12 Z: k9 L4 E9 V- E+ V. g
  62.                 //USARTx_TX   GPIO_Mode_AF_PP
    5 O( f2 x; S- c* N4 D
  63.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    1 O" o1 t7 @% Q: m4 I
  64.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    ( O5 {) |- I) I6 Y
  65.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    + u4 @& S. z# E; b3 r( \' |. v! |
  66.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Tx);
    % Q7 W8 Y: d8 m" q7 U( u
  67.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Tx) , &GPIO_InitStructure);
    , ?( u5 P' P( c4 a1 \2 g
  68.                 SetAF_COM2_Tx;//必须选择复用功能5 Q" @9 o5 G" w8 F& O7 F

  69. " n* p0 i) M" `1 c2 F4 t  N8 v. S) @
  70.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU
    7 ^  B7 F# s9 ?* Y6 d4 J
  71.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    " \% K) G3 X# {& J6 y2 |2 [
  72.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    " D% o8 s, p8 R
  73.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;0 v* Z$ J  _# x3 n: c$ {) G$ B# L2 d
  74.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Rx);
    : O/ R, L% P8 s8 Z1 W; z" D( z- Q
  75.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Rx), &GPIO_InitStructure);3 i: R- q- k) g
  76.                 SetAF_COM2_Rx;//必须选择复用功能
    * f0 i: g# U4 D, G

  77. : e) ^1 m: S  }- Y. d) }4 ^3 f
  78.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    - T0 @2 g& q, G% o! R; c) r- }. }7 [% U
  79.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
    # h4 B( h1 R! d, ~: ?" t' B
  80.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
    . j( }0 `- ~7 {6 }; u, a
  81.         }6 _& H2 ]& M% y2 r# F1 O' K7 |
  82.         else' b/ k/ H4 g; Y! \* y; a' k
  83.         {- k9 w( H2 v4 [3 ~$ s: O3 K% G
  84.                 return pdFALSE;
    + g/ F: b, x! t9 P  Q/ V% x
  85.                 //#warning "Make sure USARTx is exist ?"
    # q' f  }% z5 f; v/ H5 I+ |
  86.         }
    6 F, d- b1 ]. u9 d; t5 n
  87. 3 V& s7 Q. W0 D8 D) U4 R9 q$ a$ M
  88.         /* now start init usartx info. */
    3 v5 [, j4 P! ]" S, M0 u( l
  89.         switch (parity)
    # \  x& p8 e+ A4 h0 u
  90.         {
    * Q7 c4 ]6 H& X( M5 D5 d3 Z$ y
  91.                 case 1://奇: d5 d: m% }$ w
  92.                         USART_InitStructure.USART_Parity = USART_Parity_Odd;
    0 U, X9 z7 B# w1 ?% p
  93.                         if (length == 7)
    , H0 e& ]6 r; z) F9 M. B
  94.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    4 g8 O9 L+ e2 \# a/ k7 L
  95.                         else9 h: D2 u5 y' ?$ ~6 _' h
  96.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
    ! s/ T6 {* l$ q7 K2 N
  97.                         break;
    . j) `+ D7 J8 B1 L; g% k
  98.                 case 2://偶
    4 t) P5 t7 w' a$ c
  99.                         USART_InitStructure.USART_Parity = USART_Parity_Even;: F' Z3 ]; J& d$ k3 s8 _
  100.                         if (length == 7)
    7 I" s2 s/ d- V: \/ o  q: c$ B+ ~
  101.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;" D+ L+ G/ b# v: o
  102.                         else
    / g; e; K( `8 N' c" e: m) u) M# G
  103.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
    ) `' I' \7 C3 d
  104.                         break;" U/ }" b/ k4 r4 z; _# O/ Z6 q; ]
  105.                 default://0无8位数据位
    6 Q2 u  f! p6 b2 U
  106.                         USART_InitStructure.USART_Parity = USART_Parity_No;- K% U4 }. B1 D2 j, T  |7 [
  107.                         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    % }" E7 J7 |: U  z) U" s( s
  108.                         break;
    ; Q/ s2 E9 l( o5 F5 ?
  109.         }( t  |+ F8 i% \" Q! t

  110. ; P. t$ F) p8 F. N0 R# V. O
  111.         switch (stopBits)7 [( u( g, v9 e/ K2 x
  112.         {
      T. H& D/ J+ j- N+ w: @
  113.                 case 2:4 w7 c( E* Z5 G* \
  114.                         USART_InitStructure.USART_StopBits = USART_StopBits_2;( |! Z5 e. t0 R0 w, o  r
  115.                         break;6 `0 w, }$ r: L. A1 Q* ?1 s+ m
  116.                 case 3:9 L! `5 \' [7 ]8 {( {
  117.                         USART_InitStructure.USART_StopBits = USART_StopBits_1_5;& E, l( X6 y" d* N9 ^
  118.                         break;' F1 G* N2 _3 Z9 A# p# i
  119.                 #if defined  (STM32F051) || defined (STM32F042)
    6 X, i3 F! r' C* j: w# L
  120.                         //null+ S, P3 i5 A! `* F. k
  121.                 #elif defined (STM32F100) || defined (STM32F101) || defined (STM32F103)1 X% K  `0 ]3 z' M7 C: y
  122.                         case 0://保留STM32F05不支持,STM32F10支持( c/ V/ ^6 J' |
  123.                                 USART_InitStructure.USART_StopBits = USART_StopBits_0_5;0 z# O/ j+ ~( B* u, F! I% D3 S
  124.                                 break;
    - a5 E/ ?+ \" ]4 t% ?3 E/ S
  125.                 #else
    0 M, G4 N9 M! @$ c& a$ H* `; |
  126.                         #warning "Make sure needn't define STM32F051 etc. ?"! F$ f) m- p  P" f
  127.                 #endif
    3 j# L" V- f, V! E( [# g: h. e
  128.                 default://1
    . k; F( _7 `3 ^: ~' G2 C2 a6 p
  129.                         USART_InitStructure.USART_StopBits = USART_StopBits_1;
    6 R1 }8 M# X- @* ^6 A. i
  130.                         break;5 r  C' l+ u0 l, G0 J) Y1 [7 W
  131.         }
    ( @7 V7 x$ x' ]* D: q( L6 ~

  132. ! N2 s( i; U% e9 J3 t
  133.         USART_InitStructure.USART_BaudRate = baudRate;
    " r8 _0 \+ X5 N2 t$ X) `# B
  134.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;9 W  o, m; Q7 D- T3 N- h) A
  135.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    2 ^5 E" H% f+ W5 _) ^2 V9 r4 n
  136.         USART_Init(USARTx, &USART_InitStructure);) E" F, U: L; ?* |. B
  137. + R; g* ^" R- z$ _& {( Y
  138.         USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);1 H2 |! Z: v" `1 S) i0 n
  139.         USART_ITConfig(USARTx, USART_IT_TXE, DISABLE);
    + {1 {, [" Y6 s
  140. ; @* X( d" J) `. s5 u
  141.         USART_Cmd(USARTx, ENABLE);
    + r) ~8 u! o3 J: G3 k
  142.         9 y7 l" m" C3 @2 x: ?
  143.         return pdTRUE;
    4 _# u: o  J* R3 I% \
  144. }
复制代码
3 l  D  U: J0 o' M; q
Dylan疾风闪电 回答时间:2015-1-7 20:35:32
发送和接收就是写、读数据寄存器xDR(x=T,R, ' ')。2 f3 c/ g) ^1 A: w( I
  1. /**
    3 e4 _4 z6 P- o/ X0 x/ k
  2.   * <b>串口向外发送数组。</b>$ e! p( P& t4 x  g; O& l* H
  3.   * @param  USARTx      COM外设
    2 g3 f. ^) z% L/ X; I7 j/ E
  4.   * @param pBuff        数组
    7 ^, Y' I; a, W" @+ M% V# _  y
  5.   * @param length       数据长度. a, G+ \. c  x* c6 h" [2 L6 R
  6.   * @version                        v2.0(2014-11-22)
    + K! R7 u8 ]) Q
  7.   * @author                 Dylan
    / y$ G3 K: U" R! v2 S% J; \6 r
  8.   */2 K2 A( }/ ^, B
  9. void COM_SendBytes(USART_TypeDef* USARTx, uint8_t* pBuff, uint8_t length)
    ) h+ J  R3 y" |3 V" ^
  10. {, e, U4 d* I$ [: v" D- V- V+ ]
  11.         uint16_t srValue = USARTx->ISR;
    4 c2 v0 Y) s  h3 j- s+ M
  12.         0 j1 {4 F! S5 r- |0 j
  13.         while (length--)7 o  l$ H) u. w7 ?+ M- i
  14.         {                        % J1 p6 d, S5 P
  15.                 while ((USARTx->ISR & 0xC0) == 0);//等待数据被移到移位寄存器,或者数据发送完成。; D8 l, {- s9 T% D
  16.                 USARTx->TDR = *pBuff++;
    3 K! _, E( v1 t/ D. _% {' t6 t: L
  17.         }7 U2 Z) {" m1 Z4 J: R, W4 ^
  18. }
复制代码

2 I4 [" s! I; ?
! R+ ?2 E( b( t+ n! ^4 F+ 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 编辑
  i& V- R2 Y; \4 e8 Y' c* n' b9 ?4 Z& V2 Z- a; f
基于cube代码生成的工程也可以使用了。
6 O7 ^; B; p/ i% Z+ X串口直接发送,灯闪烁。
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
5 Q9 E" Z- I, _  w2 L! 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版