2739|4

92

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

使用、评测STM32 Nucleo&X-NUCLEO-IDB04A1 [复制链接]

还有两天就放假了,整理代码,准备发帖(是不是有点晚)。
此帖出自stm32/stm8论坛

最新回复

没有看见东西啊、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、  详情 回复 发表于 2015-2-7 08:17

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

1634

帖子

0

TA的资源

裸片初长成(高级)

沙发
 
不晚
此帖出自stm32/stm8论坛
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
没有看见东西啊、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
此帖出自stm32/stm8论坛
 
个人签名我的博客
 

回复

92

帖子

0

TA的资源

一粒金砂(中级)

4
 
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);
}

此帖出自stm32/stm8论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(中级)

5
 
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;
}

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表