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

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

[复制链接]
zhang_123-55168 发布时间:2014-12-21 09:48
本帖最后由 zhang_123-55168 于 2015-1-13 12:16 编辑 $ d( D% x0 E! L+ X

6 N/ Q! k. ]$ Y     收到nucleo有几天了,昨天拿来发送数据竟然发送不出来,莫名其妙。收货当天已经验证了我的板子是好的,可以有数据经虚拟串口发送到pc机。昨晚再次用MBED编程得到hex文件下载还行。上网下了网友发布的那个串口和adc3的 例子还是好的。证明硬件没有问题。那还什么可能性呢?
- K% K, t7 o' h    我是个超级懒的人,再说水平也是差强人意。程序一行一行的实在是看不下去。一个一个从网上找程序试验,中间省略10000字,中间省略一个晚上。
  [; f$ Z7 l4 V9 v: m+ @7 I5 Y   大早起来,没办法,还是查程序吧,串口号了?????????、嗯,真错了。程序是1,nucleo怎么是2呐,无语。都是例子,为啥串口号不一样啊。。。。。。。。。。。。。。。。。。。。。。。( x1 m9 j1 X5 Y. n) H, d
  不叨叨了,附上我可以单独直接发数据的例子,灯闪烁。
5 a: M2 Q2 J2 I: `8 E9 @ PS: 例子程序好大,顺便把不必须的文件夹删掉几个。删除半天压缩后还是100M。没办法,单把main.c发来吧
# J, t7 }8 d) F$ c! C/ o; y! i- d9 a9 \0 j% l3 I4 J" Q. P1 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. /**
    * B0 K! x  [: `% z; r
  2.   * <b>初始化通用异步收发器。</b>! n! W5 W& f- H+ P- \# \
  3.   * @param  USARTx            串口外设- F$ w+ p# S1 l- }
  4.   * @param  baudrate    波特率( V% ~; i3 k: [
  5.   * @param  parity      校验位。0 None,1 Odd, 2 Even6 Q6 |  A6 w/ u; q
  6.   * @param  length      数据位个数。带校验7 or 无校验8
    % l% D( G8 D- ?( M6 Y
  7.   * @param  stopbits    停止位个数。1 1bit, 2 2bits, 3 1.5bits
    0 t: q4 r1 H' g
  8.   * @retval pdFALSE (0) , else return pdTRUE (1).+ Q; l0 Q3 |: z; L6 e' M# Z9 D
  9.   * @version            v1.0(2013-12-5)3 u1 V' r% e' X6 i. O* _3 [
  10.   * <p>重写函数的功能说明!- ]! K- n2 {( i7 t. @
  11.   * @author             Dylan
    : k  @/ j) D0 j$ B- j& m7 g
  12.   */
    ( g) o( j4 b* f8 a
  13. uint8_t BSP_USART_Init(USART_TypeDef* USARTx, u32 baudRate, u8 parity, u8 length, u8 stopBits)
    & w0 X( {6 x% Z9 C$ ]8 h" `
  14. {
    / q& P5 y$ b+ @0 r: w: I% P
  15.         GPIO_InitTypeDef GPIO_InitStructure;+ O9 \: R. _. \6 U2 a9 u: {
  16.         USART_InitTypeDef USART_InitStructure;
    . u" G: P0 I& @$ _( v
  17. $ H# t" p1 `* e8 E0 |9 j3 j
  18.         if (USARTx == USART1)' V1 J* e( G9 O4 |8 n' M
  19.         {% U- w8 w, x- v9 l9 x" w$ d! r
  20.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);& y) r+ g6 G. t+ h: c  G7 ^$ d

  21. ; p# K" a4 h& @( i& {2 Z6 @4 X9 \/ ~
  22.                 // GPIO的公共特性' U. A+ n+ Y3 I7 T6 t
  23.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 q* S" V" Y- r( f" L& b

  24. 1 D: y4 i1 u" ^5 C2 h! n
  25.                 //COM11 T9 |: w+ }, n% `  A( N
  26.                 //USARTx_TX   GPIO_Mode_AF_PP- u4 L) `' S7 |% K" m. U
  27.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;! r% \- G" D4 F5 G
  28.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    5 X# H; F) F+ l
  29.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
      u) E; t; w+ u
  30.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Tx);
    " q+ E7 |/ n* f, t+ |& ~; j
  31.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Tx) , &GPIO_InitStructure);" Q- W6 {2 \0 L" R( M- M
  32.                 SetAF_COM1_Tx;//必须选择复用功能
    3 ^/ S! G" {/ [

  33. 0 H3 \( V+ i; z( |! g- I( M7 ^
  34.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU
    $ R8 n  @# w  E% |: _8 t# r
  35.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;2 c; ]; S- O: s+ L7 y
  36.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;0 w5 G1 g% Y6 F& t
  37.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    / [# }# x! x2 Z) r: `
  38.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Rx);
    1 T* I0 Z: ^4 H7 Q  ^& I2 J
  39.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Rx), &GPIO_InitStructure);" {% x' ~3 F6 i; z
  40.                 SetAF_COM1_Rx;//必须选择复用功能
    ; w2 F2 L+ Q4 R; b9 T# U

  41. 0 U% x2 R+ D$ S+ `! o
  42.                 //RS485-DE
    * g% W$ r+ J4 |9 p! s
  43.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    - _, d" @5 _. ^! ]  x0 r3 w
  44.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;1 `6 L6 g) [: e  w, a$ d1 [9 O
  45.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;/ T5 {- ~4 I  T; F* w: F# j, K
  46.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_DE);
    4 t, i0 P8 C1 E, P# v) |
  47.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_DE), &GPIO_InitStructure);! r/ M3 [  S* \7 y/ g
  48.                 GPIO_SetBits(RS485_DE);
    0 m$ Y( o& j/ y5 Q& v. y

  49. , ~7 r3 o5 Q2 m( g7 n4 h& L( m6 Q
  50.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    2 r+ B. U) @; K5 D
  51.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
    / o' r, I) L2 Q' z
  52.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);) s- U4 M! T* w. ~( d& T" w# t" X  H4 {
  53.         }# l6 m2 o+ D( v3 Y) V& f: J; I
  54.         else if (USARTx == USART2)
    8 V# \+ |  T5 M7 e
  55.         {
    6 u5 G1 [- l; k* e; ^: N4 P  |/ ]
  56.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);; m; B( C1 G" J! K

  57. 7 |( C1 d% w! q4 L' k
  58.                 // GPIO的公共特性" a$ @. c8 d2 {$ r
  59.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    % T  e$ b3 Q, E$ z) h- b3 E6 ?; l% S
  60. # B  X; d' o) a
  61.                 //COM1
    1 R9 o) M! k( @& e: a6 v
  62.                 //USARTx_TX   GPIO_Mode_AF_PP5 T5 G0 q% v7 L% ]- Y& Z
  63.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;1 I" W- `0 W. J" y; b
  64.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    5 e. N! R% q# X+ e
  65.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;9 b5 ^& X5 p; B2 j  g( ]( R
  66.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Tx);
    # y; |4 A+ V5 ~# f4 e" G
  67.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Tx) , &GPIO_InitStructure);, ~1 T+ o$ ], S& c/ y1 z$ U
  68.                 SetAF_COM2_Tx;//必须选择复用功能
    6 t0 X4 o  A8 X
  69. 4 n: Q- x7 C$ K" s4 g" A4 a
  70.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU, B4 p% d% x* c( |: q' {
  71.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    8 m( Z. s, }4 _- v5 ~2 g
  72.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    $ V) g9 w4 g- U; s, B
  73.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;$ Z: u# e, ~2 F! Z
  74.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Rx);
    - I& b4 ]- R+ F2 P3 r8 {7 \
  75.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Rx), &GPIO_InitStructure);6 H- q  @6 A/ _. Y4 c( y3 f
  76.                 SetAF_COM2_Rx;//必须选择复用功能! h7 o2 X) p/ n- g8 V

  77. / b8 x( r7 Z! G8 c" u8 |
  78.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    0 X- Z. B; Z8 A# e3 |7 X1 W
  79.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);! ~" S5 p% X, s) `) Y) a3 C7 R5 t3 s
  80.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);' I0 f9 L: ?5 t- ?9 V" L5 z
  81.         }
    ! V. \5 z* W4 }& a" _1 Z! I" q
  82.         else5 I: R1 i, `) S' h: {+ N2 S
  83.         {# d1 y! f( k8 \3 G5 @- B
  84.                 return pdFALSE;
    ; O0 L( }5 A1 e1 o: j& H
  85.                 //#warning "Make sure USARTx is exist ?"
    ( Y6 m. b1 ^" a+ v. T
  86.         }
    ( U  H/ l& S0 `) j  `! P8 K+ a- E1 W0 r
  87. 4 }* L) J5 z3 J
  88.         /* now start init usartx info. */: k! y1 S! c% |# W4 f6 _
  89.         switch (parity)' d& n; o# A* \2 t  G, n+ E
  90.         {
    4 [: u% k& w# P  b9 C% h
  91.                 case 1://奇* }( F* m$ v; R' \, Z
  92.                         USART_InitStructure.USART_Parity = USART_Parity_Odd;4 }! Q9 M2 B" y
  93.                         if (length == 7)7 {  a8 S& @* _3 S$ Z
  94.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    ; z  I& w& j2 N1 u0 L4 a- X
  95.                         else
    3 c8 p. y- r0 B0 p7 P' }
  96.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;7 b9 l$ Y& l( Y8 A+ r
  97.                         break;- ?/ o" D# o5 O6 O9 q/ c2 Q
  98.                 case 2://偶
    + s# @% M) g' \
  99.                         USART_InitStructure.USART_Parity = USART_Parity_Even;
    9 L) _; V$ A( x0 T7 `, j8 w0 ]$ i* l9 b
  100.                         if (length == 7)" Z. k/ s: D9 O, D5 s8 f
  101.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;$ r, p( L; F9 T. t
  102.                         else
    ' S8 E6 h6 F) I2 @' f# ]7 o* t
  103.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
    7 B% d2 f) o+ Q5 D0 c5 B9 L2 `
  104.                         break;
    , b! D" A# P& N# W8 Y& ^2 k
  105.                 default://0无8位数据位! k3 }, l  u9 d; G
  106.                         USART_InitStructure.USART_Parity = USART_Parity_No;: u) T$ E3 o/ R8 d" o
  107.                         USART_InitStructure.USART_WordLength = USART_WordLength_8b;8 N8 Q3 Q* y2 k
  108.                         break;
    ( N* S- W/ {/ e% |
  109.         }
    6 F' E( H  w8 u1 A1 @+ _

  110. 3 [/ i/ i- V% r
  111.         switch (stopBits)- y; w  A& ]3 w+ B  B7 P8 C
  112.         {
    4 {; w; r# g% O9 w& E
  113.                 case 2:
      g0 {6 K$ m$ d3 y4 I4 |
  114.                         USART_InitStructure.USART_StopBits = USART_StopBits_2;9 I: V& B/ ?. m5 C! _
  115.                         break;  l4 N" T( c; T2 A: u
  116.                 case 3:% ?2 A' a/ Z, @
  117.                         USART_InitStructure.USART_StopBits = USART_StopBits_1_5;' y# i& k2 s5 E+ d* u% i# C
  118.                         break;
    ; o* g% [" ]6 Z" E. H- Z, d- S& ^
  119.                 #if defined  (STM32F051) || defined (STM32F042)0 M7 m: w+ b; @& [$ p: E0 V
  120.                         //null
    : Z- V9 \7 W4 `: ~. A; G/ f" ~
  121.                 #elif defined (STM32F100) || defined (STM32F101) || defined (STM32F103)
    ( n( B- K/ G" y" ^0 c
  122.                         case 0://保留STM32F05不支持,STM32F10支持$ P, ?! n# @5 g; q9 Y
  123.                                 USART_InitStructure.USART_StopBits = USART_StopBits_0_5;( j+ Z: v& q% N3 |+ M" ?- h4 u
  124.                                 break;
    9 I5 z6 F5 M2 |6 Q+ h
  125.                 #else
    0 e6 k8 q4 X& v) d
  126.                         #warning "Make sure needn't define STM32F051 etc. ?"
    % ]% T" ~, g/ n  q0 U' y
  127.                 #endif7 ~! s8 i- T: b# C0 f+ c1 k  {
  128.                 default://1
    1 M9 k  m0 @, W2 ?
  129.                         USART_InitStructure.USART_StopBits = USART_StopBits_1;
    2 C, v; J! }( K& A0 O% `
  130.                         break;
    ! G" t3 n  ?( B, x4 d$ x0 I+ ]" \0 {
  131.         }: Y) S* R0 S, |* I2 Z3 \

  132. ' B* Q  G6 M% T
  133.         USART_InitStructure.USART_BaudRate = baudRate;
      p# z( X; d# n* k0 D
  134.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;2 P9 f; _1 ^8 P  a% j
  135.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    6 m9 ~8 U! L1 |+ O, X
  136.         USART_Init(USARTx, &USART_InitStructure);+ l) S: _, n7 t! y1 d* t; u' v) o
  137. / `0 K% u: m7 S: J1 J8 h
  138.         USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);
    5 K3 J3 _7 A' y; r9 D. r  o
  139.         USART_ITConfig(USARTx, USART_IT_TXE, DISABLE);
    . \% ~8 \  j0 ?0 n

  140. ( {8 \0 l" m& w: E& A) Z
  141.         USART_Cmd(USARTx, ENABLE);! `4 i' |. N5 h, e8 V
  142.        
    5 M: u" N1 X2 S& i4 j
  143.         return pdTRUE;0 A1 a% b1 E, W2 N3 P
  144. }
复制代码

. b, |4 C/ c# ~
Dylan疾风闪电 回答时间:2015-1-7 20:35:32
发送和接收就是写、读数据寄存器xDR(x=T,R, ' ')。
5 v! i" I$ w- U. d- p! w9 o
  1. /**- H7 e4 {* y8 S
  2.   * <b>串口向外发送数组。</b>/ I" t# v8 \% g- I/ L* O5 y% D
  3.   * @param  USARTx      COM外设5 D3 |% a4 o+ t0 q' K
  4.   * @param pBuff        数组( }9 {0 K4 V% j( Q
  5.   * @param length       数据长度! I9 t' B: ?8 d" l. [  y
  6.   * @version                        v2.0(2014-11-22)
    2 R2 A$ m5 T" }0 B8 i
  7.   * @author                 Dylan
    8 W) S8 l& g: E# E& q' |( J& K
  8.   */, g+ R% ^2 D. t" P9 f
  9. void COM_SendBytes(USART_TypeDef* USARTx, uint8_t* pBuff, uint8_t length)5 z6 s+ r8 H& o$ E# h
  10. {* G0 j% ~" i) {3 O, G/ b1 H
  11.         uint16_t srValue = USARTx->ISR;" N% f) k2 d) L
  12.         & ~: o8 J; i) z1 M( k& G$ \: {
  13.         while (length--)3 |: @. G* f) `
  14.         {                        - H" i( x& T, o4 T
  15.                 while ((USARTx->ISR & 0xC0) == 0);//等待数据被移到移位寄存器,或者数据发送完成。/ p0 S. I% i& {- d0 a5 |) E7 U
  16.                 USARTx->TDR = *pBuff++;* F" B; R. c* Y4 S' k2 V; W
  17.         }0 c% B3 Z; S7 M6 b$ W& Y4 C
  18. }
复制代码
; k2 F* Y6 J/ ^4 {

- E7 N* q8 h5 L4 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 编辑
0 k" a6 y- o& o/ |6 _- P( i/ ^
# p2 A2 e7 F; n0 w4 W基于cube代码生成的工程也可以使用了。
* k  F# }% N% k$ `. p! @5 W串口直接发送,灯闪烁。
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# Y/ S" [+ [6 u& E" m: z7 U: T
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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版