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

stm32f103把spi1换成spi2需要做哪些修改

[复制链接]
胡杨-345459 提问时间:2012-3-5 16:30 /
程序本来使用的spi1,我想将其换成spi2,请问应该怎样修改程序,需要修改哪些地方。我刚刚接触这种片子,实在是无从下手,下面有源程序代码,请修改好后加上注释,先谢谢了
unsigned char RCC_Configuration(void){        ErrorStatus                HSEStartUpStatus;          /* RCC system reset(for debug purpose) */          RCC_DeInit();          /* Enable HSE */          RCC_HSEConfig(RCC_HSE_ON);          /* Wait till HSE is ready */          HSEStartUpStatus = RCC_WaitForHSEStartUp();          if(HSEStartUpStatus == SUCCESS)          {            /* HCLK = SYSCLK */            RCC_HCLKConfig(RCC_SYSCLK_Div1);            /* PCLK2 = HCLK */            RCC_PCLK2Config(RCC_HCLK_Div1);                RCC_PCLK1Config(RCC_HCLK_Div2);                RCC_ADCCLKConfig(RCC_PCLK2_Div4);                FLASH_SetLatency(FLASH_Latency_2);            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);                   RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);            RCC_PLLCmd(ENABLE);            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){};            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);            while(RCC_GetSYSCLKSource() != 0x08){};          }        else                return FALSE;         RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2 | RCC_APB1Periph_TIM2, ENABLE);          /* Enable GPIOA GPIOB SPI1 and USART1 clocks */          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB                                        | RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOF| RCC_APB2Periph_USART1                                        | RCC_APB2Periph_SPI1 | RCC_APB2Periph_ADC1                                        | RCC_APB2Periph_AFIO, ENABLE);        return TRUE;}void SPI_Configuration(void){        GPIO_InitTypeDef                 GPIO_InitStructure;        SPI_InitTypeDef           SPI_InitStructure;          /* Configure SPI1 pins: SCK, MISO and MOSI -------------*/          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;          GPIO_Init(GPIOA, &GPIO_InitStructure);                /* Set Chip Select pin */        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3| GPIO_Pin_4;        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;        GPIO_Init(GPIOA, &GPIO_InitStructure);        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;        GPIO_Init(GPIOA, &GPIO_InitStructure);        GPIO_SetBits(GPIOA, GPIO_Pin_3);         GPIO_SetBits(GPIOA, GPIO_Pin_1);         GPIO_SetBits(GPIOA, GPIO_Pin_4);        /* Set SPI interface */        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_Low;        SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;        SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;        SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;        SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;        SPI_InitStructure.SPI_CRCPolynomial=7;        SPI_Init(SPI1,&SPI_InitStructure);        SPI_Cmd(SPI1,ENABLE);                                        //Enable  SPI1}
收藏 评论5 发布时间:2012-3-5 16:30

举报

5个回答
回答时间:2012-3-5 22:01:15

RE:stm32f103把spi1换成spi2需要做哪些修改

1、开启SPI2的时钟
2、配置SPI2
使用和SPI1一样,先开时钟,再配置,然后再使用。
胡杨-345459 回答时间:2012-3-6 09:02:52

RE:stm32f103把spi1换成spi2需要做哪些修改

能帮我看一下,我配置的时钟和spi2有哪里不妥吗?
unsigned char RCC_Configuration(void)
{
        ErrorStatus                HSEStartUpStatus;
          /* RCC system reset(for debug purpose) */
          RCC_DeInit();
          /* Enable HSE */
          RCC_HSEConfig(RCC_HSE_ON);
          /* Wait till HSE is ready */
          HSEStartUpStatus = RCC_WaitForHSEStartUp();
          if(HSEStartUpStatus == SUCCESS)
          {
            /* HCLK = SYSCLK */
            RCC_HCLKConfig(RCC_SYSCLK_Div1);
            /* PCLK2 = HCLK */
            RCC_PCLK2Config(RCC_HCLK_Div1);
            /* PCLK1 = HCLK/2 */
                RCC_PCLK1Config(RCC_HCLK_Div2);
                /* ADCCLK = PCLK2/4 */
                RCC_ADCCLKConfig(RCC_PCLK2_Div4);
            /* Flash 2 wait state */
                FLASH_SetLatency(FLASH_Latency_2);
            /* Enable Prefetch Buffer */
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
            /* PLLCLK = 8MHz * 9 / 2 = 36 MHz */
                   RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
            /* Enable PLL */
            RCC_PLLCmd(ENABLE);
            /* Wait till PLL is ready */
            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){};
            /* Select PLL as system clock source */
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
            /* Wait till PLL is used as system clock source */
            while(RCC_GetSYSCLKSource() != 0x08){};
          }
        else
                return FALSE;
                         
        /* Enable peripheral clocks --------------------------------------------------*/
          /* Enable I2C1 and I2C1 clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 | /*RCC_APB1Periph_I2C2 | */RCC_APB1Periph_TIM2, ENABLE);
          /* Enable GPIOA GPIOB SPI1 and USART1 clocks */
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
                                        | RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOF| RCC_APB2Periph_USART1
                                        | RCC_APB2Periph_ADC1
                                        | RCC_APB2Periph_AFIO, ENABLE);
        return TRUE;
}

