OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4249|回复: 2

【已搞懂】请教原子哥,我用的是你的Mini的开发板,遇到了问题...

[复制链接]

10

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-7-16
在线时间
4 小时
发表于 2013-12-22 17:27:08 | 显示全部楼层 |阅读模式
我在你的例程的“图片显示实验”,加入NRF24L01,进行无线传送,但是
while(NRF24L01_Check())//检测不到24L01
{
LCD_ShowString(60,130,"24L01 Check Failed!");
delay_ms(500);
LCD_ShowString(60,130,"Please Check!      ");
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
用这个函数进行检测提示失败了,我本来以为是
SPI1->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1
SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1 
这两个地方出错,于是把时钟极性和时钟相位清零还是不行,我记得还有一个地方是SPI的话SD卡和无线模块是共用的,我又找到MMC_SD.C文件夹下的
void SD_SPI_Init(void)
{
     //设置硬件上与SD卡相关联的控制引脚输出
//避免NRF24L01/W25X16等的影响
RCC->APB2ENR|=1<<2;       //PORTA时钟使能 
GPIOA->CRL&=0XFFF000FF; 
GPIOA->CRL|=0X00033300;//PA2.3.4 推挽    
GPIOA->ODR|=0X7<<2;    //PA2.3.4上拉 
SPIx_Init();
  SD_SPI_SpeedLow();//设置到低速模式  
SD_CS=1;
}
但是程序从主函数走,应该走不到这个函数吧,主函数如下:

Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化    
LCD_Init(); //初始化液晶  
KEY_Init(); //按键初始化
LED_Init();         //LED初始化
NRF24L01_Init();    //初始化NRF24L01 
Remote_Init();    //初始化红外接收
SPI_Flash_Init();   //SPI FLASH使能
///////////////////////////////////////////////////////  
while(NRF24L01_Check())//检测不到24L01
{
LCD_ShowString(60,130,"24L01 Check Failed!");
delay_ms(500);
LCD_ShowString(60,130,"Please Check!      ");
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
////////////////////////////////////////////////////////
if(Font_Init())//字库不存在,则更新字库
{  
POINT_COLOR=RED;      
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"Font ERROR"); 
while(1);    
}    
POINT_COLOR=RED;      
Show_Str(60,50,"Mini STM32开发板",16,0);      
Show_Str(60,70,"图片显示 程序",16,0);      
Show_Str(60,90,"正点原子@ALIENTEK",16,0);      
Show_Str(60,110,"2011年1月2日",16,0);  
SD_Initialize();

刚刚得知原因:SPI_Flash_Init();   //SPI FLASH使能
NRF24L01_Init();    //初始化NRF24L01 
我把他们俩的位置写反了,原因就是:SPI_Flash_Init(); 是把用到SPI接口的所有外设全部失能,然后NRF24L01_Init();   再使能。如果写反,  当然无线模块永远也不能工作
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-22 20:06:32 | 显示全部楼层
参考Mini板的综合实验:
//按NRF24L01的配置,设置SPI1     
void SPIx_Init1(void)
{  
RCC->APB2RSTR|=1<<12;      //SPI1复位 
RCC->APB2RSTR&=~(1<<12);   //SPI1结束复位

RCC->APB2ENR|=1<<2;       //PORTA时钟使能   
RCC->APB2ENR|=1<<12;      //SPI1时钟使能 
   
//这里只针对SPI口初始化
GPIOA->CRL&=0X000FFFFF; 
GPIOA->CRL|=0XBBB00000;//PA5.6.7复用      
GPIOA->ODR|=0X7<<5;    //PA5.6.7上拉

SPI1->CR1|=0<<10;//全双工模式
SPI1->CR1|=1<<9; //软件nss管理
SPI1->CR1|=1<<8;  

SPI1->CR1|=1<<2; //SPI主机
SPI1->CR1|=0<<11;//8bit数据格式
//对24L01要设置 CPHA=0;CPOL=0;
SPI1->CR1&=~(1<<1); //CPOL=0时空闲模式下SCK为0 
SPI1->CR1&=~(1<<0); //第一个时钟的下降沿,CPHA=0 CPOL=0
  
SPI1->CR1|=7<<3; //Fsck=Fcpu/256
SPI1->CR1|=0<<7; //MSBfirst   
SPI1->CR1|=1<<6; //SPI设备使能
SPIx_ReadWriteByte(0xff);//启动传输  
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-7-16
在线时间
4 小时
 楼主| 发表于 2013-12-29 12:33:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
懂啦,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 09:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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