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

PB13,14,15引脚配置spi1是不是需要什么特殊配置?

[复制链接]
p13692166934 提问时间:2018-11-9 18:53 /
悬赏12ST金币已解决
一开始配置SPI1的时候配置没问题,换了个引脚就不行了,是不是这3个引脚配置有什么要注意IDE,别说配置有问题,一开始的函数在OLED,w25q80,rc522都没问题,换了引脚就有毛病,下面是这个引脚配置和图


B0YT4B6727)L`(LOC7{]QLI.png

最佳答案

查看完整内容

SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //SPI2配置选项 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructur ...
收藏 评论8 发布时间:2018-11-9 18:53

举报

8个回答
bin_MCU 回答时间:2018-11-9 18:53:37
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
    //SPI2配置选项
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial = 7;
    SPI_Init(SPI2, &SPI_InitStructure);
    //使能SPI2
    SPI_Cmd(SPI2, ENABLE);
    //配置SPI2管脚
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

p13692166934 回答时间:2018-11-9 18:55:14
RCC->AHBENR |=0x01<<18;       
RCC->APB2ENR |=0X01<<12;
        //SCK(Pb13) MOSI(Pb15)配置为普通功能推挽输出
        //端口模式设置
        //模式----通用输出模式(01)
        GPIOB->MODER &=~(0x03ul<<26 |0x03ul<<30);
        GPIOB->MODER |=0X02ul<<26 | 0X02ul<<30;
        //输出类型----推挽
        GPIOB->OTYPER &= ~(0X01<<13 | 0X01<<15);       
        //输出速度----100M
        GPIOB->OSPEEDR &=~(0x03ul<<26 |0x03ul<<30);
        GPIOB->OSPEEDR |=0x01ul<<26 |0x01ul<<30;
        //上下拉-----无上拉或下拉
        GPIOB->PUPDR &=~(0x03ul<<26 );
       

//        //MISO(pb14) 配置为浮空输入
        GPIOB->MODER &=~(0X03ul<<28);  //pb14为输入模式
        GPIOB->MODER |=0X02ul<<28;
       
        GPIOB->AFR[1] &=~(0x0fff<<20);
       
       
        SPI1->CR1 &=~(0X03<<14);
        SPI1->CR1 &=~(0X01<<10);   //全双工模式
       
        SPI1->CR1 &=~(0X01<<11); //8位数据模式
        SPI1->CR1 |=0X03<<8;   //软件管理NSS,主模式

       
        SPI1->CR1 &=~(0X01<<7); //高位在前
       
        //波特率
        SPI1->CR1 &=~(0X07<<3);  //  /2

       
        SPI1->CR1 |=0X01<<2;   //主模式
        SPI1->CR1 &=~(0X03<<0); //mode 0
       
        SPI1->CR2 &=~(0X01<<4); //摩托罗拉格式
       
        SPI1->CR2 &=~(0xF<<8);       
        SPI1->CR2 |=0x07<<8;//8位数据位宽
       
        SPI1->CR2 &=~(0x01<<12);       
        SPI1->CR2 |=0x01<<12;//FRXTH
       
        SPI1->CR2 &=~(0x01<<2);       
//        SPI1->CR2 |=0x01<<2;//SSOE=1
       
        SPI1->CR1 |=0X01<<6;    //开SPI控制器

bin_MCU 回答时间:2018-11-9 20:40:18
先尝试一下 用库函数配置看下行不行在用寄存器

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

bin_MCU 回答时间:2018-11-9 20:44:16
这是我的库函数配置  用在ILI9431 SPI驱动上 没有问题的!
我觉得是不是你的IO口输出不是AF_PP输出的问题
你的代码段:{
        //端口模式设置
        //模式----通用输出模式(01)
        GPIOB->MODER &=~(0x03ul<<26 |0x03ul<<30);
        GPIOB->MODER |=0X02ul<<26 | 0X02ul<<30;
        //输出类型----推挽
        GPIOB->OTYPER &= ~(0X01<<13 | 0X01<<15);        
}
bin_MCU 回答时间:2018-11-9 20:45:11
另外RCC_SPI 和 RCC_GPIOB时钟开启了吗
p13692166934 回答时间:2018-11-10 09:40:14
bin_MCU 发表于 2018-11-9 20:45
另外RCC_SPI 和 RCC_GPIOB时钟开启了吗

时钟都开了,说过函数可以开OLED,w25q80,换了引脚就不行了,调试模式显示也没问题啊,芯片是STM32F030C8T6,引脚也对了数据手册,上面有截图
6PBSJJNEM1{42WWBA`S7ARD.png
8`49)VS9P(X{V$Z2QA}3OHR.png
K]T3GCE9U3K6@_[_FSHV3N6.png
chifen 回答时间:2018-11-10 10:12:53
本帖最后由 chifen 于 2018-11-10 10:16 编辑

无论是030CC  还是030C8  从这些引脚定义中SPI1是 不能分配的 PB13 B14 PB15,只有SPI2才可以分配过去
TIM图片20181110101507.png
2. This feature is available on STM32F030x6 and STM32F030x4 devices only.
看看说明书上这行注解 是C6或C4才支持你是C8说明不支持的

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

p13692166934 回答时间:2018-11-10 10:51:20
问题找到了,是spi配置之前使用过TIM6延时导致配置失败,配置完之后使用倒是没影响,有没有人知道时候什么原因,引脚复用上面有,定时器函数是:
        void delay_us(uint32_t us)
{
        /* 设置计数频率以及计数周期 */
        TIM6->PSC = 8 - 1;      //预分频值:48M/48 = 1MHz = 1us
        TIM6->ARR = us;           //计数1次1us
        TIM6->EGR |= 1 << 0;      //把设定值写入影子寄存器
       
        /* 清更新标志位 */
        TIM6->SR &= ~(1 << 0);    //清更新标志位
       
        /* 使能定时器 */
        TIM6->CR1 |= 1 << 0;      //使能定时器6
       
        /* 等待时间到达 */
        while(!(TIM6->SR & (1 << 0)))
        {
                /* 等待时间到达 */
        }
        TIM6->SR &= ~(1 << 0);    //清更新标志位
       
        /* 关闭定时器 */
        TIM6->CR1 &= ~(1 << 0);     //关闭定时器
       
}

所属标签

相似问题

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