OpenEdv-开源电子网

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

STM32F107的SPI3通讯不上外设

[复制链接]

6

主题

19

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-4-7
在线时间
17 小时
发表于 2016-4-7 17:58:28 | 显示全部楼层 |阅读模式
1金钱
123456.JPG
上图是外设的SPI波形图
STM32F107的配置如下:
能看到MCLK和MOSI,CS的波形,怎么就没有回应呢??

        SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag , 开启swd

       



        /* 使能SPI1和GPIOA、GPIOB的RCC时钟*/
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//RCC_APB1Periph_SPI3
        //RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SPI3,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);

        SPI_Cmd(SPI3,DISABLE);
        /*!初始化时钟信号线SCK */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PC10
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /*初始化SPI_FLASH_SPI管脚: MOSI */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PC12
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /*初始化SPI_FLASH_SPI管脚: MISO */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PC11
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//GPIO_Mode_Out_OD;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /*初始化片选信号管脚: /CS*/
        #if 1
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//PA4
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        #endif
#if 1

        /*拉高片选信号*/
        SPI_FLASH_CS_HIGH();
       
        /* SPI1初始化配置*/
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;  //主从模式选择,SCK信号有主机产生
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI通信数据的大小
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;         //时钟极性
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;   //时钟相位
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//SPI_NSS_Soft;          //片选信号,硬件模式还是软件模式
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;        //SPI分频值,分频后的值为SCK的时钟频率
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //选择SPI通信时,是高位数据在前还是低位数据在前
        SPI_InitStructure.SPI_CRCPolynomial = 0;        //与CRC校验有关
        SPI_Init(SPI3, &SPI_InitStructure);

        /*使能SPI1 */
        SPI_Cmd(SPI3, ENABLE);

        /*唤醒SPI FLASH*/
        //SPI_Flash_WAKEUP();
        #endif

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

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-4-7 19:39:20 | 显示全部楼层

能看到CLK、MOSI、CS的波形,这边“基本”没问题。
现在要考察另一边。
上面一堆代码基本没必要贴出来。

SPI外设器件很多,操作过程五花八门。
看你是什么器件。

比如,可能要先发出命令,然后对方才会有反应。

回复

使用道具 举报

6

主题

19

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-4-7
在线时间
17 小时
 楼主| 发表于 2016-4-8 08:30:55 | 显示全部楼层
xuande 发表于 2016-4-7 19:39
能看到CLK、MOSI、CS的波形,这边“基本”没问题。
现在要考察另一边。
上面一堆代码基本没必要贴出来 ...

你好,我是发送了,读ID的指令,
SPI_FLASH_CS_LOW();

SPI_FLASH_SendByte(0x22);
SPI_FLASH_SendByte(0x00);
SPI_FLASH_SendByte(0x02);
SPI_FLASH_SendByte(0xDB);
SPI_FLASH_SendByte(0xFF);
Temp0 = SPI_FLASH_SendByte(0xA5);
Temp1 = SPI_FLASH_SendByte(0xA5);
Temp2 = SPI_FLASH_SendByte(0xA5);

SPI_FLASH_CS_HIGH();
就是MISO,没什么反应
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-4-8 08:33:19 | 显示全部楼层

示波器查mosi,一看数据对不对,二看时序对不对。

回复

使用道具 举报

6

主题

19

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-4-7
在线时间
17 小时
 楼主| 发表于 2016-4-8 09:38:59 | 显示全部楼层
xuande 发表于 2016-4-8 08:33
示波器查mosi,一看数据对不对,二看时序对不对。

示波器查了MOSI,数据没啥问题,上面是外设的SPI波形图,看不大明白
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-4-8 10:22:34 | 显示全部楼层

首先看CLK边沿与数据位的关系,
比如,数据在哪个边沿出现,哪个边沿要保持。

其次看时间关系,
比如,数据要在边沿前面多久出现,要保持多久。

细节很多。


回复

使用道具 举报

6

主题

19

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-4-7
在线时间
17 小时
 楼主| 发表于 2016-4-8 11:57:33 | 显示全部楼层
谁知道SPI_CRCPolynomial是一定要的吗?应该可以关闭吧,百度不到关闭是什么指令
回复

使用道具 举报

1

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-9
在线时间
29 小时
发表于 2016-8-9 11:57:34 | 显示全部楼层
楼主问题最后解决了没有,我也遇到过这个问题
回复

使用道具 举报

1

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-9
在线时间
29 小时
发表于 2016-8-9 11:58:52 | 显示全部楼层
我的SPI3 的MOSI引脚 做主机时发送0Xff,  做从机时接收0xFF , 很头疼
回复

使用道具 举报

1

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-9
在线时间
29 小时
发表于 2016-8-9 12:36:58 | 显示全部楼层
楼主,看了你的代码,你的SPI3 引脚是REMap之后的引脚,remap就没必要关JTAG了。你有没有试过不remap的情况,我和你的代码一样,只少了Remap结果MOSI一直发出0xFF,不知道楼主试没试过
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 01:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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