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

STM32F030 的SPI问题

[复制链接]
呆瓜云 提问时间:2013-10-30 20:03 /
void NRF24L01_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);

//        RCC_APB2PeriphClockCmd(RCC_NRF24L01_CE, ENABLE);    //ʹÄÜGPIOµÄʱÖÓ
        GPIO_InitStructure.GPIO_Pin = NRF24L01_CE;          //NRF24L01 Ä£¿éƬѡÐźÅ
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;    //ÍÆÍìÊä³ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIO_NRF24L01_CE, &GPIO_InitStructure);

//        RCC_APB2PeriphClockCmd(RCC_NRF24L01_CSN, ENABLE);   //ʹÄÜGPIOµÄʱÖÓ
        GPIO_InitStructure.GPIO_Pin = NRF24L01_CSN;      
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;    //ÍÆÍìÊä³ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIO_NRF24L01_CSN, &GPIO_InitStructure);
        
        Set_NRF24L01_CE;                             
        Set_NRF24L01_CSN;                         

    //ÅäÖÃNRF2401µÄIRQ
        GPIO_InitStructure.GPIO_Pin = NRF24L01_IRQ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN  ;     //ÉÏÀ­ÊäÈë
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIO_NRF24L01_IRQ, &GPIO_InitStructure);
        GPIO_SetBits(GPIO_NRF24L01_IRQ,NRF24L01_IRQ);

        SPI1_Configuration();                                //³õʼ»¯SPI
        Clr_NRF24L01_CE;                                         //ʹÄÜ24L01
        Set_NRF24L01_CSN;                                   //SPIƬѡȡÏû
}


void SPI1_Configuration(void)
{         
        SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7,GPIO_AF_0);//Á¬½Óµ½ÍâÉè
//        GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);


        GPIO_ResetBits(GPIOA, GPIO_Pin_1);
//        SPI_I2S_DeInit(SPI1);
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //ÉèÖÃSPIµ¥Ïò»òÕßË«ÏòµÄÊý¾Ýģʽ:SPIÉèÖÃΪ˫ÏßË«ÏòÈ«Ë«¹¤
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                        //ÉèÖÃSPI¹¤×÷ģʽ:ÉèÖÃΪÖ÷SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;        //ÉèÖÃSPIµÄÊý¾Ý´óС:SPI·¢ËͽÓÊÕ8λ֡½á¹¹
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                //Ñ¡ÔñÁË´®ÐÐʱÖÓµÄÎÈ̬:ʱÖÓÐü¿Õ¸ß
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                        //Êý¾Ý²¶»ñÓÚµÚ¶þ¸öʱÖÓÑØ
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                        //NSSÐźÅÓÉÓ²¼þ£¨NSS¹Ü½Å£©»¹ÊÇÈí¼þ£¨Ê¹ÓÃSSI룩¹ÜÀí:ÄÚ²¿NSSÐźÅÓÐSSIλ¿ØÖÆ
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;                //¶¨Ò岨ÌØÂÊÔ¤·ÖƵµÄÖµ:²¨ÌØÂÊÔ¤·ÖƵֵΪ256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //Ö¸¶¨Êý¾Ý´«Êä´ÓMSBλ»¹ÊÇLSBλ¿ªÊ¼:Êý¾Ý´«Êä´ÓMSBλ¿ªÊ¼
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                        //CRCÖµ¼ÆËãµÄ¶àÏîʽ
        SPI_RxFIFOThresholdConfig(SPI1,SPI_RxFIFOThreshold_QF);//ÅäÖà SPI µÄ FIFO ½ÓÊÕãÐÖµ(½ÓÊÕ8bits¾ÍÖà SPI_I2S_FLAG_RXNE)
        
        SPI_Init(SPI1, &SPI_InitStructure);                                                          //¸ù¾ÝSPI_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèSPIx¼Ä´æÆ÷         
        
        SPI_Cmd(SPI1, ENABLE);                 //ʹÄÜSPIÍâÉè
//        SPI1_ReadWriteByte(0xff);
        GPIO_SetBits(GPIOA, GPIO_Pin_1);
}

u8 SPI1_ReadWriteByte(u8 TxData)                                       //SPI¶ÁдÊý¾Ýº¯Êý
{
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        SPI_SendData8(SPI1, TxData);
//        SPI_I2S_SendData16(SPI1, TxData);
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
        return SPI_ReceiveData8(SPI1);
//        return SPI_I2S_ReceiveData16(SPI1);
}

各位大神看看哪里出问题了啊!
收藏 1 评论20 发布时间:2013-10-30 20:03

举报

20个回答
呆瓜云 回答时间:2013-10-30 20:51:28

RE:STM32F030 的SPI问题

来大神,030的单片机刚出不久,用的050的程序,但是不行!
回答时间:2013-10-31 08:58:00

RE:STM32F030 的SPI问题

你那出的是什么问题?建议看一下你的.h文件定义的芯片类型。
feiante-155820 回答时间:2013-10-31 10:34:52

RE:STM32F030 的SPI问题

软件或固件库中有没有例程,建议参考一下例程,030芯片很新,没有用过呢
Hiker 回答时间:2013-10-31 13:23:47

RE:STM32F030 的SPI问题

GPIO_PinAFConfig(GPIOA,GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7,GPIO_AF_0); 为什么不分开映射。
fengye5340 回答时间:2013-10-31 13:25:19

RE:STM32F030 的SPI问题

看了一下,其它配置没什么问题,下面这一句

GPIO_PinAFConfig(GPIOA,GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7,GPIO_AF_0);//Á¬½Óµ½ÍâÉè
改成分开配置试试。
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_NRF24L01_CSN
GPIO_NRF24L01_CE
GPIO_NRF24L01_IRQ
是不是GPIOA呢,没见宏定义,若否,换成 GPIOA
呆瓜云 回答时间:2013-10-31 18:03:02

回复:STM32F030 的SPI问题

回复第 5 楼 于2013-10-31 13:23:47发表:
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7,GPIO_AF_0); 为什么不分开映射。 

分开还是没效果啊!
呆瓜云 回答时间:2013-10-31 18:04:45

回复:STM32F030 的SPI问题

回复第 6 楼 于2013-10-31 13:25:19发表:
看了一下,其它配置没什么问题,下面这一句

GPIO_PinAFConfig(GPIOA,GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7,GPIO_AF_0);//Á¬½Óµ½ÍâÉè
改成分开配置试试。
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_NRF24L01_CSN
GPIO_NRF24L01_CE
GPIO_NRF24L01_IRQ
是不是GPIOA呢,没见宏定义,若否,换成 GPIOA
 

是GPIOA ,上面分开配置了也没有用!
呆瓜云 回答时间:2013-10-31 18:05:16

回复:STM32F030 的SPI问题

回复第 3 楼 于2013-10-31 08:58:00发表:
你那出的是什么问题?建议看一下你的.h文件定义的芯片类型。 

那个H文件的定义啊?
温柔的武士刀 回答时间:2013-10-31 18:31:29

RE:STM32F030 的SPI问题

SPI在时钟的边沿进行采样,所以在时钟的边沿,MOSI应该保持一段时间;另外循环中应该有一定的延时.楼主的程序具体是哪些方面报错呢?
123下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版