野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21217|回复: 13

SPI(W25X16)

[复制链接]
发表于 2014-3-10 11:47:15 | 显示全部楼层 |阅读模式
这些代码是正点原子的SPI实验里面写的,都是用的SPI1和W25X16,为什么野火的例子里面就没有这些语句???
void SPI_Flash_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;  //SPI CS
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
SPIx_Init();     //初始化SPI
}  
回复

使用道具 举报

发表于 2014-3-10 11:52:38 | 显示全部楼层
肯定有啊,你用的是野火什么板子的代码
回复 支持 反对

使用道具 举报

发表于 2014-3-10 11:53:18 | 显示全部楼层
在void SPI_FLASH_Init(void)
回复 支持 反对

使用道具 举报

发表于 2014-3-10 11:54:27 | 显示全部楼层
这个是iso版本的例程
$JWKY~GXLWXVO`}C(Z]27.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-10 11:56:13 | 显示全部楼层
这些吗?void SPI_FLASH_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  
  /* Enable SPI1 and GPIO clocks */
  /*!< SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO,
       SPI_FLASH_SPI_MISO_GPIO, SPI_FLASH_SPI_DETECT_GPIO
       and SPI_FLASH_SPI_SCK_GPIO Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD, ENABLE);

  /*!< SPI_FLASH_SPI Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

  
  /*!< Configure SPI_FLASH_SPI pins: SCK */   //SCK&Icirc;&ordf;&acute;&reg;&iquest;&Uacute;&Ecirc;±&Ouml;&Oacute;&pound;&not;×÷&Icirc;&ordf;&Ouml;÷&Eacute;è±&cedil;&micro;&Auml;&Ecirc;&auml;&sup3;&ouml;&pound;&not;&acute;&Oacute;&Eacute;è±&cedil;&micro;&Auml;&Ecirc;&auml;&Egrave;&euml;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MISO */但是也不一样啊?
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MOSI */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin *///&AElig;&not;&Ntilde;&iexcl;&Ograve;&yacute;&frac12;&Aring;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Deselect the FLASH: Chip Select high */
  SPI_FLASH_CS_HIGH();

  /* SPI1 configuration */
  // W25X16: data input on the DIO pin is sampled on the rising edge of the CLK.
  // Data on the DO and DIO pins are clocked out on the falling edge of CLK.
  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_High;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI1, &SPI_InitStructure);

  /* Enable SPI1  */
  SPI_Cmd(SPI1, ENABLE);
}
/*************************
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-10 12:00:21 | 显示全部楼层
这些是正点原子的代码.,我想问,为什么这里有个void SPIx_Init(void),spix??SPI_InitTypeDef  SPI_InitStructure;

void SPIx_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE );       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
回复 支持 反对

使用道具 举报

发表于 2014-3-10 12:06:22 | 显示全部楼层
spix只是函数名一般情况下可以随便起.
SPI_InitTypeDef 结构体变量的定义,想当于unsigned char
SPI_InitStructure结构体变量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-10 12:18:33 | 显示全部楼层
那么我想问的就是,正点原子里面有这两个I/O口的配置,如下:
第一:void SPIx_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE );       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);


第二:void SPI_Flash_Init(void)
{

        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;  //SPI CS
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //复用推挽输出
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
而野火里面我只有看见一个配置,就是这个: /*!< Configure SPI_FLASH_SPI pins: SCK */   //SCK&Icirc;&ordf;&acute;&reg;&iquest;&Uacute;&Ecirc;±&Ouml;&Oacute;&pound;&not;×÷&Icirc;&ordf;&Ouml;÷&Eacute;è±&cedil;&micro;&Auml;&Ecirc;&auml;&sup3;&ouml;&pound;&not;&acute;&Oacute;&Eacute;è±&cedil;&micro;&Auml;&Ecirc;&auml;&Egrave;&euml;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MISO */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MOSI */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin *///&AElig;&not;&Ntilde;&iexcl;&Ograve;&yacute;&frac12;&Aring;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
为什么野火少了???
回复 支持 反对

使用道具 举报

发表于 2014-3-10 12:26:00 | 显示全部楼层
寒灯 发表于 2014-3-10 12:18
那么我想问的就是,正点原子里面有这两个I/O口的配置,如下:
第一:void SPIx_Init(void)
{

PA 4 \5\6\7 spi四个引脚,没有少吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-10 12:30:09 | 显示全部楼层
那正点原子的PA2、3、4引脚配置出来时做什么的啊Z??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-10 12:35:32 | 显示全部楼层
慕娅娜 发表于 2014-3-10 12:26
PA 4 \5\6\7 spi四个引脚,没有少吧

野火里面有初始化flashd的I/O口,为什么没有初始化SPI所在的I/O口?
回复 支持 反对

使用道具 举报

发表于 2014-3-10 12:50:30 | 显示全部楼层
没看过原子的代码,可能他用的是模拟
回复 支持 反对

使用道具 举报

发表于 2014-3-10 15:52:21 | 显示全部楼层
寒灯 发表于 2014-3-10 12:35
野火里面有初始化flashd的I/O口,为什么没有初始化SPI所在的I/O口?

pa 4 5 6 7就是spi 的io口,然后cs引脚使用了软件控制
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-10 16:01:16 | 显示全部楼层
谢谢各位了
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 16:33 , Processed in 0.055174 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表