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

STM32官方实战经验分享(2020.7.31更新) 精华  

[复制链接]
沐紫 发布时间:2014-1-23 14:58
阅读主题, 点击返回1楼
11 收藏 156 评论278 发布时间:2014-1-23 14:58
278个回答
NNXia 回答时间:2017-3-31 14:36:33
好帖!收藏了
epochal 回答时间:2017-4-20 06:28:38
谢谢分享!
zhaoshan413 回答时间:2017-5-12 09:05:30
非常好的汇总
yanlinwei 回答时间:2017-7-4 11:43:59
很好的汇总资料,楼主辛苦了
yygkqzh 回答时间:2017-7-4 22:53:35
楼主您好 我在使用STM32CUBE配置以太网通信,使用的是正点原子STM32F407的板子,PHY芯片采用的LAN8720A,但是STM32F4cube中配置使用的芯片是LAN8742A,网上看了帖子说是二者相差不大,但是我一直没有配置成功,请问您有相关的资料或者是源码吗?
" q- I0 y; z1 e$ s7 S我参考了以下帖子* M/ a& T, K: d' l
https://www.stmcu.org.cn/module/forum/thread-609819-1-1.html
  W5 c! [6 D: {http://bbs.*mod=viewthread&tid=1120066' O- H2 }, Z& V- W; j
但是都没有得到帖子中的结果
还是看不穿 回答时间:2017-7-28 16:10:40
好贴!!
diandian 回答时间:2017-8-1 14:48:40
签到签到
diandian 回答时间:2017-8-1 14:53:42
围观围观
忘不掉 回答时间:2017-9-5 19:19:50
非常不错!很好的资料!
epochal 回答时间:2017-9-5 21:09:57
版块真好!赞赞赞!
leo121_3006061 回答时间:2017-9-18 11:50:24
非常好的帖子,THANKS!
1401696616 回答时间:2017-9-28 15:25:21
许多问题并没有碰到  只能来签个到
嵌了个入式 回答时间:2017-11-21 08:54:00
厉害了,这个帖子必须要顶一下
带我装逼带我飞 回答时间:2017-12-22 09:14:44
好贴,MARK!
5768340 回答时间:2018-1-13 14:42:54
HI  
- p" \, [# @+ x! U   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
! `) u& M& F4 ?# y% G   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************5 [7 m- P- c2 j% b8 p
  2. 函数名称:Cdfinger_Bspspi_init
    9 S6 y8 X8 [4 P. C" B/ p3 X
  3. 函数作用:spi初始化函数6 w" G- I; U' F0 Y; N1 v- h( C# ~
  4. 备注:9 Y# i* Z0 `* J6 N" O' U4 i
  5. ******************************************/
    4 Y8 K4 R+ C0 w( \% C$ p! {3 k: o
  6. void Cdfinger_Bspspi_init(void)* q7 ~" f2 J$ e
  7. {
    % H% z# y$ B: s* ?
  8.         GPIO_InitTypeDef GPIO_InitStructure;# {9 o  W. ]$ l+ N: @7 D8 R
  9.         SPI_InitTypeDef  SPI_InitStructure;
      g. u: W+ Y6 f' H0 J
  10.         DMA_InitTypeDef  DMA_InitStructure;
    ( }( ~  X; S, w% ?( f3 r
  11.         NVIC_InitTypeDef NVIC_InitStructure;7 ~4 ?* [$ z) ~5 l) S( N
  12.   7 C" L6 L, [) G  g5 n& J) S& b
  13.         int ii =0;  n% f, S( V/ G
  14.         8 Q  l8 Y6 b0 p* D1 i! J6 H
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);4 p) C7 Y# M+ I. A4 R
  16.         /*!< Enable SPI2 clocks */  R6 W. H/ K% Q5 k
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
    9 x# M6 p: A9 W; i- @6 p6 {( q; l
  18.         /*!< Enable GPIO clocks */
    ( a6 s$ D, j  Q' y
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
    2 u! F0 q, S8 b# k7 |
  20.         /*!< Connect SPI pins to AF5 */$ N& s0 s' ]  O' I
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    8 Q  p/ z9 w! I, B* ^
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);+ H( Q) [- U$ s: O+ X
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);) K) s5 ~' X' D/ u+ Y) f# X

  24. # v  K/ Y$ O9 q+ I
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;7 Y- G9 ]1 L/ W' G& T
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    ' w3 T, f/ M! M$ `
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    , f2 ^- O  ?2 }# |
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;0 P; F6 K$ E8 `8 J1 N4 b6 D
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;- M8 C7 f" j2 y, I8 N
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);1 g2 j9 g7 Z3 S+ ^# I7 c4 h1 B
  31. - b  ]/ j: U) K* Q! E) U4 |
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;: d/ o  _8 w9 y0 \6 N
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    # o. q+ K( E/ t3 y! R1 a* K+ o
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;: O0 A) z" t9 \
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;" Y1 k# N0 \( M2 o% q8 G
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    ; \/ y% ], w' F/ t9 U& R( T
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);! n: f3 g7 }4 s% h3 `
  38.         Cdfinger_BspCs_HIGH();$ c2 P) E8 z" z% N6 a' m" U8 p
  39.         //Cdfinger_Bspdelay_ms(1);
    ( B* ?  C7 m+ H! G1 q
  40.   //Cdfinger_BspCs_LOW();+ B. G6 ]8 c1 q! `( E  h! g/ ^7 P
  41.         SPI_Cmd(SPI2,DISABLE);- K- M# |1 k  u, G2 W
  42.         SPI_DeInit(SPI2);
    - h$ c9 Q( l1 D
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;. M3 z- ^! E0 s4 }( V/ C, S* }' l" a
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    % r1 e. A9 r8 a! I5 H" {3 g
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;8 V7 i2 R: K/ Y
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;; O& D4 D  ?, t" u+ e' x2 O6 O
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    3 {# d( C# A! k1 L2 D- ~
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;2 X0 d1 j0 t, I
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;" D( f9 D' k  s& I' ?
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;: ^( W( p. K# @& ~* f+ x+ }3 _
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
      d7 p& s8 Z( _; L
  52.         SPI_Init(SPI2, &SPI_InitStructure);7 L3 j# B$ \; F3 \

  53. ' Y" i7 o. |% y/ w/ h
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);: n4 `! ]/ J- F6 i. u2 M# B/ A
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/" F# j7 Y" r' p, g9 ^# U/ ~. ^
  56.         DMA_DeInit(DMA1_Stream4);
    5 W! K# P0 F7 V
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;; m3 X  {7 b* m7 b0 X6 r
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    # s. U2 |! h+ t9 G% G
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];" r3 w2 F/ ~- t% E+ ^
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    3 ^' e' T4 m) ~
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;% O6 ?' N% k0 k# v* X# C
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;5 W! l6 W7 m) h9 D
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;$ X& M: W4 ]! D1 M3 [/ e% }; U/ k
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;) h# a8 c6 ?1 A, z! s9 C4 \
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    % z, |  |2 E' \2 R0 n: W: I
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;6 U! _" J0 P! m0 P3 y" I' T: ^
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;7 j$ m0 \: T# N' a
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    ) C8 B- f. {$ H5 d
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    3 l! q# ~, S/ P1 z$ O5 v* s
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;, q. Q% v. t6 i8 K1 q
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;) S0 b+ `. g2 L# D
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    % F' T1 c: W, v8 I5 H. F' o/ y) E
  73.   
    : a5 c9 d8 d8 o1 P# a9 w
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/5 s0 A, d6 q5 _5 d+ C/ i; X2 [
  75.         DMA_DeInit(DMA1_Stream3);
    " O8 k* H* `, m6 X
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;; W0 h9 E( b+ |" C9 v4 ^
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    6 v, J" C& h# m3 i- D# b2 L0 W
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    " i' W& L7 ^& o1 g
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;' A' c1 ]: B8 x# b, c
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    # P9 i4 W& X; d: y( t# ]- p
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;& g; C! M) r5 s: q. ?  A
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    - M9 L5 W* B: t2 C: V# w
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;( d6 z% j1 N5 \7 y4 Z
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    + G- N" d4 k5 }/ H2 J6 N
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    ; }+ a( W6 t1 A, e- I5 D7 D/ L" z
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    # r& e* _! T& ^' e. ]
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    8 v. u, W& D, d$ X4 _0 K
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;, l8 H4 W: B0 C$ }0 p0 e
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    9 {; @$ p0 i$ n, F+ A
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;2 {; X+ f1 f! p6 X
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);- d4 V$ ^" A& w2 w$ H5 G; K
  92.         //Cdfinger_BspCs_HIGH();
    6 \9 U1 C4 l: l2 ]7 e0 t  w# u
  93.         ! P! g! ~. H- D! V+ O5 f) g1 s/ S

  94. 5 Q8 S8 o! P) u! c; W

  95. $ _* U3 U! }, H8 j4 R
  96.         //发送中断
    ' |" {6 {8 r7 i5 A( [) X# b. q
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    + N8 I) _; M) i5 }" _
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     4 x9 U$ X( r) d" ^3 g1 u
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;% z! t0 ?7 x8 e8 W; W
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;0 K0 j/ f4 @( G+ d6 {
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;# z* `! x( P8 u9 O0 b  u% t2 ]
  102.         NVIC_Init(&NVIC_InitStructure);
    ' A" _" q2 m, r
  103.         ; O9 Z: f3 u. l: L/ x/ c5 |4 ~
  104.         //接收中断2 y7 K" L9 g! N7 P* t- z: C/ d, J
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    % y$ W0 i; s5 f
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    - K2 m, A" T+ z5 q: C3 ?
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    . V+ x1 J5 e& x. L, P6 J8 D
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;9 ]0 H1 G# u8 ?" V& d) D/ |: g& U
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    7 v5 v. Q6 U3 U: O! }1 L
  110.         NVIC_Init(&NVIC_InitStructure);
    " P% A" [+ k& A4 d
  111.         SPI_TIModeCmd(SPI2,ENABLE);7 k1 B- U; q  k& C- [$ ~* S
  112.         SPI_Cmd(SPI2, ENABLE);% B5 G( d/ Z" k( T" k" H
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);8 h3 I9 o4 x6 }) p1 A0 g
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);! z% ?- j9 X1 r5 G7 [
  115. : [+ `$ s5 `, I) Q. [- g- @
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    ; ^  I' \2 F2 S- S& z" z- }$ s6 B
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    , ^) ]% U7 `4 j+ X! E
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);7 R8 ^3 I  u$ f8 N
  119. ! O* j, V: o3 T
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++), H! E; `5 a: W  j/ I+ b% K
  121.         {
    ) Y3 n" _: _" f; `; M. I8 [
  122.           if(ii%8==0)
    . ~" B5 H( m( }' P
  123.                 {
    * t8 Q; v% D8 V; l
  124.                                 printf("\r\n");' [$ `3 w/ ^9 b: o/ H- U
  125.                 }6 J' ?6 r! F2 S$ I" H2 G( b
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    ; f! _+ Y* |( E
  127.         }
    7 x% S- T  e; \
  128.         printf("111\r\n");3 @+ {( N- z# B& h$ s# d  t, P" j
  129. }
    # q# C" K/ ?8 L. h
  130. ; J5 m; y8 e0 ?' F
  131. 5 p* U1 K9 G8 A
  132. void DMA1_Stream4_IRQHandler(void)
    ' P$ \( v* U/ R, \! ^$ q1 p
  133. {8 w0 |. e) e) Q, S! q
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)
    8 v( t* d  W$ C
  135.   {2 ^, N. R8 X! h. P8 o* _
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    ) ?  f( b( b1 k* m
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    * X1 d6 k  h; s' V3 ?
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    ! r6 L/ P' I1 p. U
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);& u0 Q# _  D0 |1 {; Z) r# i3 H4 t
  140.   }
    ' d/ K5 i7 a! Q8 Z. R# N$ j2 @) b
  141. }# |5 r1 R( a5 \# B2 o

  142. 6 Y! J. u0 d* u. k8 w
  143. void DMA1_Stream3_IRQHandler(void)
    + \' I7 D) z8 I1 Z0 _9 ?! M
  144. {6 J* b) Y) u5 r5 x
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    1 G/ @: o# P" V/ Q. ^* Z: ^
  146.   {
    8 h; n) F6 O  y8 M' N/ ?
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));4 T/ _8 F' a8 R/ R& |8 T
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);4 T+ j. c, K) L
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    ( M2 q% s+ n- t4 |5 j9 ]+ R: Z
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);* P$ ~& _3 |, k, C; ?6 ^6 q4 s
  151.   }7 u) h; L+ w* G/ m# b4 m
  152. }
复制代码

所属标签

相似分享

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