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

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,网上看了帖子说是二者相差不大,但是我一直没有配置成功,请问您有相关的资料或者是源码吗?
8 P1 l0 h. ^+ X/ q8 I我参考了以下帖子
. {/ M- k/ U0 V% i5 d7 chttps://www.stmcu.org.cn/module/forum/thread-609819-1-1.html
7 u8 W) `- j( E+ E, f) K' Rhttp://bbs.*mod=viewthread&tid=11200661 E# v# \% [0 X4 n1 _
但是都没有得到帖子中的结果
还是看不穿 回答时间: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  
9 p% b! e1 R+ c4 U7 O2 ?' A   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:" R( c; X  y7 `6 Q
   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
      t' H1 r# u  @0 R$ ?- h7 F6 x
  2. 函数名称:Cdfinger_Bspspi_init
    $ f8 k7 {/ D7 m- q+ `4 Z) U! |5 F
  3. 函数作用:spi初始化函数# L5 y: x1 `3 V! B9 [; E4 j; N
  4. 备注:2 M3 V) V: q3 c5 Q4 W) d, L8 A" p
  5. ******************************************/
    ! z* c* ?) F+ B5 g" \
  6. void Cdfinger_Bspspi_init(void)
    ' N( b8 b6 I8 T+ F! d/ z/ Y' [
  7. {
    / L0 E+ @. o3 s- H
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    7 m4 F- T# H  ~- K7 t6 u/ F0 G; t
  9.         SPI_InitTypeDef  SPI_InitStructure;
    ) z5 I) U, f2 l8 [9 T
  10.         DMA_InitTypeDef  DMA_InitStructure;
    0 R7 c& m$ ?: \* n* w
  11.         NVIC_InitTypeDef NVIC_InitStructure;
    # D4 H) w9 q0 O; t1 K/ Q" d8 u
  12.   
    ' @+ E% s* ~* G* t
  13.         int ii =0;+ Y. e6 x$ W2 H
  14.         - c, g0 Q; g% ?6 `' s- q
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);3 r3 Z' V: v. v. o% q
  16.         /*!< Enable SPI2 clocks */
    + Z' v) K5 F! ~% T( ^6 |: f
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
    - C. _. e! [; e- f% M
  18.         /*!< Enable GPIO clocks */9 L8 z1 G. }8 v) g8 \% M
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);$ N( M! b" f, [  P% T/ ^7 t+ J7 n
  20.         /*!< Connect SPI pins to AF5 */
    : o7 e8 a# d% t" x5 M4 h
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    2 i: }5 I- [9 w* l7 x) v- x% K
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    1 o% y  q# F) G1 ^6 p
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);4 Z+ i) }% g  K& [0 m4 V

  24.   G+ d2 U; G5 o* N4 m% ^& e
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    - |  |- o& N7 w1 M/ }
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;0 W  R  s3 f, {, m0 ~4 D
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    * b' T% w* P* Y7 W0 Q, n" i
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;& O+ o) v! Z1 @" g  A
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    : }; X3 U* H( ?. P" \7 r$ W
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    5 Q( V' d/ M  R

  31. ; j) h/ V7 K' S5 c) w, m
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    : c7 ~! z& G8 j! Z8 n* P
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    6 ~' u4 s% o8 G5 e4 y
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;8 G4 @- ^5 E' h  P: h6 Y
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    % B# V; N! B& L' F+ b! M2 \
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    : c6 l3 u* q( }( g  W# A4 a
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    # k* z9 A! U8 ?' p5 D9 O  `: ~  D
  38.         Cdfinger_BspCs_HIGH();
    ! A) D: t( @: o  W' V. r
  39.         //Cdfinger_Bspdelay_ms(1);3 t. Y! R; ^& l& D# T
  40.   //Cdfinger_BspCs_LOW();1 v2 s# M# {# s& x  j
  41.         SPI_Cmd(SPI2,DISABLE);' U# }( H; g$ D/ z. J7 m$ Z5 H
  42.         SPI_DeInit(SPI2);
    4 A$ m# B  I+ G7 W3 K. G; P
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    4 z- R/ w" {8 H3 j4 V
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;2 ?3 h8 X# ~; e6 Q, H8 q& n
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    " D& |' N' o' N$ u5 {
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;7 c" n* x9 g6 g& {0 }5 @
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;: N9 _) t& O, ]9 M5 P" s3 S
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;$ o/ l$ W8 }. o' C2 A
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;& n  y* G7 u. Q3 o  {- C
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    3 w. a# Q/ w, b5 h% M% m0 Q5 ~7 |
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;; k9 [0 B3 F5 l% Z
  52.         SPI_Init(SPI2, &SPI_InitStructure);6 ?- I& G' J5 A+ f: s9 i: [6 d
  53. 2 j& l& E3 e0 o, G& h0 ]  M7 P7 _
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
    / ?3 B5 H6 S0 h6 H+ }: N
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    : |. w2 K) n& C8 S2 H/ J" \! K
  56.         DMA_DeInit(DMA1_Stream4);# a: p3 a9 M& B  i: w% E+ V& r
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;$ S8 |2 X3 E8 z% W. F
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    % W1 M* m7 [9 W0 n7 k! ?
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];2 [" l+ ]$ D% ~, ~
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    / Q2 Z! B1 y0 c& r; n
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    8 K+ ^7 |+ Z% J- R9 F" P
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    : ]3 K& e/ G& w! R6 a
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;- c  Q) v: G1 r$ t
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  U! J$ G$ Y% t% U4 o$ c$ [) c
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;' t$ {# E* r6 X- o: q, N/ _
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;* R/ ^4 d* t- q. P7 v( P% v
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    4 v; |( W! |( G* x3 e
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    " L7 ^1 C6 g7 K5 F, s1 n  ~
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
      M1 q! P: I4 O4 t
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;% O- c" U, u; f. |4 x# }
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;1 M# x/ G" b" f( \6 |& S
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    5 ]0 U9 Q9 A+ c0 U
  73.   
    & ?9 s0 u) @9 w/ q$ V0 `+ |- b
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/
    8 I8 q# R9 ^2 L  o& Q
  75.         DMA_DeInit(DMA1_Stream3);" F+ m8 V; r& R
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    $ g: S. c# E% _; Q/ b
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);0 f6 x% b* ^3 v$ }- C6 F) X* P
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    8 N! s8 w* {$ `$ o. m
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;  }% G2 Y- K) T! I
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    & |  a1 C2 ~4 `. S) P$ q' E: P
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    % G$ M7 `4 `4 T, j6 }2 w
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    % U1 B+ q3 u: \3 ]% R9 _
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;& c8 G- Z% k' e4 j/ k
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    ' R2 ^( d5 ~$ r
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    0 y3 U" E8 Q% D; O
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    5 {2 v) W, u6 w- z7 q
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;2 J: P4 C1 a/ y3 H2 {4 Z0 q1 l
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;5 B- g3 S% t0 x# K. Y  b
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    " T3 |( W& h0 Y+ m
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;; b1 o7 t- k' r
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);9 K, R+ L  g' X, k! L/ i
  92.         //Cdfinger_BspCs_HIGH();0 U: Y& @$ s$ C% h
  93.        
    # Z' h3 p. t% P2 e
  94. & w  _0 L- [# x$ x. f% D) M; h

  95. / t6 y2 f( t' H8 |4 q1 m) g9 o% D
  96.         //发送中断) X3 h$ Z* D' R7 }. G
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    1 w2 H" V! k$ o: k" z
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     % f0 P/ \8 I: H9 W* G. d4 p
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;" e$ s" k+ R+ N  Q; ^/ y- C
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;3 }" @) H7 o# r. \. y3 k% ?/ B
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;+ u& }5 O" f0 Z
  102.         NVIC_Init(&NVIC_InitStructure);
    ' ~! x; W- h$ m" ^% w, ?
  103.        
    & t8 j) J% m" L3 H* n, U2 D  ?. R
  104.         //接收中断+ O0 I/ k: t4 F: `$ V, ~1 t
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    5 i& ~& M; p, |' [
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     ; \$ S/ {. D+ U/ A
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    - Y+ `, D9 |- p; g
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;% L( y0 y+ H2 Q' C4 {
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    - p6 v8 ^' V" }( @
  110.         NVIC_Init(&NVIC_InitStructure);1 c; n1 d" p- m4 S8 y% c( U
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    1 O+ k4 j, D3 M5 K0 D( a
  112.         SPI_Cmd(SPI2, ENABLE);* c5 g2 c( {" t
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);5 i6 N  L' ~* v; J, O
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    " x# o* l' N* z9 u7 K$ y

  115. , {7 e& R, k1 s5 B
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);1 }* a: w, `0 R+ ]/ t
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    & i6 t/ F; M. n- M0 X) L
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);: v; _: `* J7 j! f' L5 \! @

  119. ( D0 C/ Z" B( g2 j: z' ^2 U
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)" g3 J5 h5 k5 \5 o1 @! @
  121.         {/ S8 S' F6 L1 C# R: d
  122.           if(ii%8==0)
    2 k2 R. r- R  O3 F4 r" z( ?: h5 j
  123.                 {( K8 U& K3 `+ h8 S
  124.                                 printf("\r\n");  T, f' y6 X9 Z: \
  125.                 }
    6 ?7 D$ m0 _$ Y) [
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    , }% H% B1 p' Y0 p
  127.         }6 g; ], i$ R- `2 c+ P5 C$ B; ~
  128.         printf("111\r\n");% F$ }5 z+ @% W3 }; L# A7 I+ n
  129. }% B  P) ?7 r; ?5 B- J

  130. ! D* _( i/ l  r& I
  131. , {6 m$ Q( s( q8 o% R' J! z& ]
  132. void DMA1_Stream4_IRQHandler(void)* Q9 E7 ~0 \/ i8 [1 S, q) |
  133. {
    . V' u# q) o6 ?( N6 H! A; M
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET); }. S( p9 `' L
  135.   {
    " s& J; j' ]# X) w" U/ R1 Q, ^# D% t
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    2 a9 o; ?0 h/ ~) L  o" b- j1 `( f
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);: |% A6 p* t5 B; ~, b
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);; I' m  n4 \% j
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);
    . L7 C5 ?9 A5 D! l7 ^) z$ S  s0 a
  140.   }
    8 ?" F9 w  z4 M4 W  c7 @3 O; m8 N
  141. }
    3 N9 p5 Q5 H% t5 [' q
  142. $ _6 I4 W' a! k6 C4 v
  143. void DMA1_Stream3_IRQHandler(void)! c; w! F2 N, ]% a
  144. {
    ( B7 m+ u1 m4 W# K
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    9 K2 z# b3 a) p3 d
  146.   {# R) }1 Y$ w! f: Q1 L1 p* ^
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    2 P' d9 `. X6 k$ A% l' k3 L
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    / P, J3 M# J) V/ R- W- r
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    4 q: u$ M1 l5 C5 Q( F% m+ |+ y
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);- p6 {; \: \4 _% j7 E0 u3 E' F
  151.   }
    4 S1 t" ?: G6 j: X# K5 `+ H
  152. }
复制代码

所属标签

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