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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

发送时,采取的函数为HAL_SPI_Transmit_IT();
- }7 X3 d, n! g/ d/ O接收时,由于不知道对方发过来的报文长度,0 q" A8 W9 U' M7 R7 g& f
就不知道用什么函数。厂家提供的软件包里面的receive函数都需要
. n8 l) N( |( |, ]3 l- q$ S指定size长度。
" ?" v2 c4 B. l2 V$ A! T# k, b( t下面的代码中,我在最开始开启SPI_IT_RXNE中断使能。
+ C% P" {, F: T  w6 D/ K通过中断函数和数据处理函数来解析报文。并把报文上传网络服务器。1 \: x+ N# |: Q( B  Q" C
但是ARM SPI接收不到数据。不知道为啥???

  y) U9 [4 x8 O' G; W* K4 P
本代码为SPI主机的。
8 D) g, u  [/ W* {. K( d. M5 B; |/* SPI5 init function */, c; r/ ~9 L; j+ i
void MX_SPI5_Init(void)
% Q, k$ g) E, \+ ?: a, L{

hspi5.Instance = SPI5;5 |( ^1 L% ^9 B6 l, p# Z& M$ m* Z2 u
hspi5.Init.Mode = SPI_MODE_MASTER;* A* r7 {4 E+ D) g
hspi5.Init.Direction = SPI_DIRECTION_2LINES;
8 `6 z0 J4 f% f3 \9 Z3 A# a3 ?8 Ghspi5.Init.DataSize = SPI_DATASIZE_8BIT;
: j% ?( `3 c! ?* {hspi5.Init.CLKPolarity = SPI_POLARITY_LOW;6 V- ^' L/ X" M: }+ G! s
hspi5.Init.CLKPhase = SPI_PHASE_1EDGE;- q- q+ k2 V$ i% u% P/ D! {
hspi5.Init.NSS = SPI_NSS_SOFT;
. R5 Y8 N7 V: e9 \4 mhspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;& q0 k* J' Y( S0 f% ^+ |8 t" s
hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB;2 `7 z$ g: h+ T3 N* A: O
hspi5.Init.TIMode = SPI_TIMODE_DISABLED;% Z5 x! U. l9 H9 B/ X1 {$ u* ^+ n7 }
hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;4 X& K( q; W0 _0 Z
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); ...... }; C) N) I3 |' D7 S; q" l# D% G

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)  n& s& f2 y" g; S% a+ V0 F& c/ ]  o
{

GPIO_InitTypeDef GPIO_InitStruct;. K% _" y2 O9 o/ e
if(hspi->Instance==SPI4)
6 k# ~+ F# t) _  V' Y{
$ p; ^( _1 t' }4 ?/* Peripheral clock enable */
7 U" {! A. U, \__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)9 K; }/ u0 B. m& ^/ L
{
! q: e5 J6 w! b+ U/* Peripheral clock enable /
1 X. o) Z4 O" x: i* y__SPI5_CLK_ENABLE();
# b! O( Z- C# C$ f- @# q/*SPI5 GPIO Configuration
/ L9 z) H# o7 `5 z2 x; xPF7 ------> SPI5_SCK0 h7 {* `: t3 v& z
PF8 ------> SPI5_MISO
1 o6 _5 L# a4 h: fPF9 ------> SPI5_MOSI
! k" x  M! T& G0 O7 W*/
% B1 o/ P* o8 B" ]4 ]3 {* wGPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
3 c8 f$ d4 ?5 @  `GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
$ p' _+ z2 K3 G% |GPIO_InitStruct.Pull = GPIO_NOPULL;9 `2 e* F+ _6 n/ v
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
* g( z1 j, a; ^$ O" e) T8 u; g/ q# MGPIO_InitStruct.Alternate = GPIO_AF5_SPI5;
& a3 f" [. b$ c& x0 p, k+ T3 xHAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

}

}

main()
7 [2 `- o. [6 g5 d4 H( g: Y{
& a0 x) T+ D9 G& kMX_SPI5_Init();
7 r, S& e2 s- J$ K__HAL_SPI_ENABLE_IT(&hspi5, SPI_IT_RXNE);% c. }  E( W% `$ j' _. K& v
while (1)$ e2 k6 V( p) d+ u5 c4 k( [
{9 E! z6 Q' B% n% n7 M1 _
SPI5_Master_Rx(); //读取从机发过来的数据。
8 |) E8 I: d9 Y) K! c& ~}
3 F6 d# C) b: t/ R% i$ L}

typedef uint8_t u8 ;
" w. F& k# r( Vtypedef uint16_t u16 ;% i8 W4 c1 L% r5 g
typedef uint32_t u32 ;) x) f* e0 j8 q
u8 hmosi[50]={0};$ |% u" I/ \4 ]% T; t9 z' w  I
u8 mosi1[50]={0};) w0 T$ f% B1 `1 E* `
u8 phmosi[50]={0};8 S3 ?& d3 d4 F" ?5 n9 [
u32 imosi=0;( e- r! c' V6 h4 s/ p
u32 spi5_rx_len;
0 j1 A! j; c* D, l  Su32 ic=0;8 M$ z! u% C6 p( p% }
#define comsize 8
" }0 O% _9 U) a) x/ B% b0 v8 Y7 r; R7 w
extern u16 tSession;# `& |) j$ p' m4 ~, T7 @
u32 udata_len_spi;
) {' ]+ R3 p! S+ {extern u16 ports[comsize+1];
2 V, Z' |6 c, p$ |" I/ Oextern u32 uTimeLst;
4 k9 s3 p3 W0 `4 @2 ?& M
$ f/ E# @6 e3 o6 }0 n( ~( v& [% pextern SPI_HandleTypeDef hspi5;
2 q+ j9 |* R6 h0 J' V' m% gvoid SPI5_IRQHandler(void)( k5 v. Q( a5 \
{
" ?9 I7 s4 e8 p' U. {if(__HAL_SPI_GET_FLAG(&hspi5, SPI_FLAG_RXNE) == SET)
/ [% U4 |2 \' U7 u6 @2 i{
( ^# \- a6 g4 M2 C/ q- Y7 `hmosi[imosi++]=(uint8_t)(hspi5.Instance->DR);

}            

}

void SPI5_Master_Rx(void)
) D# M" V/ z9 w% A  g' @$ V{- g1 V4 p, O* l) j0 ~) D* O0 d
//for(;imosi>=(ic+7);ic++)
' L  N( D2 F5 g' i7 Rfor(;imosi>=(ic+5);ic++)# j. K, r  P& j
{
7 f/ h- t0 l2 ]* N+ Yif((0x2e==hmosi[ic])&&(0x17==hmosi[ic+1])&&(0x0==hmosi[ic+2]))  E: v' {( h. D) ]6 D
{
8 Y( J4 A+ x: V8 f- J$ k  _$ z# ospi5_rx_len=hmosi[ic+6];
& w: H9 C' w' H$ Dudata_len_spi = spi5_rx_len+1;: f9 x( i& M/ z, P7 w9 k  t* o$ ^
memset(phmosi,0x00,udata_len_spi);
9 Z" O* _6 Q1 s* ~6 t0 i7 lphmosi[5]=hmosi[ic+5];0 x" F& C% U! h  K& b" _3 L

* e: A6 i9 X. ~1 _6 s# g2 P9 T+ Kphmosi[6]=spi5_rx_len-7;& y) B7 Q7 t* c, L
mEMCpy(phmosi+7,hmosi+ic+7,spi5_rx_len-7);0 P" y7 U+ ?# A5 u
memcpy(mosi1,hmosi+ic,50-ic);
* N+ W7 Q( M/ C; kmemcpy(hmosi,mosi1,50-ic);
2 c; z9 Q' W* q$ Jimosi=imosi-ic;
6 Y. r3 _6 J2 c  E, q  G6 b5 @ic=0;# y3 c8 J5 s1 u1 I: f
//**************************
4 {3 S% d( f" Z" htSession++;
) h, F# F0 }# B( m% u4 zphmosi[0]=0x2e;/ T7 ~- }  b" A" @9 Z% l
phmosi[1]=0x17;2 o# K& m4 U& d' c0 i# S4 }0 {- \6 c* x
phmosi[2]=0x00;! A! f' g8 f0 e0 `  m  h3 i' Z
$ t- ?- a" O% M, w. B$ O
phmosi[3]=tSession;
3 `1 u4 |" y3 Dphmosi[4]=(tSession>>8);
7 i& H, U4 D& a7 Q/ B7 w5 ^5 U1 G
8 P& O  G4 v: _: ^6 X//memcpy(udata+7,tx1_buf,rx1cnt);5 c- g) I* ~2 F1 A2 |( s
phmosi[udata_len_spi-1] = crc(phmosi,udata_len_spi-1,1);. N1 `8 O) D. u( }+ a
com2net(ports[0],udata_len_spi,phmosi);
/ e+ _! [1 ~1 J2 s& l; R$ b) T5 `- ?uTimeLst=HAL_GetTick();
3 u9 c2 A5 _; \* j# }}
0 y1 L8 d; ]" z. X- L/ |}
( o* U0 A& C1 S% p4 `}

2 l1 m% U7 V2 C- o' R5 s
  • 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 18:32 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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