/**
*@brief SPI Initialization
**/
void SPI_Configuration(void)
{
        GPIO_InitTypeDef                 GPIO_InitStructure;
        SPI_InitTypeDef           SPI_InitStructure;

          /* Configure SPI1 pins: SCK, MISO and MOSI -------------*/
          GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        // 片选
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        //使能端
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        //复位端
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB, GPIO_Pin_11);
        GPIO_SetBits(GPIOB, GPIO_Pin_10);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);

        /* Set SPI interface */
        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_Low;
        SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
        SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;
        SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial=7;
        SPI_Init(SPI2,&SPI_InitStructure);
        SPI_Cmd(SPI2,ENABLE);                                        //Enable  SPI2
}
pengpeng-360286 回答时间:2012-9-10 21:27:37

回复:stm32f103把spi1换成spi2需要做哪些修改

unsigned char RCC_Configuration(void)//时钟配置
{
ErrorStatus HSEStartUpStatus;//定义了一个布尔型变量
/* RCC system reset(for debug purpose) */
RCC_DeInit(); //将时钟配置寄存器初始化为默认值
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);//使能外部高速时钟
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部高速时钟准备好
if(HSEStartUpStatus == SUCCESS)//如果外部高速时钟准备好
{
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB总线时钟为系统时钟的一分频
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);//APB2总线时钟为AHB总线时钟的一分频
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);//AHPB1总线时钟为AHB总线时钟的二分频
/* ADCCLK = PCLK2/4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div4);//ADC时钟为APB2总线时钟的四分频
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);//设置Flash为2个等待周期
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能预取指缓冲区
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//锁相环时钟源外外部高速时钟、倍频系数为9(如果外部高速时钟为8MHZ,外部时钟经PPL倍频后的时钟频率为8*9=72MHZ)
/* Enable PLL */
RCC_PLLCmd(ENABLE);//PPL使能
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){};//等待锁相环时钟准备好
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//将锁相环时钟作为系统时钟源
/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08){};//等待锁相环时钟作为系统时钟准备好
}
else //如果外部高速时钟无法启动成功
return FALSE; //返回错误值
/* 使能外设时钟 --------------------------------------------------*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE );        //spi2端口时钟使能
RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI2, ENABLE );
} //spi2使能
/**
*@brief SPI Initialization
**/
void SPI_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
/* Configure SPI2 pins: SCK, MISO and MOSI -------------*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 片选
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//使能端
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//复位端
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_11);
GPIO_SetBits(GPIOB, GPIO_Pin_10);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
/* Set SPI interface */
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_Low;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial=7;
SPI_Init(SPI2,&SPI_InitStructure);
SPI_Cmd(SPI2,ENABLE); //Enable SPI2
}
xindefangxiang0 回答时间:2015-8-22 15:52:05
pengpeng-360286 发表于 2012-9-10 21:27
unsigned char RCC_Configuration(void)//时钟配置
{
ErrorStatus HSEStartUpStatus;//定义了一个布尔型变 ...

如果SPI1和SPI2都使用,并且各去接不同的外设模块,会造成冲突吗?谢谢
xindefangxiang0 回答时间:2015-8-22 15:52:49
如果SPI1和SPI2都使用,并且各去接不同的外设模块,会造成冲突吗?谢谢

所属标签

相似问题

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