打印

GD32F105RGT6 SPI1 remap 重映射不成功?????

[复制链接]
2856|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chengjun1991|  楼主 | 2014-12-8 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chengjun1991 于 2014-12-8 15:09 编辑

刚在调试GD32F105RGT6的SPI1,想给SPI1重映射到PB3、PB4、PB5上,但始终不成功。 如果PB3、PB4、PB5使用SPI3读取数据是正确的。  下面是我的SPI1初始化,各位帮我看看……

void RCC_Configuration(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);         
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);
        
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO  , ENABLE);
        
  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);                       // Enable USART1 clocks
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);                         // Enable SPI1 clocks
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);                         // Enable SPI1 clocks
        
        
  GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE);        
        
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);                     /*使能SWD 禁用JTAG*/               
}

void SPI1_Flash_GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 |GPIO_Pin_5; //PB3:SCK,PB5:MOSI
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                        //复用推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Confugure PB4:MISO pin as Input Floating  */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                              //PA15:CS(SPI-FLASH)
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
        
  
  SPI_FLASH_CS_HIGH();       //CS1-SPI_Flash置1
}


void SPI1_Flash_Configuration(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  /* SPI3 configuration */

        
  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_Low;                        //选择了串行时钟的稳态:时钟悬空低
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                      //数据捕获于第一个时钟沿
  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值计算的多项式           
#if 1
  SPI_Init(SPI3, &SPI_InitStructure);
  SPI_Cmd(SPI3, ENABLE);                                            //使能SPI1外设
#else
  SPI_Init(SPI1, &SPI_InitStructure);
  SPI_Cmd(SPI1, ENABLE);                                            //使能SPI1外设        
#endif
}
沙发
GONGO| | 2014-12-15 14:15 | 只看该作者
本帖最后由 GONGO 于 2014-12-15 14:25 编辑

PB3 / PB4 / PB5 是可以配置给 SPI1 和 SPI3 使用的,你把两个时钟都打开了。
SPI1 Remap 到 PB3 / PB4 / PB5 后,SPI3 无效
所以只有 SPI1 可以工作。

如果想达到你要个切换功能,上面 CLK 那里也要使用宏定义进行切换。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
chengjun1991 + 1 赞一个!
板凳
chengjun1991|  楼主 | 2014-12-23 10:45 | 只看该作者
谢谢GONGO的回答。 确实是这个问题 。  我已经解决了……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

6

帖子

0

粉丝