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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
阅读主题, 点击返回1楼
11 收藏 157 评论278 发布时间:2014-1-23 14:58
278个回答
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( o+ A% B8 _4 j" L+ S( H   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
* h# a. y1 C! D6 I! G   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************# k, O0 j. O$ G' R
  2. 函数名称:Cdfinger_Bspspi_init! g) b: i- ^; C) u
  3. 函数作用:spi初始化函数( H( V0 r8 T, I- q1 c/ l0 n
  4. 备注:# m0 ~7 V/ D% G( M: c" Z7 r) ~
  5. ******************************************/; |' J0 A& h8 n+ J6 A2 @2 K3 g
  6. void Cdfinger_Bspspi_init(void)) \; M; a! M) N8 v" n. S- w0 h
  7. {3 c+ a8 U2 R( z. w7 \/ f  M" F
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    . E$ e6 B; ~- B$ d
  9.         SPI_InitTypeDef  SPI_InitStructure;
    7 v3 P9 C; z( o
  10.         DMA_InitTypeDef  DMA_InitStructure;" p4 k! ^) i( q# }
  11.         NVIC_InitTypeDef NVIC_InitStructure;! g( D# U! k+ v
  12.   
    7 \$ V0 b( {! C; `
  13.         int ii =0;3 \- P6 v/ w1 g, A
  14.         2 j' t2 |2 h! s* J. B
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    9 p$ e  s( ~1 A# Y8 X. Q' E
  16.         /*!< Enable SPI2 clocks */
    * Y7 @0 l3 L% |. a7 x/ H8 }
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);. `5 z0 x% Y, G9 d. I: ~
  18.         /*!< Enable GPIO clocks *// V# v4 [' }! @( P" \! @$ q
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);' P: d. W9 ?5 _4 m6 g5 ~
  20.         /*!< Connect SPI pins to AF5 */+ l  J1 m2 ]& t1 y0 m
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    : `0 i1 v* ]- O0 I: z, N
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);1 \+ X& r9 x  r, i# J, Z+ Q) ^# O
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);
    / a) l6 e- |$ ^8 }
  24. ! y) O2 M' R4 b# \. D, q% U
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;6 i2 u) d7 I% T+ K
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    $ m4 [; u/ t1 j- `( t# z- |8 Z
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;; D) Y3 _: j! }- w$ c
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;& ~. s2 l" T' G/ e1 z. x0 D; x
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    4 E( u3 R2 l) B% S8 }
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);. K- k4 O1 @' c6 `- p

  31. " f1 r$ t4 |4 W+ a+ E' U+ U6 w
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    - B1 u4 ]# M5 g/ c1 N
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;: i- x" z! N* U3 Q3 ^. q* F  _# _& Z
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    ; E. l+ Y/ N. ?' F
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    0 e6 t" B' }/ I. R# `# Z- h: B
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;/ D  C! r- L! Y5 j( Y
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    ( S; t9 y, h! I5 f% A8 [
  38.         Cdfinger_BspCs_HIGH();, D) c! \2 G  S) a! K
  39.         //Cdfinger_Bspdelay_ms(1);: ?2 y. M4 `, v/ L/ r+ t
  40.   //Cdfinger_BspCs_LOW();/ x7 b. P& p9 m; ?: k% O
  41.         SPI_Cmd(SPI2,DISABLE);
    + X4 O8 Y* w7 q3 f  u, l' v4 O
  42.         SPI_DeInit(SPI2);
    : R. v* q' P  ?* [6 b
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    * P6 k: j' B5 P" c5 l
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    - `, t. n  _3 k# J" j
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;9 V9 r- ^8 I1 X3 O4 _
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    ) V2 D, O( ?8 K
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    . A' R" h0 H5 ^
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;- o) t$ B* r) k9 z8 x: z
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;7 w" r5 ?6 N9 b$ p! N
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;/ ?9 v- Q$ G0 n  K. A% U. a+ V
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;3 o# I" v9 W* w: d! ^* g$ V, a
  52.         SPI_Init(SPI2, &SPI_InitStructure);
    6 G1 [  Q5 L$ T7 x! x3 u: D* T

  53. 8 {/ {& I  e0 @$ Q& d
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
      E# |* ]# L! F+ n) L$ ?4 Z* T- i
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    : R0 n4 t5 i  h* J! w: P% d, X
  56.         DMA_DeInit(DMA1_Stream4);& h0 }( g0 a0 `6 J
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;$ F0 V8 x' }# ^  z4 s
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);* v; e5 L4 E" u% s* F
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];+ Q' Z7 W5 p5 P2 d% _/ @
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    7 H% f. u' y! d/ B3 e/ {
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;/ Y6 [- o% L! z3 ~7 _9 m
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;: M3 l- P. N* E
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    6 c7 x; Q, T6 w5 T* p6 r! J+ o' H
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    4 N% G! |$ x( g& R0 K" x7 v2 z
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;6 x" k( z' M' F' I% L. O) E
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
      d# x! v. F1 a7 {5 i7 C
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;! [, Q) u9 P% u& Q
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;6 I+ y) Q, n! E& B4 Z
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;! ^9 D8 R. y4 f' r" ~
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;3 u: a% l- K) X& V
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;0 ]- s* p$ I$ A8 ^! T
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);# g1 c% d; ]$ J; E2 B2 P
  73.   
    ; p+ v9 I* D% c7 y
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/! @$ F7 ~! c. R( z7 V+ h
  75.         DMA_DeInit(DMA1_Stream3);) s, T! c% r, O. z  Y* ?. e
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;2 v% O/ I1 L* ]* {  @& \- q
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    8 T2 D4 u! ^- I( x6 S6 K) `9 Q
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    & p  n' H, t5 }, L" z
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;8 u# |7 O4 n  `3 ^- l& L& b
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    ' D3 g9 j% O. H+ D  k0 G! v
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;. m* @! H& G# [$ b
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    0 k- _' [' m1 Q+ _7 h
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;9 k- S/ T# _8 _* v4 [9 f( e$ K. e
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    / g! }+ h, a' ~# p! y  s$ [3 \
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;! e/ F3 }: P: I) l1 D
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;- D9 l! [8 c: s' h9 q0 C
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    . c: ?3 x' F6 t6 e, h
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;0 I' y: H" b3 |7 Q9 T
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    - V$ _" K+ x; l/ {8 S9 e
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;# {/ V2 j  d) o) n9 l  e
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    8 i1 }  W; w( U) Q  m2 B& |
  92.         //Cdfinger_BspCs_HIGH();! A; j6 Q, M1 [$ R" z$ Q
  93.         , a& X) Q+ H. ~4 _# Y2 Z

  94. , u) D6 n$ C7 c  Z5 t" U
  95. / n# x" |/ q) }, {$ a
  96.         //发送中断6 a. j4 G' v0 A' V, }' e" C
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);2 {9 X8 ^3 n) v2 {9 m
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     ) @# k4 H& n# R) k& c
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    1 a4 Y% \6 T7 i1 R* E2 y4 f9 E5 {/ v
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    1 \/ q- N7 F  f+ `5 D" m" K
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;8 x5 [* A- |& L7 j
  102.         NVIC_Init(&NVIC_InitStructure);
    8 y, m4 Y+ O$ o2 Q6 Y' S5 o$ z
  103.           }- m' S, W* v, p" k% Y, k: C4 E; P
  104.         //接收中断) G2 j! t& T. o6 Z9 E, C% H
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    7 |3 _1 b6 B, G
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    8 }' Y4 A% Y- A
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;0 }/ u  G$ r9 X. A) V  S9 }8 P+ K8 u
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;4 \' [* z  r  w5 N# N% r
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;' H$ t, a8 a) W/ v5 t1 R; O
  110.         NVIC_Init(&NVIC_InitStructure);
    ) q$ P, ]5 }& m7 \( Y
  111.         SPI_TIModeCmd(SPI2,ENABLE);) `" X0 Y6 ~5 K+ L& b8 d0 k& d
  112.         SPI_Cmd(SPI2, ENABLE);
    & B% c* E- ^- k
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);! M6 U: \  t5 A, W+ U( X" ~
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);2 H- l( F# {% P& o# u0 T( A/ K
  115. 1 J. p( E4 V$ C) f# k
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    4 |, X% Z4 T' z3 g+ \
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    ! m( G% ~' Z; v
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);7 }# O* q) J' C" p. P9 n

  119. : U+ a, B: I( z( ?& C9 O
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    % s4 W4 Y4 G/ z; G$ O" L' }: ]
  121.         {+ S: t$ Z1 v# m( m) _* A) U
  122.           if(ii%8==0)6 a& r, j8 s  G0 \
  123.                 {
    & J1 E' `( x* N5 y5 a/ Y6 S3 e
  124.                                 printf("\r\n");
    2 ^. |2 y- I) v7 F. b( P9 \
  125.                 }( P  ^, e! ^% G& w
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);+ F7 L+ t' I$ ?% ~' P9 i9 K: y
  127.         }
    , \# {# i7 U: |# L
  128.         printf("111\r\n");
    , X; W/ [4 ]6 y+ z( B& b5 K& v6 M" X0 G
  129. }# \+ `7 N# T9 b7 W
  130. ) u% B% W* B5 S0 w$ A
  131. 5 n0 c7 {/ K! y; A# K! ?" L
  132. void DMA1_Stream4_IRQHandler(void)
    7 Z% z- D6 _" g* \. q# r
  133. {% ^, _7 E9 a! L7 s: S# ^+ g, i
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)& b2 m' s/ {0 S, c% h
  135.   {/ E5 o2 `. k% j
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    ' v2 J$ F5 U* U2 h$ h( O, Z  z* j# j
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    7 p6 W: z, `$ h& i
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);9 E1 c3 U1 e6 B4 f  G
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);
    2 m% M7 `: U1 e( G4 n
  140.   }
      K# `7 g4 o1 B0 M8 N, p" |, j4 v
  141. }0 m! C- [! [+ {  s( s

  142. 2 h+ n2 v6 ]) R! N
  143. void DMA1_Stream3_IRQHandler(void)
    5 M9 Z, j3 k+ ?
  144. {/ o5 H) r0 C7 g: S- ^
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    - `( a6 g( n2 Z9 u( i3 S
  146.   {. z# C8 h8 K# e$ a6 m0 B5 I5 \0 S
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));& n  L. {1 T( k; U# e/ D% {' p
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    6 K' b4 ^# C2 Y( t
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    ; L9 {  o) W# N+ W4 @: m
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);) j8 R. }! Y) f6 ^/ ?  `7 Q% n
  151.   }
    2 m6 `9 ^9 K- W0 b6 d9 A& F
  152. }
复制代码
feixiang20 回答时间:2018-1-15 20:53:18
喜欢实战篇
dapan100 回答时间:2018-2-5 17:11:58
多看看别人出过的错,自己就不会犯了
langtaosha 回答时间:2018-2-22 21:04:38
多谢,大神中的大神
天外来客-399848 回答时间:2018-3-16 14:51:55
MARK一下
MouseCat 回答时间:2018-3-16 17:46:27
好资料!!!!
冷眼1121 回答时间:2018-3-16 19:53:51
极好的帖子

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版