[原创] 使用、评测STM32 Nucleo&X-NUCLEO-IDB04A1

gxliu08   2015-2-6 20:23 楼主
还有两天就放假了,整理代码,准备发帖(是不是有点晚)。

回复评论 (4)

不晚
点赞  2015-2-7 00:40
没有看见东西啊、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
我的博客
点赞  2015-2-7 08:17
SPI外设接口
void STM_EVAL_SPIInit(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;
       
  /* Enable the SPI periph */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

  /* Enable SCK, MOSI, MISO and NSS GPIO clocks */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);
       
        /* Configure the SPI_NSS pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* Configure the SPI_RST pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
               
  /* Configure the SPI periph */
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;

  /* SPI SCK pin configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* SPI  MOSI pin configuration */
  //GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  //GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* SPI MISO pin configuration */
  //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  //GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* SPI configuration -------------------------------------------------------*/
  SPI_I2S_DeInit(SPI1);
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  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_16;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  /* Initializes the SPI communication */
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_Init(SPI1, &SPI_InitStructure);

  /* Initialize the FIFO threshold */
  SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);

  /* Enable the Rx buffer not empty interrupt */
  //SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE);
  /* Enable the SPI Error interrupt */
  //SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_ERR, ENABLE);
  /* Data transfer is performed in the SPI interrupt routine */

  /* Enable the SPI peripheral */
  SPI_Cmd(SPI1, ENABLE);
}

uint8_t SPI_SendByte(uint8_t Data)
{
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        SPI_SendData8(SPI1, Data);               
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
        return SPI_ReceiveData8(SPI1);
}

uint8_t SPI_ReadByte(void)
{
        return SPI_SendByte(0);
}

点赞  2015-2-7 21:23
GPIO模式实现SPI接口
void STM_EVAL_SPIInit(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
       
  /* Enable SCK, MOSI, MISO and NSS GPIO clocks */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);
       
        /* Configure the SPI_NSS, SPI_CLK,  pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* Configure the SPI_RST pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
               
  /* SPI_MISO pin configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/****************************************************************/
/*        SPIRead                                                                                                                                                                                                                 */
/*        FM1702SL                                                                                                                                                                                                                */
/*        ,                                                                                                                                                        */
/*                                                                                                                                                                                                                                                        */
/****************************************************************/
uint8_t SPIRead(uint8_t SpiAddress)
{
        uint8_t i, rdata;

        SpiAddress = SpiAddress << 1;
        SpiAddress = SpiAddress | 0x80;
       
        GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
        GPIO_ResetBits(GPIOA, GPIO_Pin_4); //NSS=0;

        for(i=0; i<8; i++){
                        if(SpiAddress&0x80)
                                        GPIO_SetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=1;
                        else
                                        GPIO_ResetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=0;
                        GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=1;
                        SpiAddress = SpiAddress << 1;
                        GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=0;
        }//Send SpiAddress;

        rdata=0;
        for(i=0; i<8; i++){
                        GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=1;
                        rdata = rdata << 1;
                        if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)){
                                        rdata=rdata|0x01;
                        }
                        GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=0;
        }//Receive data
        GPIO_SetBits(GPIOA, GPIO_Pin_4);        //NSS=1;
        return (rdata);
}

/****************************************************************/
/* SPIWrite                                                                                                                                                                                                                 */
/* FM1702SL                                                                                                                                                                                                                        */
/* ,                                                                                                                                                 */
/* N/A                                                                                                                                                                                                                                        */
/****************************************************************/
void SPIWrite(uint8_t SpiAddress, uint8_t SpiData)
{
        uint8_t i;
       
        SpiAddress = SpiAddress << 1;
        SpiAddress = SpiAddress & 0x7e;
       
        GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
        GPIO_ResetBits(GPIOA, GPIO_Pin_4); //NSS=0;
        for(i=0; i<8; i++)        {
                        if((SpiAddress&0x80)==0x80)
                                        GPIO_SetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=1;
                        else
                                        GPIO_ResetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=0;
                        GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=1;
                        SpiAddress = SpiAddress << 1;
                        GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
        }//Send SpiAddress

        for(i=0;i<8;i++){
                        if ((SpiData&0x80)==0x80)
                                        GPIO_SetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=1;
                        else
                                        GPIO_ResetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=0;
                        GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=1;
                        SpiData = SpiData << 1;
                        GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
        }//Send data;
        GPIO_SetBits(GPIOA, GPIO_Pin_4);        //NSS=1;
}

点赞  2015-2-7 21:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复