stm32的引脚PB6/PB7默认是什么,我想让他作为普通的i/o口,怎样配置寄存器

如题所述

PB6/PB7是I2C1 的SCL和SDA端,如果作为普通的I/O口,就一般的配置就可以。GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //设置速率
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置你要的模式
GPIO_Init(GPIOB, &GPIO_InitStructure);追问

PB6和PB7分别是模拟SPI接口的si和SO信号,SI作为输出,SO作为输入,输入配置为上拉输入,正常来说,不管怎样配置PB7,都不会改变它引脚的电平,但是我经过示波器查看得知,我配置的高低电平均生效,这个是错误的,因为既然是输入信号,肯定是有输入源决定的,我配置其他的引脚向PD6,PD7都可以的,它们不是管脚复用的,我怀疑是管脚复用的问题,但是也一直不得解,求大侠帮忙,最好是有代码配置的。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-13

  我不得不给你看看GPIO的结构图,如下:

  看到没有,如果你把IO配置为输入的话,输出回路的那个开关就断开了,输出寄存器的值不会影响到输入状态的。注意看,输入回路有上拉开关和下拉开关,而这个上下拉开关就是由输出寄存器来控制的。你说你配置的高低电平能生效,如果你的硬件电路没问题,而你又是配置的输入的话,只有一种情况,那就是你把IO配置为上下拉输入了。比如像下面的代码:

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

  或者:

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

  在GPIO_Init这个函数中,会判断你配置的GPIO_Mode,如果是GPIO_Mode_IPU
或GPIO_Mode_IPD的话,它会有下面的代码来设置输出寄存器为高或为低:

        /* Reset the corresponding ODR bit */
        if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
        {
          GPIOx->BRR = (((uint32_t)0x01) << pinpos);
        }
        else
        {
          /* Set the corresponding ODR bit */
          if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
          {
            GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
          }
        }

  所以,你配置为浮空输入就好了,像下面这样:

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

  

追问

你说的我也都理解的,就是这样的,我配置为上拉或下拉就都生效,输入模式是浮空时就不能配置成功。但是我配置PD6为上拉输入就不会配置生效的,所以我怀疑是PB6/PB7是复用管教的问题,求解,我用gpio模拟SPI总线来做的,一直访问不了spi总线,访问的vs1063a,大侠求解。

追答

    首先确定你没有使能复用功能,PB6/PB7的复用有I2C和UART1。

    确定你的MISO配置为浮空输入,MOSI、CLK、CS都配置为推挽输出。

    确定你的SPI模拟时序没问题,如果你的板子上有SPI FLASH,尝试用你的SPI模拟程序去读FLASH试试。

    确定你的SPI时钟频率小于vs1063a的最大频率。

    如果你觉得是IO问题,你把SPI的CLK,MISO,MOSI移到其他IO上再试试。

追问

我没有使用复用功能。我只开启了gpiob的时钟,然后就配置si,clk为GPIO_MODE_OUT_PP,so为GPIO_MODE_IPU,也试过GPIO_MODE_INFLOATING,不知道到底设为哪个才正确,两个都设置过实验了,就是不能读取VS1063寄存器的值,还有时钟的问题,我不知道到底要延时多久,我发现我延时时间短读取的是0,错误的,延时时间长读取的是其他的也不正确,忘大侠继续赐教。

追答

那就一定是软件问题了,你要看看手册,VS1063的SPI是0模式还是3模式,空闲时CLK是高电平还是低电平。

追问

我没有对vs1063做任何操作,datasheet中默认的是新模式。这个不影响vs1063的SCI操作的,我要用stm32的pb6,pb7,pd7分别模拟si,so,sclk控制vs1063芯片的sci操作,不管怎样操作,我读取的寄存器全是ffff,就是读取错误。大侠说下qq或者邮箱,我跟你联系。谢谢大侠了,最后搞出来了,不是软件的问题,是硬件的电源反了,晶振错了。

本回答被提问者采纳

stm32的引脚PB6\/PB7默认是什么,我想让他作为普通的i\/o口,怎样配置寄存器...
PB6\/PB7是I2C1 的SCL和SDA端,如果作为普通的I\/O口,就一般的配置就可以。GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; \/\/设置速率 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\/\/设置...

IO口模式
如:USART1: 0: 没有重映像(TX\/PA9,RX\/PA10); 1: 重映像(TX\/PB6,RX\/PB7)。 (参考AFIO_MAPR寄存器介绍)[0,1为一寄存器的bit值] 【注】 下述复用功能的引出脚具有重映射功能: 举例:对于STM32F103VBT6,47引脚为PB10,它的复用功能是I2C2_SCL和 USART3_TX,表示在上电之后它的默认功能为PB10,而I2C2...

如何用stm32f103cvet6的一个引脚输出01信号点亮外接led
8. LQFP64封装的引脚5和引脚6在芯片复位后默认配置为OSC_IN和OSC_OUT功能脚。软件可以重新设置这两个引脚为PD0和PD1功能。但对于LQFP100\/BGA100封装和LQFP144\/BGA144封装,由于PD0和PD1为固有的功能引脚,因此没有必要再由软件进行重映像设置。更多详细信息请参考STM32F10xxx参考手册的复用功能I\/O章节...

stm32的AFIO是什么意思
意思是如果在你的程序中,某些外设用的是复用IO口,就必须开该复用时钟。比如在STM32F103VET6中USART3的IO口为(TX\/PB10,RX\/PB11)。但是如果你要是将给外设IO口映射到(TX\/PC10,RX\/PC11)或者(TX\/PD8,RX\/PD9),那就必须开启AFIO时钟了,否则外设不会正常工作。

STM32中断程序,按键控制灯的亮灭,程序运行没错,烧录到单片机就不行呢...
EXTI_GenerateSWInterrupt(EXTI_Line6); \/\/EXTI_Line6中断允许 到此中断配置完成,可以写中断处理函数。while (1){ } } \/ RCC配置 \/ void RCC_Configuration(void){ \/\/复位RCC外部设备寄存器到默认值 RCC_DeInit();\/\/打开外部高速晶振 RCC_HSEConfig(RCC_HSE_ON);\/\/等待外部高速时钟准备好 HSE...

STM32 103系列只有100个引脚 为什么书上说:有7个I\/O口 每个i\/o口有1...
内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。截至2010年7月1日,市面流通的型号有:基...

高分求课程设计:利用D\/A芯片实现电机转速控制
电机变速一般都是直流电机,所以电压是改变电机速度的办法,只能一步一步的实验才行,仅仅靠理论是不行的

8031和8051主要有什么区别?各有什么特点?
对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(VPP)。4、输入\/输出(I\/O)引脚P0、P1、P2、P3(共32根)①P0口(39脚至32脚):是双向8位三态I\/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。②P1口(1脚至8脚):是准双向...

如何实现gpio口模式的配置
\/\/写GPIO\\x0d\\x0a\\x0d\\x0a 六、管脚的复用功能 重映射\\x0d\\x0a\\x0d\\x0a1、复用功能:内置外设是与I\/O口共用引出管脚(不同的功能对应同一管脚)\\x0d\\x0a\\x0d\\x0aSTM32 所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非...

STM32 103系列只有100个引脚 为什么书上说:有7个I\/O口 每个i\/o口有1...
内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。截至2010年7月1日,市面流通的型号有:基...

相似回答