*************************************************************************************
const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x35,0x44,0x11,0x11,0x02};
*************************************************************************************
test.c如下:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "rtc.h"
#include "wkup.h"
#include "adc.h"
#include "dma.h"
#include "24cxx.h"
#include "flash.h"
#include "touch.h"
#include "24l01.h"
#include "ff.h"
#include "mmc_sd.h"
#include "diskio.h"
#include "malloc.h"
#include "exfuns.h"
#include "string.h"
//Mini STM32开发板范例代码19
//无线通信实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
u8 chars[19];
u8 chars1[21] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
u8 zhiling[11];
u8 g = 0;
//u8 sp = 0;
u8 v =0;
u32 num = 0;
//数字转化为字符串
void convert (char *a,u32 n)
{
int count=1;
int i,j;
int temp=n;
while((temp=temp/10) !=0)
{
count++;
}
for(i=count;i>=1;i--)
{
temp=n;
for(j=1;j<i;j++)
{
temp=temp/10;
}
*a=temp%10+'0';
a++;
}
}
void jiema(u8 zl[64])
{
num = zl[8] - 0x30;//低位
num = (zl[7]- 0x30)*10 + num;
num = (zl[6]- 0x30)*100 + num;
num = (zl[5]- 0x30)*1000 + num;
num = (zl[4]- 0x30)*10000 + num;
num = (zl[3]- 0x30)*100000 + num;
num = (zl[2]- 0x30)*1000000 + num;
num = (zl[1]- 0x30)*10000000 + num;//高位
}
void zhuan(CHAR y[64],u8 z[64])
{ u8 i;
for(i = 10;i < 52;i++)
{
y[i-10] = z;
}
}
void zhuan1(u8 y[19],u8 z[64])
{ u8 i;
for(i = 10;i < 17;i++)
{
y[i-10] = z;
}
y[18] = '\0';
}
int main(void)
{
//typedef unsigned char BYTE;
u32 t=0;
u8 tmp_buf[64];
u8 len,i;
u32 sp=0,sp1=0;
CHAR buffer[64];
CHAR p[64];
//u8 l,m,n;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,38400); //串口1初始化
KEY_Init(); //按键初始化
LED_Init(); //LED初始化
exfuns_init(); //为fatfs相关变量申请内存
mem_init(); //初始化内部内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(0,fs[0]); //挂载SD卡
f_mount(1,fs[1]); //挂载FLASH.
NRF24L01_Init(); //初始化NRF24L01
while(NRF24L01_Check())//检测不到24L01
{
delay_ms(500);
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
RX_Mode();
while(1)
{
if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
{
tmp_buf[63]='\0';//加入字符串结束符
printf("%s",tmp_buf);//给上位机发信号
}
else
{
if(USART_RX_STA&0x80)
{
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
for(t=0;t<len;t++)
{
tmp_buf[t] = USART_RX_BUF[t];
}
USART_RX_STA=0;
TX_Mode();
while(NRF24L01_TxPacket(tmp_buf) == TX_OK)
{
}
RX_Mode();
//-------------------------------------------------------------------------------
if(tmp_buf[0] == '['&&tmp_buf[9] == ']')//如把此if语句注释掉,程序其他功能可以正常
{
jiema(tmp_buf);
if(num == 2)
{ zhuan(p,tmp_buf);
p[53]='\0';//加入字符串结束符
//printf("%s",p);
f_mkdir ("0://test1"); //0:SD卡,卷标为0
f_opendir(&dir,(const TCHAR*)"0://test1");
f_open (ftemp,"0://test1//testy.txt",FA_OPEN_EXISTING | FA_READ); //读文件
sp1 = 102*sp;
f_lseek (ftemp , sp1);
f_read(ftemp,buffer,11,&br);
//printf("%s",buffer);
//buffer[11] ='\0';
//p[11]='\0';
while(strcmp(buffer,p))
{
sp++;
sp1 = 102*sp;
f_lseek (ftemp , sp1);
f_read(ftemp,buffer,11,&br);
}
buffer[9] = '\0';
f_lseek (ftemp , sp1 + 91);
f_read(ftemp,buffer,9,&br);
//printf("%s",buffer);-------上位机发[00000002]13017000047+回车 此句可以返回1330^^^^^到上位机(串口调试助手) 之后就一直死机的状态
sp = 0;
f_close(ftemp);
}
}
//------------------------------------------------------------------------------------------------------
for(i = 0;i < 62;i++)
{
tmp_buf = ' ';
USART_RX_BUF = ' ';
}
}
}
delay_us(1);
t++;
if(t==100000)//大约1s钟改变一次状态
{
t=0;
LED1=!LED1;
}
}
}