OpenEdv-开源电子网

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

关于使用SPI3 芯片用的是ZET6 为什么调试不出来,调试了一天了。查了各种资料

[复制链接]

17

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-5-1
在线时间
75 小时
发表于 2015-8-28 18:17:53 | 显示全部楼层 |阅读模式
5金钱
 void SPI_Configuration(void)
{
    SPI_InitTypeDef     SPI_InitSturcture;
    GPIO_InitTypeDef    GPIO_InitStucture;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//??±?JATG?÷??????
   
    //????????????
    GPIO_InitStucture.GPIO_Pin=SPI_CS;     //PC3
    GPIO_InitStucture.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStucture.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStucture);
    GPIO_SetBits(GPIOC,SPI_CS);    //??????????
    //SPI?¨??????????           SCK        MOSI
    GPIO_InitStucture.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_5;
    GPIO_InitStucture.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStucture.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStucture);
    GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_5);
    //                             MISO
    GPIO_InitStucture.GPIO_Pin=GPIO_Pin_4;
    GPIO_InitStucture.GPIO_Mode=GPIO_Mode_AF_OD;
    GPIO_InitStucture.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStucture);
    GPIO_SetBits(GPIOB,GPIO_Pin_4);
    
    //SPI??????
    SPI_I2S_DeInit(SPI3);
    SPI_InitSturcture.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;
    SPI_InitSturcture.SPI_CPHA=SPI_CPHA_2Edge;
    SPI_InitSturcture.SPI_CPOL=SPI_CPOL_High;
    SPI_InitSturcture.SPI_CRCPolynomial=7;
    SPI_InitSturcture.SPI_DataSize=SPI_DataSize_8b;
    SPI_InitSturcture.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
    SPI_InitSturcture.SPI_FirstBit=SPI_FirstBit_MSB;
    SPI_InitSturcture.SPI_Mode=SPI_Mode_Master;
    SPI_InitSturcture.SPI_NSS=SPI_NSS_Soft;
    SPI_Init(SPI3,&SPI_InitSturcture);
    //SPI????
    SPI_Cmd(SPI3,ENABLE);
    SPI_SendOrReceive(0xff);
}
/********************************************************************
??????????u8 SPI_SendOrReceive(u8 Data)
?????????????±·?????????????
??????????Data
·?????:   ReceiveData
********************************************************************/
u8 SPI_SendOrReceive(u8 Data)
{
    u8 retry=0;
    while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)==RESET)
    {
        retry++;
        if(retry>250)
        return 0;
    }
    SPI_I2S_SendData(SPI3,Data);
    retry=0;
    while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE)==RESET)
    {
        retry++;
        if(retry>250)
        return 0;
    }    
    return SPI_I2S_ReceiveData(SPI3);
}
/********************************************************************
??????????  u16 SPI_Read_DeviceID(void)
??????????  SPI???÷??ID
??????????  ??
  ·???????  ??
********************************************************************/
u16 SPI_Read_DeviceID(void)
{
    u16 ID=0;
    GPIO_ResetBits(GPIOC,GPIO_Pin_3);
    SPI_SendOrReceive(0x90);
    SPI_SendOrReceive(0);
    SPI_SendOrReceive(0);
    SPI_SendOrReceive(0);
    ID|=SPI_SendOrReceive(0xff)<<8;
    ID|=SPI_SendOrReceive(0xff);
    GPIO_SetBits(GPIOC,GPIO_Pin_3);
    return  ID;
}
用示波器检测 发现PB4管脚一直是高电平(MISO),PB3有时钟信号方波输出 (SCK)   PB5也有波形输出(MOSI),就是读出来的数据一直是0xffff,不知道是什么原因,请各位帮我看看我的SPI3配置正确吗?注释:用SPI2可以读出器件ID.

最佳答案

