SPI1重映射后不正常!

2020-01-01 17:33发布

DX,我使用STM32的SPI1时,直接用PA5PA6PA7正常,但是改用重映射为PB3,PB4,和PB5后就是不正常了
使用示波器测试波形,PA5,PA7都有,PB5有,PB3和PB4没有,谁知道怎么回事啊?参考STM32官方手册,SPI1不能
重映射和I2C1一起用,我也关掉I2C1的时钟了,还是不行!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
__STM32__
1楼-- · 2020-01-01 22:41
需要打开AFIO的时钟。
shnd
2楼-- · 2020-01-02 01:47
DX:我打开了AFIO时钟,同时用JLINK看AFIO寄存器,SPI1确实显示已经Remap了,但是还是不行啊!谢谢!
shnd
3楼-- · 2020-01-02 03:50
 精彩回答 2  元偷偷看……
yugen
4楼-- · 2020-01-02 07:56
GPIO脚配置了复用模式了吗?
shnd
5楼-- · 2020-01-02 11:54
to:yugen,当然对GPIO配置了复用,具体程序如下:
void SPI_FLASH_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;


  /* Enable SPI1 and GPIO clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIO_CS | RCC_APB2Periph_SPI1, ENABLE);

//SPI1口重映射
  GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE);

  /* Configure SPI1 pins: SCK, MISO and MOSI */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  //PB4外部已经加10kb电阻上拉
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure I/O for Flash Chip select ,PD2*/
  GPIO_SetBits(GPIO_CS, GPIO_Pin_CS);//置为高
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CS;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIO_CS, &GPIO_InitStructure);

  /* Deselect the FLASH: Chip Select high */
  SPI_FLASH_CS_HIGH();

  /* SPI1 configuration */
        SPI_Cmd(SPI1, DISABLE); //必须要有才能改变MODE
  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_2Edge;
  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(SPI1, &SPI_InitStructure);

  /* Enable SPI1  */
  SPI_Cmd(SPI1, ENABLE);
}
yugen
6楼-- · 2020-01-02 13:31
由Datasheet可知,PB3,PB4同时也是SPI3,TIM2,TIM3,TRACE,I2C1这些外设的引脚,这些外设也要关闭或重映射。

一周热门 更多>