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

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

[复制链接]
zhang_123-55168 发布时间:2014-12-21 09:48
本帖最后由 zhang_123-55168 于 2015-1-13 12:16 编辑 : ?2 ?- }: l5 ^4 g$ N6 i

$ k+ A9 \$ v- B( p) [8 }     收到nucleo有几天了,昨天拿来发送数据竟然发送不出来,莫名其妙。收货当天已经验证了我的板子是好的,可以有数据经虚拟串口发送到pc机。昨晚再次用MBED编程得到hex文件下载还行。上网下了网友发布的那个串口和adc3的 例子还是好的。证明硬件没有问题。那还什么可能性呢?
$ Q8 q! r7 C, x2 S2 h+ f: E4 Q. \    我是个超级懒的人,再说水平也是差强人意。程序一行一行的实在是看不下去。一个一个从网上找程序试验,中间省略10000字,中间省略一个晚上。- |: t2 `% z: t9 ?' J+ O
   大早起来,没办法,还是查程序吧,串口号了?????????、嗯,真错了。程序是1,nucleo怎么是2呐,无语。都是例子,为啥串口号不一样啊。。。。。。。。。。。。。。。。。。。。。。。  r- b+ P0 w0 d' `
  不叨叨了,附上我可以单独直接发数据的例子,灯闪烁。% J# Z) h+ z) ]$ o* A1 D$ v+ ^
