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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版