找回密码
 注册
关于网站域名变更的通知
查看: 408|回复: 2
打印 上一主题 下一主题

两个ARM间的SPI通信怎么实现?ARM型号均为STM32F429ZIT???

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-6-24 17:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

发送时,采取的函数为HAL_SPI_Transmit_IT();
$ I* m9 e$ W# ~接收时,由于不知道对方发过来的报文长度,( n% Q* N+ y' S2 M8 t; d7 p
就不知道用什么函数。厂家提供的软件包里面的receive函数都需要3 a' M. q8 [" E) K1 z2 \: u2 |
指定size长度。
) D# k7 p- d% Q; _6 a# C下面的代码中,我在最开始开启SPI_IT_RXNE中断使能。
* `2 f) @: I) ~$ b/ i3 P, w7 u通过中断函数和数据处理函数来解析报文。并把报文上传网络服务器。9 d" O6 c3 H% R
但是ARM SPI接收不到数据。不知道为啥???


# k& N/ w/ S6 ]1 h本代码为SPI主机的。7 `, c$ T( ?+ s+ ?6 u
/* SPI5 init function */
1 \' y# _7 r! S: ?) F1 Lvoid MX_SPI5_Init(void)
5 }, y& J7 ?7 |% X% G. L{

hspi5.Instance = SPI5;
" }* E; D; Y5 o8 ?hspi5.Init.Mode = SPI_MODE_MASTER;& M+ l  j) D) g  [& U6 s
hspi5.Init.Direction = SPI_DIRECTION_2LINES;6 z1 v$ p! |$ z# l6 r2 |
hspi5.Init.DataSize = SPI_DATASIZE_8BIT;% r1 R' \8 V: `. v& l- D  S
hspi5.Init.CLKPolarity = SPI_POLARITY_LOW;- {4 J$ e+ d1 n- Y
hspi5.Init.CLKPhase = SPI_PHASE_1EDGE;
! c2 {& `- D5 w% ]/ @0 `0 T' vhspi5.Init.NSS = SPI_NSS_SOFT;  E' M; |$ s3 ^0 T2 {
hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;; |9 O8 G5 z2 @, b
hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB;
0 R2 r# y1 ]5 D  x1 u5 s5 X8 |hspi5.Init.TIMode = SPI_TIMODE_DISABLED;
' P4 o5 x) x( P: V/ ?% w1 }4 \* Lhspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;1 ?- m8 C4 H4 o6 k, P1 U
HAL_SPI_Init(&hspi5);

}

/**

  • @brief Initializes the SPI according to the specified parameters
  • in the SPI_InitTypeDef and create the associated handle.
  • @param hspi: pointer to a SPI_HandleTypeDef structure that contains
  • the configuration information for SPI module.
  • @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) { ..... HAL_SPI_MspInit(hspi); ...... }
    / m+ S& ~1 s4 R+ l+ J. i

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)# I+ `( N$ Y* t  e0 v
{

GPIO_InitTypeDef GPIO_InitStruct;
2 v3 C6 |7 e9 |+ Jif(hspi->Instance==SPI4)- c' G' z. _, c7 @; m$ F" M1 k
{
( |; w3 c* Q* Z9 J( B9 e/* Peripheral clock enable */5 K# m8 {' @1 Q; L* A
__SPI4_CLK_ENABLE();

/**SPI4 GPIO Configuration PE2    ------> SPI4_SCKPE5    ------> SPI4_MISOPE6    ------> SPI4_MOSI*/GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_LOW;GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

}

if(hspi->Instance==SPI5)2 j8 G- X' t" J
{
- Q2 k$ K( r% O1 R% v/* Peripheral clock enable /
. p6 J5 Y/ C; m0 ~2 l+ t__SPI5_CLK_ENABLE();5 w5 n* b2 ~. h
/*SPI5 GPIO Configuration ; O0 {) h1 M, S. `
PF7 ------> SPI5_SCK1 K9 e- v$ d1 O) P) l$ l
PF8 ------> SPI5_MISO4 M7 N9 L6 m! m( ], K: {$ p  R
PF9 ------> SPI5_MOSI
, D2 F5 q" T6 L) T, T; Z*/
, u, R5 ~7 j1 R$ [; WGPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
5 U% z' ^" h3 u! LGPIO_InitStruct.Mode = GPIO_MODE_AF_PP;# Q. z  ?" @" E- A0 D* T5 A- v4 P
GPIO_InitStruct.Pull = GPIO_NOPULL;& R* W; O6 D  j3 f4 n. H. }5 N; X
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
3 `5 j0 j' h) x) J2 mGPIO_InitStruct.Alternate = GPIO_AF5_SPI5;
# A. R+ w' j% P- ~HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

}

}

main()3 ], G- t! m- w1 Y3 ^0 ^
{
1 N: l0 [+ B0 w  v6 O; Z/ _3 t- {MX_SPI5_Init();
6 w: Z9 X9 B/ `6 V; d__HAL_SPI_ENABLE_IT(&hspi5, SPI_IT_RXNE);
: m7 q* N% H* K' I& e( r. R  n: Fwhile (1)
7 h. k/ u$ W4 L2 w/ U+ [{
% O! x$ f8 K5 QSPI5_Master_Rx(); //读取从机发过来的数据。% f6 g9 S1 T: |( `. F( l
}
5 u& w# a) Y! Y& K2 i) E}

typedef uint8_t u8 ;& _) r! K6 {& B( N' n* k$ J5 K9 p
typedef uint16_t u16 ;
" _2 p' Y: J3 g$ t$ N# Qtypedef uint32_t u32 ;
3 p+ m; e9 e; hu8 hmosi[50]={0};
1 x/ d$ F2 P3 R: b+ M7 W, q1 Pu8 mosi1[50]={0};" h( p/ E1 ~0 Y3 n
u8 phmosi[50]={0};
% c% x+ @: o& f- O2 g1 W# ~u32 imosi=0;" f3 y; C" ^7 X
u32 spi5_rx_len;
. d2 r  z( S* ]u32 ic=0;& E( D) i! a. B! r
#define comsize 8
) D1 \9 q! K8 D
! s8 |; i  d& K1 O5 c: \$ `extern u16 tSession;
1 `8 `; Y/ N0 eu32 udata_len_spi;& B1 k% ]: o3 Z! M% y, e" Q* ^
extern u16 ports[comsize+1];0 z! G# n3 V8 f; g; U. q* W) y
extern u32 uTimeLst;
" P, \# I( @, a  W3 b1 J! v2 u: D! k: L5 l6 D* H
extern SPI_HandleTypeDef hspi5;' G3 M  E7 l3 x$ K
void SPI5_IRQHandler(void)
% `3 ?7 h& g: Z0 O! u{# }/ F( g6 j5 n+ @, u9 J/ j  t
if(__HAL_SPI_GET_FLAG(&hspi5, SPI_FLAG_RXNE) == SET)8 S: p0 V/ K" U$ q7 f0 J4 a/ W
{" E/ {& \. u8 ~9 {* G3 F
hmosi[imosi++]=(uint8_t)(hspi5.Instance->DR);

}            

}

void SPI5_Master_Rx(void)
* W: f- q. e' s* ]  E{1 I* G2 e+ x4 f+ a" B
//for(;imosi>=(ic+7);ic++)
& c# ~. l& K% u: i5 L8 Yfor(;imosi>=(ic+5);ic++)
$ I" D' @* e7 p. x, A{% W3 y8 Z8 k: n
if((0x2e==hmosi[ic])&&(0x17==hmosi[ic+1])&&(0x0==hmosi[ic+2]))
; J" \8 r# |$ J# w7 y% y! H% d{  _4 Q' d1 E+ u2 N" s
spi5_rx_len=hmosi[ic+6];
. p* G2 R7 e( a% {: P/ @& U$ K1 Cudata_len_spi = spi5_rx_len+1;
& ^( r6 d& ^) ]6 _memset(phmosi,0x00,udata_len_spi);4 g% j# }& Z* S
phmosi[5]=hmosi[ic+5];
  s+ N6 X; j- _" x8 R
# ^% T' T& g7 Q0 tphmosi[6]=spi5_rx_len-7;
5 E) t5 V1 a6 ?3 B$ N! ~) umEMCpy(phmosi+7,hmosi+ic+7,spi5_rx_len-7);+ D; |. U& R# U3 X5 @% I: z
memcpy(mosi1,hmosi+ic,50-ic);
! r) ^! e. x$ @- G9 x+ w$ Z5 wmemcpy(hmosi,mosi1,50-ic);7 D1 u5 B: p8 \
imosi=imosi-ic;
/ N3 l% A" r. `4 D, d& |ic=0;  \) P3 ?8 l& r) _  H! O% a
//**************************, l! I1 V: }. F% R' b9 \+ z1 n
tSession++;3 _2 p6 d+ v& X
phmosi[0]=0x2e;  S9 J! X- s, R& X7 b& A' t4 |
phmosi[1]=0x17;
4 l7 f& V# P7 ?& ?: {phmosi[2]=0x00;, w* K( ?$ H8 ~( n
7 W3 m) U& W# O9 W. Q
phmosi[3]=tSession;5 m8 U6 ?: o1 V$ g
phmosi[4]=(tSession>>8);% N: d* }* {) {! f9 s

! o! Z+ u' V! [0 E3 B% a3 Y//memcpy(udata+7,tx1_buf,rx1cnt);
% z9 c% E6 I# {9 Aphmosi[udata_len_spi-1] = crc(phmosi,udata_len_spi-1,1);
; R) a- a8 P- ocom2net(ports[0],udata_len_spi,phmosi);/ Q  h% D7 d6 [5 S
uTimeLst=HAL_GetTick();& k- \8 n# P6 j- l  Q
}
6 _1 f3 }0 G! V; Q/ l& L# r* i}+ K% K) z- ~" g" I1 {$ r
}


0 w# i( w+ z3 T, C
  • TA的每日心情
    难过
    2019-11-20 15:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2019-6-24 19:53 | 只看该作者
    同命相连,帮顶

    该用户从未签到

    3#
    发表于 2019-7-5 22:50 | 只看该作者
    我也遇到同样的问题,我在同一个板子上的两个口通信,总是收不到
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 19:55 , Processed in 0.156250 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表