PS: 例子程序好大,顺便把不必须的文件夹删掉几个。删除半天压缩后还是100M。没办法,单把main.c发来吧
4 M+ N- h# ^: s" e
7 }1 e1 V7 R: E; {' l

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. /**6 |6 B* H- ~" u, h3 T
  2.   * <b>初始化通用异步收发器。</b>
    0 l8 W/ l1 P5 z/ @5 G8 _" c* ?
  3.   * @param  USARTx            串口外设
    ( R" `! L; A6 ^
  4.   * @param  baudrate    波特率, Q, i- U$ \, Q% S. j* J4 C% d, K
  5.   * @param  parity      校验位。0 None,1 Odd, 2 Even
    $ S& R: o( H9 j
  6.   * @param  length      数据位个数。带校验7 or 无校验8
    % e% m0 r. s! c
  7.   * @param  stopbits    停止位个数。1 1bit, 2 2bits, 3 1.5bits
    - N; o1 V6 S) L3 C
  8.   * @retval pdFALSE (0) , else return pdTRUE (1).
    / y$ w$ @- ?; B1 }5 @& s8 A
  9.   * @version            v1.0(2013-12-5)9 q' E# f& _3 `1 ]7 p- c$ C
  10.   * <p>重写函数的功能说明!( U, U1 l, M) I8 o& [4 Y& F4 k
  11.   * @author             Dylan
    0 X: s3 y& e6 b8 |* A: O! A
  12.   */
    : Q% }+ E* q& Q1 [/ u2 R
  13. uint8_t BSP_USART_Init(USART_TypeDef* USARTx, u32 baudRate, u8 parity, u8 length, u8 stopBits)
    0 c5 h7 p7 r* L/ r* z+ k
  14. {/ |4 @/ p* Q0 }# D
  15.         GPIO_InitTypeDef GPIO_InitStructure;
      ^. D; d1 K/ {& u
  16.         USART_InitTypeDef USART_InitStructure;
    4 g3 d1 e2 r2 y

  17. 5 w9 V; R, |, h' q5 z  ~0 `
  18.         if (USARTx == USART1)) h9 ?1 E% t9 a. F" o
  19.         {6 Z: ?" M' m0 Q) w% u8 s
  20.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);. {. {3 n' g( t- [: L$ C4 H
  21. + j: X' s! |8 ?. y8 F1 P6 V
  22.                 // GPIO的公共特性; F  B& |0 q3 ]+ j* ?+ J$ p6 e
  23.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;9 n: ?; Q4 r! _7 X- a8 f$ W

  24. 2 ^' D- u8 W8 d! v$ A
  25.                 //COM1
    ( \5 y* h  o! [- _; P4 o
  26.                 //USARTx_TX   GPIO_Mode_AF_PP
    4 y) M3 g7 E5 d# n, o
  27.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;0 k  C9 q6 s9 C" _& B  U7 |5 ?
  28.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;& F0 s1 y% f, P4 H# J' s
  29.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    4 N. A! ]6 P# j1 c
  30.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Tx);
      c) C8 j# R* V8 m6 b" s# \
  31.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Tx) , &GPIO_InitStructure);
    9 A: X" L, T1 j' M
  32.                 SetAF_COM1_Tx;//必须选择复用功能
    , z" L" R3 z+ T0 W+ ?) V+ O8 j

  33. / y) Q. w' d8 o. N
  34.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU
    ; W6 U& [' }3 s: o. L
  35.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;9 @$ H$ L' L. ~" V: ~
  36.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    5 r2 B7 k9 b! E. l2 I4 O
  37.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;% {9 ]2 H4 ?' l7 D  {; t+ k! Y& d
  38.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Rx);" S8 B1 k* f( e9 S, W% Z8 k2 H0 k
  39.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Rx), &GPIO_InitStructure);& H6 p6 Q7 y$ D$ w7 @* x9 m
  40.                 SetAF_COM1_Rx;//必须选择复用功能' ?# b) c8 y+ c# P* f
  41. 0 [- x2 i+ {- E/ E) g
  42.                 //RS485-DE1 O/ X/ P* i2 d  A6 F
  43.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;' P8 w* v. z, e; W4 J
  44.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;8 \( K4 \9 w  Q( Z
  45.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
      g/ @: Y# w: v. E" X
  46.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_DE);
    + f8 h# S' r0 f* p8 \- e$ x
  47.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_DE), &GPIO_InitStructure);
    + L9 V1 I4 Y6 N( V( D. ?" y, [7 D( Z$ T
  48.                 GPIO_SetBits(RS485_DE);# T; ^: C% Q+ I: b
  49. 8 ?+ i: a1 d% Z) {0 p2 Q, p
  50.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);1 Y9 V' ]7 v2 L! D! c0 G( L
  51.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
    ! o. l; o' c' r: M! t; _* b
  52.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);% c  y/ z/ m% y+ `9 Z
  53.         }' X2 ?- p! }" I0 S" O5 r
  54.         else if (USARTx == USART2)
      I& b4 `/ F. A! m6 y3 y, w
  55.         {
      l& b2 N: x7 i0 U9 {; x$ S
  56.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);# Z$ F) c, Q$ _/ a* u
  57. 6 Z5 {3 u6 F3 S9 y" G; {' r3 ?
  58.                 // GPIO的公共特性$ `) X. g" d$ {( D$ t9 E) u
  59.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    ; o# [" u' q$ i3 O/ X

  60. % E9 }# @$ g4 U- n1 s
  61.                 //COM1/ t" [& d0 {- X: W5 f
  62.                 //USARTx_TX   GPIO_Mode_AF_PP7 D( B! C: c  N3 J8 j
  63.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;8 o' T% |: o; g$ ^1 _
  64.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    ' T" I7 v4 P( I" h
  65.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;6 M# K; g4 T+ @) ?, c
  66.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Tx);
    ; b! T% N  {- L$ i! o) n. ?3 T
  67.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Tx) , &GPIO_InitStructure);# t1 C% w7 [' |" y! R1 a2 L; A
  68.                 SetAF_COM2_Tx;//必须选择复用功能
    3 P3 Z2 y, P6 `: k
  69. 4 Z; ^. Q1 D: s8 h# m
  70.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU' a) C9 N: q) Q. H
  71.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;7 S9 n$ f1 I3 h$ |3 Q# K6 O( C3 N
  72.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;8 z; w7 ~" j7 V4 D9 z
  73.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    , F* C  R" a" Q" Q6 A! w
  74.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Rx);
    ; t2 S7 R+ ~; D: A3 Y/ N+ a7 U
  75.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Rx), &GPIO_InitStructure);
    ! M: v/ p" Q4 j" a! ]
  76.                 SetAF_COM2_Rx;//必须选择复用功能
    # k% H* F7 w# R

  77. ( g' o3 }: R% _' C2 l* U
  78.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);  J) `$ G2 ^6 |& j2 _0 B5 R: a- H1 s
  79.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
    0 G& N' c% [8 r. n) r  _
  80.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
    . p* p. y1 i; o/ N) y' x: V8 S, y
  81.         }# u' g$ t0 i4 P" o. ~8 a
  82.         else7 x" ?/ f4 H  ^( h# q
  83.         {) Y: }' J( g' H6 O, u! I
  84.                 return pdFALSE;
    % H6 N  K" U/ K6 }. B' j2 R
  85.                 //#warning "Make sure USARTx is exist ?"$ v/ K7 V: E) k4 P9 V) x
  86.         }! x7 k& s7 l: O* ^) V/ ^' ~
  87. 5 `9 k4 S- M0 X6 F, c
  88.         /* now start init usartx info. */. R  m3 U8 ]5 g& F' w  |  r
  89.         switch (parity)
    + p% w0 i' l% d
  90.         {
    + f8 B( ]) l  R" o; s
  91.                 case 1://奇
    3 b7 x' r7 U) ?
  92.                         USART_InitStructure.USART_Parity = USART_Parity_Odd;
    ' W9 D" ]4 r1 A! E  X8 l. U
  93.                         if (length == 7)
    7 U$ I* t7 o# W5 ?
  94.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;- ]! f% E: Z$ m& @% m! o$ K+ c# o3 f/ m
  95.                         else
    8 T/ s6 n3 d; _! V4 |0 T
  96.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;9 I3 k; V$ K6 J; m+ n3 F/ {
  97.                         break;& y+ D% U, Y2 b
  98.                 case 2://偶# k5 U$ k2 W9 Z& l- J3 w
  99.                         USART_InitStructure.USART_Parity = USART_Parity_Even;
    , [0 L) k( @4 b/ E6 C- B
  100.                         if (length == 7)5 M8 E/ q6 ]( a  h% j; E5 V
  101.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    ' _, g7 R5 G- X) {1 O
  102.                         else
    . t" i5 q# t( g- a( J; \" K8 J
  103.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
      e' i0 h% ~% I9 b. P4 U
  104.                         break;: Q9 ^4 C3 ^- r/ i5 V, {
  105.                 default://0无8位数据位; p2 u2 V& V, j; @
  106.                         USART_InitStructure.USART_Parity = USART_Parity_No;
    ( ^; h8 i' f/ R6 j5 H: T/ t
  107.                         USART_InitStructure.USART_WordLength = USART_WordLength_8b;. B! [/ @3 Q* ?+ H5 B
  108.                         break;6 F0 z1 Q: c; I; [) @
  109.         }" O  O  h( `/ k! ^9 K

  110. * ^" [- H+ C4 d) [3 @5 m1 N, ~
  111.         switch (stopBits)/ O2 T' E7 j7 Z
  112.         {
    2 S! H% }% f: |7 G: D. o
  113.                 case 2:
    8 b0 X* u1 U7 c# {7 ]! E
  114.                         USART_InitStructure.USART_StopBits = USART_StopBits_2;3 |7 v) l- A( }+ V  n
  115.                         break;' q4 l0 {7 F% m) _7 o) K' M  C
  116.                 case 3:; F" i8 s0 F, i. ^' n3 d
  117.                         USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
    0 q% @4 o- b) T
  118.                         break;
    ; y  r) P  f: C! w
  119.                 #if defined  (STM32F051) || defined (STM32F042), z  D6 o$ q, D2 }' Z7 z8 R  a
  120.                         //null
    " z0 J" r: D" o2 ?6 S; G! S
  121.                 #elif defined (STM32F100) || defined (STM32F101) || defined (STM32F103)
    : w' O. W8 H  D1 m1 _) W4 y9 D5 R
  122.                         case 0://保留STM32F05不支持,STM32F10支持
    3 I2 U: @  e: l- T: d* |5 ]' K7 ^
  123.                                 USART_InitStructure.USART_StopBits = USART_StopBits_0_5;0 W$ ^1 f( s; o1 P" ?, U
  124.                                 break;
    0 v4 y& Q; w0 T1 L2 M( Y
  125.                 #else- p0 Z6 `9 U/ J% I
  126.                         #warning "Make sure needn't define STM32F051 etc. ?"
    ! s. B5 E! Y+ x  ?3 N  g! h
  127.                 #endif
    + g7 i# q7 P3 I$ F9 f! L3 }
  128.                 default://1
    % F4 V7 t) t: _' n5 l0 g6 i
  129.                         USART_InitStructure.USART_StopBits = USART_StopBits_1;
    3 ?, k2 \2 t$ b. h
  130.                         break;+ U% p& c! l& ^" i: N/ U6 x
  131.         }
    2 O6 ?( l1 k$ |8 F* Z5 Z) S" z

  132. " B  J: U+ M9 J7 }! X, z
  133.         USART_InitStructure.USART_BaudRate = baudRate;' a  z! N, C+ A7 i  h" t" i4 M+ U. w
  134.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;* l% w* g: x0 H- K& L6 ?
  135.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;$ F1 M9 U. C9 s) Y6 h& _% A# P
  136.         USART_Init(USARTx, &USART_InitStructure);9 |, D8 k' L+ W- h+ M

  137. - v# e. y/ d+ I4 u6 J
  138.         USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);, d3 i7 {  S1 @( A# R
  139.         USART_ITConfig(USARTx, USART_IT_TXE, DISABLE);
    ' J/ i" e$ z6 c" p/ _2 [
  140. 0 n/ u( F% Z$ i7 U* H) f9 r
  141.         USART_Cmd(USARTx, ENABLE);2 w1 B3 b) D/ s/ C+ q! x0 [5 }
  142.         8 v2 m# n$ f& E1 }8 o% Z1 {
  143.         return pdTRUE;
    . X2 \$ I/ I, B) ?! X6 n! n
  144. }
