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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版