OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3836|回复: 3

SPI总线余EtherCAT传输问题,求各位大神指教,拜谢

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-9-10
在线时间
11 小时
发表于 2015-11-9 22:24:24 | 显示全部楼层 |阅读模式
5金钱
各位大神,先说一下我做的东西,AD采集,然后通过SPI数据传输,最后给EtherCat传输给上位机。EtherCat用的是倍福公司的FB1111板载卡控制器,它与单片机的硬件连接是通过SPI连接的。现在问题就是我没接上这个板载卡前SPI传出来的数经过测试之后是对的,而加上这个板载卡之后数据传输就出错了,我的EtherCat板载卡模块和AD采集的传输都是用的SPI3,是总线数据冲突了还是时序问题吗?菜鸟求原子老师解答。SPI3的配置如下。
[mw_shl_code=c,true]void HW_init(void) { uint32_t Ecat_counter = 0; GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3 , ENABLE ); GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE); /* FB1111板载卡SPI3配置*/ [/mw_shl_code] [mw_shl_code=c,true] GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); /*片选信号 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_SetBits(GPIOD, GPIO_Pin_2); /*SPI3配置*/ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /*???????ò?????¤????*/ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /*?÷SPI????*/ SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /*?????ó??8b*/ SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; /*????×????±??SCK±?????????*/ SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /*???????ù?????????±??±???????*/ SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; /*????NSS??????SSI??????*/ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; /*?¨?????¤·?????128*/ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /*??????????MSB????*/ SPI_Init(SPI3, &SPI_InitStructure); SPI_Cmd(SPI3, ENABLE); /*????SPI3*/ /*FB111板载卡EEPROM_Loaded配置 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); /*查询EEPROM_Loaded状态 高有效 为高则FB1111板载卡可访问*/ EtherCAT_status = 0 ; EtherCAT_status = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14); do { EtherCAT_status = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14); Ecat_counter++; }while((EtherCAT_status == 0)&&(Ecat_counter != Ecat_startup_timeout)); }[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-9 23:07:42 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-9-10
在线时间
11 小时
 楼主| 发表于 2015-11-10 08:38:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢原子老师,老师能稍微给点意见吗? 这是我的AD采集和SPI传输数据的测试程序,其中的 HW_init()这个函数用来配置 SPI3的数据传输,它和FB1111板载卡的SPI3配置用的是一样的,但接上FB1111板载卡之后SPI3数据传输就出错,我在想是不是不能用一个SPI3配置呢?求大神们解答一下吧
                u16 j;
u8 temp[4];
u8  RecData[4];
u16 TxData;
        TxData= (u16)Get_Adc(7); //AD采数
          RecData[0]= (u8)(TxData & 0x000f);     //分成8位SPI传输数据是因为FB111板载卡只能传输8位数据,而且第8位是命令字不能改写,所以分成4位传输
RecData[1]= (u8)((TxData & 0x00f0)>>4);
RecData[2]= (u8)((TxData & 0x0f00)>>8);
RecData[3]= (u8)((TxData & 0xf000)>>12);
                HW_init();                                      //SPI3配置
           ESC_CS_DISABLE();  //片选信号拉低
for(j=0;j<=0xff;j++)
  {
SPI3_ReadWriteByte1(0xff);  //设置循环读数 SPI3_ReadWriteByte1()这个SPI3读写函数用的原子教程
  }
       temp[0]=(u8)SPI3_ReadWriteByte1(RecData[0]);    for(j=0;j<=RecData[0];j++){SPI3_ReadWriteByte1(0xff);} //设置循环读数  通过测试这样SPI3数据传输正确率比较高

temp[1]=(u8)SPI3_ReadWriteByte1(RecData[1]);    for(j=0;j<=RecData[1];j++){SPI3_ReadWriteByte1(0xff);}

temp[2]=(u8)SPI3_ReadWriteByte1(RecData[2]);    for(j=0;j<=RecData[2];j++){SPI3_ReadWriteByte1(0xff);}

temp[3]=(u8)SPI3_ReadWriteByte1(RecData[3]);    for(j=0;j<=RecData[3];j++){SPI3_ReadWriteByte1(0xff);}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-10 23:34:33 | 显示全部楼层
回复【3楼】wander:
---------------------------------
看看是不是冲突了.
注意2个设备的片选,不能同时选中.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 20:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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