复制代码

  A5 c# l0 ?. F
Dylan疾风闪电 回答时间:2015-1-7 20:35:32
发送和接收就是写、读数据寄存器xDR(x=T,R, ' ')。
# m# X0 A1 d: L: j; g& z
  1. /**
    6 I! E* d) b6 c2 v, K- e6 n/ c
  2.   * <b>串口向外发送数组。</b>* e/ z5 E6 g* ~7 i; @6 M
  3.   * @param  USARTx      COM外设
    , q! W2 V" `, X3 }0 Y- v
  4.   * @param pBuff        数组
    2 f# h: A  u2 s! P" l: j; h* a8 |
  5.   * @param length       数据长度
    8 w4 n; r  K: {% _0 M% l
  6.   * @version                        v2.0(2014-11-22)
    9 k) F, e' v: J* q, d; w; I6 m
  7.   * @author                 Dylan
    5 h0 A! k2 P' U  @' J* H; D
  8.   */6 u- u- D! a9 g: }* R
  9. void COM_SendBytes(USART_TypeDef* USARTx, uint8_t* pBuff, uint8_t length)" \, ~1 D. q: @6 A% s
  10. {
    " {( _( U; I' x$ R
  11.         uint16_t srValue = USARTx->ISR;' W0 B, e% i: J) f& ^1 a
  12.        
    % G5 s+ b; a% {3 d
  13.         while (length--)$ w" G, d1 p) \% {: `
  14.         {                       
    : m4 F( r! Y% K! b
  15.                 while ((USARTx->ISR & 0xC0) == 0);//等待数据被移到移位寄存器,或者数据发送完成。
    ! v! }/ i* t7 G9 {; t! s6 q) k
  16.                 USARTx->TDR = *pBuff++;9 Y. S$ ~2 p, R' ~1 _9 T/ \
  17.         }
    0 F% ]2 k7 R# x( Y+ J' u% w' G
  18. }
复制代码
; A( O" i. }0 y+ ?' x* P! u
5 w2 C6 |6 n! O: L* w3 {
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 编辑 ' ?! j4 F# t6 t( [! [# n
/ E/ f* f7 t7 V$ l0 `) f( G# w* {. A
基于cube代码生成的工程也可以使用了。- h& r3 T. m) R* l& h
串口直接发送,灯闪烁。
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测试正常PA97 e, a, I. j/ ?0 c$ {5 |. j- ^) ~
PA10
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 手机版