查看完整内容[请看2#楼]

回复【11楼】dragon7799: --------------------------------- 问题已经解决,非常感谢各位的热情回答。具体原因是:因为芯片上只写了25P16LV字样,我在百度上去查资料的时候就选了个华邦的25P16LV ICi资料,以为他的器件ID指令是0X90,始终读不出来,后来我就不进行读ID了,我直接写一个数进去,然后在读出来,发现很正常,原来我选的IC资料有问题,不是华邦生产的,具体那个公司我就不知道了 手册上没有写。而它的器件 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-5-1
在线时间
75 小时
 楼主| 发表于 2015-8-28 18:17:54 | 显示全部楼层
回复【11楼】dragon7799:
---------------------------------
问题已经解决,非常感谢各位的热情回答。具体原因是:因为芯片上只写了25P16LV字样,我在百度上去查资料的时候就选了个华邦的25P16LV ICi资料,以为他的器件ID指令是0X90,始终读不出来,后来我就不进行读ID了,我直接写一个数进去,然后在读出来,发现很正常,原来我选的IC资料有问题,不是华邦生产的,具体那个公司我就不知道了 手册上没有写。而它的器件地址是0X9F. 我倒,折腾了好久。(这个芯片不是我自己选的,是以前一个走了的同事选的)
回复

使用道具 举报

17

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-5-1
在线时间
75 小时
 楼主| 发表于 2015-8-28 18:20:13 | 显示全部楼层
请原子哥帮我看看呀  我自己顶个。
回复

使用道具 举报

8

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-8-1
在线时间
7 小时
发表于 2015-8-28 19:48:35 | 显示全部楼层
spi3要屏蔽掉 jtag接口
有软件开发经验,从0硬件基础学习STM32开发。
回复

使用道具 举报

17

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-5-1
在线时间
75 小时
 楼主| 发表于 2015-8-28 20:58:30 | 显示全部楼层
回复【3楼】dragon7799:
---------------------------------
  我屏蔽了呀,可为什么还是不行?这条语句就是屏蔽了JTAG了呀。GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-1-13
在线时间
6 小时
发表于 2015-8-30 20:09:10 | 显示全部楼层
回复【4楼】goodzero0409:
---------------------------------
请问你这个问题解决了吗
回复

使用道具 举报

16

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1907
金钱
1907
注册时间
2015-7-5
在线时间
485 小时
发表于 2015-8-30 21:00:45 | 显示全部楼层
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); // 关闭JTAG+SW-DP,但是这句话不起作用,不知道为什么?

后来用
AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000;           //关闭JTAG 

起作用了
回复

使用道具 举报

17

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-5-1
在线时间
75 小时
 楼主| 发表于 2015-8-30 22:36:25 | 显示全部楼层
回复【6楼】huyounong:
---------------------------------
不好意思 才看到,我去试试。
回复

使用道具 举报

17

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-5-1
在线时间
75 小时
 楼主| 发表于 2015-8-30 22:49:18 | 显示全部楼层
回复【6楼】huyounong:
---------------------------------
还是不行。哎。
回复

使用道具 举报

17

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-5-1
在线时间
75 小时
 楼主| 发表于 2015-8-31 08:46:47 | 显示全部楼层
回复【5楼】yeyin2006:
---------------------------------
还没有解决
回复

使用道具 举报

8

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-8-1
在线时间
7 小时
发表于 2015-8-31 08:58:09 | 显示全部楼层
pb345都设置为 af_pp
有软件开发经验,从0硬件基础学习STM32开发。
回复

使用道具 举报

8

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-8-1
在线时间
7 小时
发表于 2015-8-31 09:00:21 | 显示全部楼层

这是我用 SPI3 接 NRF2L01 时使用的配置,能成功使用设备。

[mw_shl_code=c,true]// SPI3 用于访问 NRF24L01 void SPI3_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); // SPI3 时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOB 时钟使能 // 使能复用端口时钟,并使用重映射功能禁用 JTAG。可使用 SWD 仿真 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; // 分别对应 SCK、MISO、MOSI 三个引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // PB3,4,5复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化 GPIOB GPIO_SetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); // PB3,4,5上拉 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // SPI设置为双线双向全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // SPI主机 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 发送接收8位帧结构 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; // 时钟悬空低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // 数据捕获于第1个时钟沿 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // NSS信号由软件控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 定义波特率预分频的值:波特率分频4,即 9MHz SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 数据传输从MSB位开始 SPI_InitStructure.SPI_CRCPolynomial = 7; // CRC 值计算的多项式 SPI_Init(SPI3, &SPI_InitStructure); SPI_Cmd(SPI3, ENABLE); // 使能 SPI 外设 SPI3_ReadWrite(0xFF); // 启动传输 }[/mw_shl_code]

有软件开发经验,从0硬件基础学习STM32开发。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 22:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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