你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

spi3无波形输出,已开afio,禁用jtag。

[复制链接]
any012 提问时间:2016-8-24 16:00 /
阅读主题, 点击返回1楼
收藏 评论28 发布时间:2016-8-24 16:00
28个回答
wofei1314 回答时间:2016-8-25 11:40:48
本帖最后由 wofei1314 于 2016-8-25 11:50 编辑

似乎没看到你操作片选的程序?
另外,可以尝试改为复用推挽输出


RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB ,ENABLE);
这个是F4的,似乎和F1的不一样!
any012 回答时间:2016-8-25 12:46:29
wofei1314 发表于 2016-8-25 11:40
似乎没看到你操作片选的程序?
另外,可以尝试改为复用推挽输出

05.jpg
这是从STM32F103手册上截的,从中可以看出GPIOB在APB2上,SPI3挂在了APB1总线上。

wofei1314 回答时间:2016-8-25 13:14:27
any012 发表于 2016-8-25 12:46
这是从STM32F103手册上截的,从中可以看出GPIOB在APB2上,SPI3挂在了APB1总线上。

...

这里是没问题的,F1没有AHB总线;
重点检查硬件和调试看寄存器的值
回答时间:2016-8-25 14:48:31
SPI3没有重定义吧。
any012 回答时间:2016-8-25 15:58:25
安 发表于 2016-8-25 14:48
SPI3没有重定义吧。

SPI3不需要重定义吧?
默认的复用功能就是SPI3.
/tiaostrike 回答时间:2016-8-25 16:27:30
void SPI3_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
          SPI_InitTypeDef  SPI_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

        RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI3,  ENABLE );                                //SPI3时钟使能        

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
        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_InitStructure.GPIO_Pin = GPIO_Pin_15;                                                        //W5500_CS        PA15
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;                                                        //W5500_RST PA12
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                                                        //W5500_INT        PA11
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_SetBits(GPIOB, GPIO_Pin_3  | GPIO_Pin_4  | GPIO_Pin_5);                          //PB3/4/5输出高电平
        GPIO_SetBits(GPIOA, GPIO_Pin_15 | GPIO_Pin_12 | GPIO_Pin_11);

        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                //设置SPI工作模式:设置为主SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                        //设置SPI的数据大小:SPI发送接收8位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                                        //串行同步时钟的空闲状态为高电平
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                                                //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                        //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;        //定义波特率预分频的值:波特率预分频值为4
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                                        //CRC值计算的多项式
        SPI_Init(SPI3, &SPI_InitStructure);                                                                  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
       
        SPI_Cmd(SPI3, ENABLE);                                                                                                 //使能SPI外设
}

uint8_t SPI3_ReadWriteByte(uint8_t Data)
{
        /* 当 SPI发送缓冲器非空时等待 */
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET);
       
        /* 通过 SPI3发送一字节数据 */
        SPI_I2S_SendData(SPI3, Data);
       
        /* 当SPI接收缓冲器为空时等待 */
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET);
       
        /*!< Return the byte read from the SPI bus */
        return SPI_I2S_ReceiveData(SPI3);
}

用这个试试,我这个程序是可以用的
回答时间:2016-8-25 16:35:12
any012 发表于 2016-8-25 15:58
SPI3不需要重定义吧?
默认的复用功能就是SPI3.

不好意思啊。我看的是103xb的手册,里面没有SPI3。
回答时间:2016-8-25 16:44:39
测试一下波形。
any012 回答时间:2016-8-26 10:51:41
安 发表于 2016-8-25 16:35
不好意思啊。我看的是103xb的手册,里面没有SPI3。

惊醒!
我这焊的就是VBT6...
回答时间:2016-8-26 10:54:56
但是你的工程用的是VE系列的,把这个改成VB的吧。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版