Beispiel #1
0
int main1(void)
{
	uint32 i=0;
	RCC_Configuration();
	Mema_Init(MemBuf);
	SPI_FLASH_Init();
	Load_EnvConfig();
	Frist_CheckEnv();
	if(enValue.UpdateApp==True)
	{
		//在这里放置搬运程序
		enValue.UpdateApp=False;
		Save_EnvConfig();
	}
	if(enValue.UpdateOver==True)
	{
		//在这里放置回滚程序
		enValue.UpdateOver=False;
		Save_EnvConfig();
	}
	
	USART_Configuration(0);
	for(i=0;i<10000;i++)
	{
		FLASH_ProgramStart(SPI_FLASH_SectorErase,i*1024,1024);
		Flash_Coppy(Flash_ReadData,0,W25Q16_Write,i*1024,1024);
		Flash_Printf(W25Q16_Read,i*1024);
	}
	//Flash_Printf(Flash_ReadData,0);
	//Application_Run();
	while(1);
}
Beispiel #2
0
/*
 * 函数名:main
 * 描述  :主函数
 * 输入  :无
 * 输出  :无
 */
int main(void)
{ 	
	uint8_t k;
  
  /* 配置串口1为:115200 8-N-1 */
	USART1_Config();
	printf("\r\n 这是一个2M串行flash(W25Q16)实验 \r\n");
	
	/* 2M串行flash W25X16初始化 */
	SPI_FLASH_Init();
	
	/* Get SPI Flash Device ID */
	DeviceID = SPI_FLASH_ReadDeviceID();
	
	Delay( 200 );
	
	/* Get SPI Flash ID */
	FlashID = SPI_FLASH_ReadID();
	
	printf("\r\n FlashID is 0x%X,  Manufacturer Device ID is 0x%X\r\n", FlashID, DeviceID);
	
	/* Check the SPI Flash ID */
	if (FlashID == sFLASH_ID)  /* #define  sFLASH_ID  0xEF3015 */
	{	
		printf("\r\n 检测到华邦串行flash W25Q16 !\r\n");
		
		/* Erase SPI FLASH Sector to write on */
		SPI_FLASH_SectorErase(FLASH_SectorToErase);	 	 
		
		/* 将发送缓冲区的数据写到flash中 */
		SPI_FLASH_BufferWrite(Tx_Buffer, FLASH_WriteAddress, BufferSize);
    for( k=0; k<6; k++ )
      printf("\r\n 写入的数据为:%d \r\n", Tx_Buffer[k]);
		
		/* 将刚刚写入的数据读出来放到接收缓冲区中 */
		SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize);
    for( k=0; k<6; k++ )
      printf("\r\n 读出的数据为:%d \r\n", Tx_Buffer[k]);
		
		/* 检查写入的数据与读出的数据是否相等 */
		TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize);
		
		if( PASSED == TransferStatus1 )
		{    
			printf("\r\n 2M串行flash(W25Q16)测试成功!\n\r");
		}
		else
		{        
			printf("\r\n 2M串行flash(W25Q16)测试失败!\n\r");
		}
	}// if (FlashID == sFLASH_ID)
	else
	{    
		printf("\r\n 获取不到 W25Q16 ID!\n\r");
	}
	
	SPI_Flash_PowerDown();  
	while(1);  
}
/*
 * 初始化液晶,串口,触摸屏,flash及sd卡 * 
 */
void ISO_Init(void)
{
	uint8_t k;
	
  /* 液晶初始化先于串口,不然会有bug,至于是什么原因我也不知道:( */
  LCD_Init();
	
	LCD_Clear(0,0,240,320,WHITE);
	
	LCD_DispStr(20,150,"board init,please wait... ",RED);
  
  USART1_Config();	
	
	

	/* 初始化sd卡文件系统,因为汉字的字库放在了sd卡里面 */
	Sd_fs_init();	

	#ifdef WORD_MODE
  /* 显示界面图片 */
	Lcd_show_bmp(0, 0,"/boardtest/boardtest.bmp");
	#else
	 /* 显示界面图片 */
	Lcd_show_bmp(0, 0,"/boardtest/ISO/ui_boardtest.bmp");

	#endif
	Lcd_List(1);
	
	/* 初始化外部FLASH */
	SPI_FLASH_Init();
	//SPI_FLASH_SectorErase(0);
  
	/* 触摸屏IO和中断初始化 */
	Touch_Init();		
		
		
		/*-------------------------------------------------------------------------------------------------------*/  
		#if 1
		SPI_FLASH_BufferRead(&cal_flag, 0, 1);
		if( cal_flag == 0x55 )
		{
			SPI_FLASH_BufferRead((void*)cal_p, 1, sizeof(cal_p));
			SPI_FLASH_CS_HIGH();
			for( k=0; k<6; k++ )
						printf("\r\n rx = %LF \r\n",cal_p[k]);
		}
		else
		{
			/* 等待触摸屏校正完毕 */
			while(Touch_Calibrate() !=0);
		}
		#elif 0
		/* 等待触摸屏校正完毕 */
		while(Touch_Calibrate() !=0);
		#endif
	


}
Beispiel #4
0
/**
  * @brief  Displays the splash screen
  * @param  None
  * @retval None
  */
static void prvSplashScreen()
{
  SPI_FLASH_Init();
//  SPI_FLASH_EraseChip();
//  uint8_t* dataPointer = (uint8_t*)splash_screen.DataTable;
//  SPI_FLASH_WriteBuffer(dataPointer, 0, 800*480*2);
//  volatile uint8_t data[128] = {0};
//  SPI_FLASH_ReadBuffer(data, 0, 128);

//  for (uint32_t i = 0; i < 800*480*2; i += 256)
//  {
//    SPI_FLASH_ReadBuffer(prvTempBuffer, i, 256);
//    SDRAM_WriteBuffer8Bit(prvTempBuffer, i, 256);
//  }
}
Beispiel #5
0
int main(void)
{
    SystemClockSetup(ClockSource_EX50M,CoreClock_100M);
    DelayInit();
    LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED);
    UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200);
	  DisplayCPUInfo();
	  //初始化SPIFlash
    SPI_FLASH_Init();
	  UART_printf("SPI Flash Size:%dKB\r\n", SPI_FLASH_GetCapacity()/1024);
    //测试SPIFLASH
	  SPIFLASH_Test();
    while(1) 
    {		
    }
}
Beispiel #6
0
void rt_hw_SpiFlash_init()
{
     SPI_FLASH_Init();
     
        /* register sdcard device */
        SpiFlash_device.type  = RT_Device_Class_Block;
        SpiFlash_device.init 	= rt_SpiFlash_init;
        SpiFlash_device.open 	= rt_SpiFlash_open;
        SpiFlash_device.close = rt_SpiFlash_close;
        SpiFlash_device.read 	= rt_SpiFlash_read;
        SpiFlash_device.write = rt_SpiFlash_write;
        SpiFlash_device.control = rt_SpiFlash_control;

        /* no private */
        SpiFlash_device.user_data = RT_NULL;

        rt_device_register(&SpiFlash_device, "flash",
                           RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE);
}
Beispiel #7
0
/**
  * @brief  Description 外设初始化
  * @param  None
  * @retval None
  */
void PeripheralInit(void)
{
	RCC_Config();
	
	SysTick_Init();
	
    TIM2_Configuration();
    
	LED_GPIO_Config();
	KEY_GPIO_Config();
	EXTI15_10_Config();
	
	General_GPIO_Config();
	
	LCD_GLASS_Init();
	
	USART1_Config(115200);
    
//	Delay_ms(10);   //开启滴答定时
	LCD_GLASS_Clear();
	
	AVCC1_POWER(OFF);    //关ADC1电源
    BATTEST_POWER(OFF);  //关电池电压检测电源
	MODEL_PWRCTRL(ON);	//开对外接口电源
	ADC1_Init();
    
    /* 8M串行flash W25Q64初始化 */
	SPI_FLASH_Init();
	
	I2C_GPIO_Config();
    
    //rtc  初始化
    rtc_init();
    
    
}
Beispiel #8
0
/*
*@功能 主函数入口
*@参数	空
*@返回	空
*/
int main(void)
{
	

	
	
	
	
  /*测试变量部分*/	
	/*******************************************/
	uint8_t t=' ';
	uint8_t usb_code[6]={0x55,0x7A,0xBB,0x01,0x00,0x01};//下位机反复的向上位机发送此命令,用以建立初始化连接
  uint8_t p[6]={0x30,0x31,0x32,0x33,0x34,0x35};
	uint8_t hanzi[11];
	uint8_t *phz;
	uint32_t flash_data;
	uint8_t flash_temp[4];
	uint8_t status;
  uint32_t addr;
	uint8_t nChar;
// 	uint8_t char_buf[50];
// 	uint8_t count;

	uint32_t batt_test=0;
	/*********************************************/
	
	//设置中断向量表的位置在 0x5000,即内部flash的前20K
	NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x5000);		


	
	
	SystemTick_Init();
	NVIC_Configuration();
		

	//按键初始化
	Init_Sw_Key_Io();
 	Exit_Line_Init();	



	EXTILine_Mask(EXTI_Line5);
	EXTILine_Mask(EXTI_Line8);	
	EXTILine_Mask(EXTI_Line15);	

	//长按开机,如果长按不够3m则继续保持关机状态,如果长按3m,则退出停机模式,开机
	WKUP_Init();		
	
	EXTILine_Unmask(EXTI_Line5);
	EXTILine_Unmask(EXTI_Line8);
	EXTILine_Unmask(EXTI_Line15);
	
	
	
  //如果没有进入停机模式,则开启显示
	OLED_WR_Byte(0xAF,OLED_CMD); //开启显示
	
	
  longpress=0;
	stop_flag=0;
	
	SPI_FLASH_Init();
	//正常运行后,显示logo
	OLED_Init();
	SPI_FLASH_Init();	
	
	
	OLED_Clear();	
	OLED_DrawBMP(32,2,48,4,hui);
	OLED_ShowUnite(48,2,"合科技");		
	//delay_ms(800);	




	
	USB_BIT_Init();
	
	//为降低功耗的控制位
	/****************************************/
	bluetooth_control_Init();

	max232_control_Init();

	oled_control_Init();
	OLED_ON;
	
	buzzer_control_Init();
	BUZZER_OFF;

	coil_control_Init();	
	COIL_NO_ACTUATE;
	/****************************************/
	
	





	Init_Timer();
	
	//实时时钟初始化
	RTC_init();
	
	//初始化并启动看门狗
	//iwdg_init();
	
	//串口1 USB初始化及配置
	Uart1_Init();
	USART1_Configuration();
	
	//串口2 RFID初始化及配置
	Uart2_Init();
	USART2_Configuration();	
	
	//串口3 bluetooth初始化及配置
	Uart3_Init();
	USART3_Configuration();	
	bluetooth_Configuration();	//蓝牙的EN和BRST配置
	CLR_BT_EN;	//开启蓝牙
	

	
	
	ADC_GPIO_Configuration();
	ADC_Configuration();
	

	
	//flash区域指针初始化
	//SPI_FLASH_WriteWord(INIT_FLAG,1);   //此次下载清flash
 	SPI_FLASH_WriteWord(INIT_FLAG,0);		  //此次下载不清flash
	
	if(SPI_FLASH_ReadWord(INIT_FLAG) ==0x01)		//当初始化标志等于1,就初始化POINT和ROW
	{
	  mykey_init();		//初始化钥匙操作的头指针 ---如何设定在什么情况下重新设置
	}	
	


	

	
// 	 OLED_ClearArea(0,4,128,6);	
// 	 OLED_ShowUnite(24,4,"初始化蓝牙");		
// 	 mac_query_result=bluetooth_mac();
	
	
	
	
	
	/*延时函数测试*/
	/**********************************************/
// 	GPIO_Configuration();
// 	while(1)
// 	{
// 		GPIO_SetBits(GPIOB,GPIO_Pin_0);
// 		delay_ms(1000);
// 		GPIO_ResetBits(GPIOB,GPIO_Pin_0);
// 		delay_ms(3000);	
// 	}
	/**********************************************/

	
	/*OLED测试*/
	/**********************************************/
//   while(1)
//   {
// 		OLED_Clear();
// 		OLED_ShowChinese(0,0,0);  //中
// 		OLED_ShowChinese(18,0,1); //景
// 		OLED_ShowChinese(36,0,2); //园
// 		OLED_ShowChinese(54,0,3); //电
// 		OLED_ShowChinese(72,0,4); //子
// 		OLED_ShowChinese(90,0,5); //科
// 		OLED_ShowChinese(108,0,6);//技
// 		OLED_ShowString(0,3,"1.3' OLED TEST");
// 		//OLED_ShowString(8,2,"ZHONGJINGYUAN");  
// 	  //OLED_ShowString(20,4,"2014/05/01");  
// 		OLED_ShowString(0,6,"ASCII:");  
// 		OLED_ShowString(63,6,"CODE:");  
// 		OLED_ShowChar(48,6,t);//显示ASCII字符	   
// 		t++;
// 		if(t>'~')
// 			t=' ';
// 		OLED_ShowNum(103,6,t,3,16);//显示ASCII字符的码值 	
// 			
//     delay_ms(8000);
//     //OLED_Clear();
// 		
// 		OLED_DrawBMP(0,0,128,8,BMP1);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
// 		delay_ms(800);
// 		
//     //OLED_Display_On();
//     //delay_ms(800);		
// 		
// 		OLED_DrawBMP(0,0,128,8,BMP2);
// 		delay_ms(800);	
// 		
//    //OLED_Display_Off();	
//    //delay_ms(800);				
//   }
	/**********************************************/
	
	
	
	
	/*OLED+字库测试*/
	/**********************************************/	
// 	phz="字库";
// 	hanzi[0]=*phz;
// 	hanzi[1]=*(phz+1);
// 	hanzi[2]=*(phz+2);
// 	hanzi[3]=*(phz+3);
// 	hanzi[4]=*(phz+4);	
// 	
// 	
// 	OLED_ShowChinese(0,0,"汉");
// 	OLED_ShowChinese(16,0,"字");
// 	
// 	OLED_ShowUnite(0,2,"你很不错");
// 	OLED_ShowUnite(0,4,"ABCDEF");		
// 	OLED_ShowUnite(0,6,"123456");		
	
	
	/**********************************************/	
	
/*
		STM32F103C8串口有3个
		串口1通过USB接充电器,与上位机PC通信
		串口2通过串口读RFID的数据
		串口3通过蓝牙与PDA通信
*/	
	
	
 	/*串口1 USB测试*/
	/**********************************************/
	
// 	while(1)
// 	{
// 		UART1nSendChar(1,"12345",5);
// 		delay_ms(1000);
// 	}
	//UART1nSendChar(1,usb_code,6);	
	
	//USB_Cheak_init();
	
	//Test_Usb_Data();


// 	UART1SendwordHex(1, 0x123456);

//   UART1nSendChar(1,"汉字",5);	

// 	while(1);
	
	/**********************************************/
	
	
	
	
 	/*串口2 RFID测试*/
	/**********************************************/
// 	while(1)
// 	{
// 			OLED_ShowUnite(32,2,"RFID");
// 			delay_ms(1000);	
// 			UART1nSendChar(1,"12345",5);
// 			//OLED_Clear();	    //清屏
// 			nChar =Read_RfidData(2,Rfid_Buff,0xff);
// 			m_UB2;
// 			if(nChar ==5) 
// 			{
// 				if(Rfid_Buff[0]==0&&Rfid_Buff[1]==0&&Rfid_Buff[2]==0&&Rfid_Buff[3]==0)
// 					;
// 				else		//至少有一个不为零
// 				{
// 					UART1nSendChar(1,Rfid_Buff,5);
// 					OLED_ShowNumHex(32,4,Rfid_Buff[0],2,16);
// 					OLED_ShowNumHex(48,4,Rfid_Buff[1],2,16);
// 					OLED_ShowNumHex(64,4,Rfid_Buff[2],2,16);
// 					OLED_ShowNumHex(80,4,Rfid_Buff[3],2,16);
// 					delay_ms(1000);						
// 					break;
// 				}
// 			}
// 	}
// 	while(1);		
	
	
	
	
	
	/**********************************************/	
	
	
	
	
 	/*串口3 bluetooth测试*/
	/**********************************************/
// 	CLR_BT_EN;
// 	CLR_BT_BRTS;
// 	
// 	while(1)
// 	{
// 		UART3nSendChar(3,"012345",6);
// 		delay_ms(1000);
// 	}
// 		while(1)
// 		{
// 			UART3nSendChar(3,"TTM:MAC-?",9);

// 			count=UART3GetCount(3);
// 			UART3nReadChar(3,char_buf,count);
// 			
// 			
// 			
// 			
// 			UART1nSendChar(1,char_buf,count);

// 			delay_ms(1000);
// 		}

	/**********************************************/	
	
	
	/*flash测试*/
	/**********************************************/	
	
	
//   SPI_FLASH_WriteWord(AUTHOR_ROW,0x456789);
// 	
// 	SPI_FLASH_BufferRead(flash_temp,AUTHOR_ROW,4);	
// 	
// 	flash_data=SPI_FLASH_ReadWord(AUTHOR_ROW);

// 	UART1nSendChar(1,flash_temp,4);	
//   
// 	OLED_ShowNum(0,6,flash_data,8,16);	
// 	
// 	//SPI_FLASH_WriteEnable();
//   status=SPI_FLASH_ReadStatusReg();
// 	OLED_ShowNum(112,6,status,1,16);	
	
//  SPI_FLASH_BulkErase();
	
// 	SPI_FLASH_BufferWrite("98765",0x100002,6);
// 	SPI_FLASH_BufferRead(p,0x100002,6);
	
	
// 	SPI_FLASH_Write("98765",0x1f0005,6);
// 	SPI_FLASH_Read(p,0x1f0005,6);	
// 	while(1)
// 	{
// 		UART1nSendChar(1,p,6);	
// 		delay_ms(1000);
// 	}
	
	/**********************************************/	
	


	//菜单测试
	/**********************************************/	
	
  //Main_Lcd_Show();   //主界面显示	
	//Main_Lcd_Show2();	
	
// 	mode=1;
// 	
// 	OLED_ShowChar(0,0,'A');
// 	
// 	OLED_ShowChinese(0,2,"我");
// 	
// 	OLED_ShowUnite(0,4,"你很不错");
// 	
// 	while(1);
// 	
// 	mode=0;
// 	delay_ms(1000);

	//ShowMenu(HsMenu);
	
	
// 	Choose_MenuOp1();

//  Choose_MenuOp4(); 

// 	Choose_MenuOp4_1();
//  Choose_MenuOp4_2();
// 	Choose_MenuOp4_22();
// 	Choose_MenuOp4_3();
// 	Choose_MenuOp4_4();

// 	Choose_MenuOp5();

// 	Choose_MenuOp5_1();
// 	Choose_MenuOp5_3();
// 	Choose_MenuOp5_4();	

// 		while(1)
// 		{
// 			Main_Oled_Time();	
// 			Main_Oled_Power();
// 			delay_ms(1000);
// 		}	

	

// 		while(1);
	/**********************************************/		
	
	
	
	
	
	//蜂鸣器测试
  /**********************************************/	
// 	while(1)
// 	{
// 		BUZZER_OFF;
// 		delay_ms(1000);
// 		
// 		BUZZER_ON;
// 		delay_ms(1500);	
// 	}
	
	/**********************************************/		
	
	
	
	
	
	//协议测试
	/**********************************************/	
	//OLED_Clear();
// 	OLED_ShowUnite(32,2,"通信中..");
// 	OLED_ShowUnite(0,4,"你很不错");
// 	delay_ms(1000);
// 	addr=0xFFFF;
// 	OLED_ShowNumHex(0,6,addr,8,16);
	
	//USB_Cheak_init();
  //USB_transmit();

//  		bluetooth_uart_switch=1;
// 		Test_Usb_Data();
//  		while(1);


	


//   SPI_FLASH_WriteWord(AUTHOR_POINT,AUTHOR_START);		

//   addr= SPI_FLASH_ReadWord(AUTHOR_POINT);   

//   OLED_ShowNum(0,0,addr,8,16);
	/**********************************************/	
	
	
	
	
	//ADC测试
	/**********************************************/		
	
// 	while(1)
// 	{
// 		OLED_Clear();
// 		batt_test=ADC_GetConversionValue(ADC1);
// 		OLED_ShowNum(24,2,batt_test,8,16);
// 		delay_ms(1000);
// 	}
// 	
	
	
	/**********************************************/		
	
	
	
	//定时器2测试
	/**********************************************/
	
	
// 	GPIO_Configuration();
// 	GPIO_ResetBits(GPIOB,GPIO_Pin_6);
// 	delay_ms(10);
// 	GPIO_SetBits(GPIOB,GPIO_Pin_6);
//   g_WaitTimeOut = 0;
//   SetTimer(TIMER_TIMEOUT,1,Do_TimeOut,THREE_MIN);
// 	while(g_WaitTimeOut == 0)
// 	{
// 		GPIO_ResetBits(GPIOB,GPIO_Pin_6);

// 	}	
//   KillTimer(TIMER_TIMEOUT);	
// 	GPIO_SetBits(GPIOB,GPIO_Pin_6);
	
//   g_WaitTimeOut = 0;
//   SetTimer(TIMER_TIMEOUT,10,Do_TimeOut,THREE_MIN);
// 	while(g_WaitTimeOut == 0)
// 	{
// 			nChar =Read_RfidData(2,Rfid_Buff,0xff);
// 			if(nChar ==5)
// 			{
// 					OLED_ShowUnite(32,80,Rfid_Buff);
// 					++rfidrow;
// 					delay_ms(1000);		
// 					for(i=0;i<4;i++)
// 					{
// 							for(k =0;k<40;k++)
// 								msDelay(500);
// 							WritEDAta(CAIMA_START+8*rfidrow+4+i,Rfid_Buff[i]);
// 					}				
// 					break;
// 			}

// 	}	
//   KillTimer(TIMER_TIMEOUT);		
	/**********************************************/	
	
	
	
	
	
	
	
// 	OLED_ClearArea(0,4,128,6);
// 	OLED_ShowUnite(24,4,"初始化完成");		
// 	delay_ms(100);
	
	
	//bluetooth_uart_switch=0;
// 	for(int iter=0;iter<3;iter++)
// 		Power_Cheak();	

  //主循环测试
	g_State=ST_IDLE;
	while(1)																					 
	{   
		switch (g_State)				//g_State是一个全局函数
		{
			
			 case ST_IDLE:    			//#define  ST_IDLE          0XFF
			 ST_Idle();		    			//空闲时做状态检测,可改变g_State
			 break;			
			
			 case ST_USB: 					//#define  ST_USB	          0XFD         
			 USB_transmit();				//USB传输
			 break;
			 	 
// 			 case ST_KEY:
// 			 Key_Trismit();  				//读钥匙的RFID,判断是否已经连接上
// 			 break;
			 
			 case ST_LCDMENU:   		//#define  ST_LCDMENU      0XFA			多选择菜单操作
			 Choose_MenuOp1();
			 break;
			 
			 default:break;

			}
	 }		
}
Beispiel #9
0
int main(void)
{		
//	u8 x=0;
	unsigned char status;
	u8 Data[16];
	u8 i;
	u8 k=0;//读写错误重试次数
	u8 j;
	
  
	USART1_Config();
	//printf("USART1_Config success\n");
	SysTick_Init();
	
	//printf("SysTick_Init success\n");
	SPI_FLASH_Init();
	//printf("SPI_FLASH_Init success\n");
	InitRc522();				
	//printf("InitRc522 success\n");
	TIM3_PWM_Init();
	//printf("TIM3_PWM_Init success\n");
	GPIO_OUT_Init();
	//NVIC_Configuration();
	EXTI_PB1_Config();
	EXTI_PB2_Config();
	BEEP_Init();
	beep_ok();
	
  	while(1) 
{	
		
			status = PcdRequest(PICC_REQIDL,CT);/*扫描卡*/
			status = PcdAnticoll(SN);/*防冲撞*/
			//printf("%d",status);
			if (status==MI_OK)
			{
				k=0;
				sn=((SN[0]<<24)|(SN[1]<<16)|(SN[2]<<8)|(SN[3]));
				//printf("MI_OK\n");
				//printf("%x\n",sn);
				
				if((sn==YANGCHENGUANG)||(sn==LIUZHIYU)||(sn==CHENDUYU)||(sn==WUPENG)||(sn==BLUECARD))
				{
					//printf("OPEN DOOR\n");
					beep_ok();
					opendoor();
				}
				
			}
			else
			{
				k++;
				if((k++)>20)
				{
					SPI_FLASH_Init();
					//printf("SPI_FLASH_Init success\n");
					Reset_RC522();
					//printf("InitRc522 success\n");
					k=0;
				}
			}
			delay_ms(100);
	}
}
/*--------------------------------------------------------------------------*/
int
main(int argc, char **argv)
{
  /*
  * Initalize hardware.
  */
  msp430_cpu_init();
  clock_init();

  uart_init(9600); /* Must come before first printf */

  /* xmem_init(); */

  PRINTF("iWatch 0.10 build at " __TIME__ " " __DATE__ "\n");
  UCSCTL8 &= ~BIT2;
  
  /*
  * Hardware initialization done!
  */

  /*
  * Initialize Contiki and our processes.
  */
  process_init();
  process_start(&etimer_process, NULL);
  
  rtimer_init();
  ctimer_init();

  energest_init();
  ENERGEST_ON(ENERGEST_TYPE_CPU);

  backlight_init();
  battery_init();
  SPI_FLASH_Init();

  if (system_testing())
  {
    clock_time_t t;

    backlight_on(200, 0);
    t = clock_seconds();
    // sleep 1
    while(clock_seconds() - t <= 3);
    printf("$$OK BACKLIGHT\n");
    t = clock_seconds();
    while(clock_seconds() - t <= 3);
    backlight_on(0, 0);

    motor_on(200, 0);
    // sleep 1s
    t = clock_seconds();
    while(clock_seconds() - t <= 3);
    printf("$$OK MOTOR\n");
    t = clock_seconds();
    while(clock_seconds() - t <= 3);
    motor_on(0, 0);

#if PRODUCT_W001
    I2C_Init();
    codec_init();
    codec_bypass(1);
    // sleep 1s
    t = clock_seconds();
    while(clock_seconds() - t <= 3);
    printf("$$OK MIC\n");
    // sleep 1s
    t = clock_seconds();
    while(clock_seconds() - t <= 3);
    codec_bypass(0);

    codec_shutdown();
#endif
  }

  int reason = CheckUpgrade();

  window_init(reason);

  button_init();
  rtc_init();
  CFSFontWrapperLoad();

  system_init(); // check system status and do factor reset if needed

  I2C_Init();

  //codec_init();
  //ant_init();
  bluetooth_init();

#ifdef PRODUCT_W004
  //bmx_init();
#else
  mpu6050_init();
#endif

  // check the button status
  if (button_snapshot() & (1 << BUTTON_UP))
  {
    clock_time_t t;
    // delay 1 second
    // button up is pressed, we will set emerging flag
    motor_on(200, CLOCK_SECOND * 2);
    t = clock_seconds();
    while(clock_seconds() - t <= 1);

    if (button_snapshot() & (1 << BUTTON_UP)) 

    system_setemerging();
    motor_on(0, 0);
  }  
  
  if (!system_retail())
  {
    bluetooth_discoverable(1);
  }

#if PRODUCT_W001
  if (system_testing())
    ant_init(MODE_HRM);
#endif
  
  system_restore();

//  protocol_init();
//  protocol_start(1);
  
  process_start(&system_process, NULL);

  /*
  * This is the scheduler loop.
  */
  msp430_dco_required = 0;

  /*
    check firmware update
    */
  if (reason == 0xff)
  {
    printf("Start Upgrade\n");
    Upgrade();
    // never return if sucessfully upgrade
  }

  watchdog_start();

  while(1) {
    int r;
    do {
      /* Reset watchdog. */
      watchdog_periodic();
      r = process_run();
    } while(r > 0);

    /*
    * Idle processing.
    */
    int s = splhigh();          /* Disable interrupts. */
    /* uart1_active is for avoiding LPM3 when still sending or receiving */
    if(process_nevents() != 0) {
      splx(s);                  /* Re-enable interrupts. */
    } else {
      static unsigned long irq_energest = 0;

      /* Re-enable interrupts and go to sleep atomically. */
      ENERGEST_OFF(ENERGEST_TYPE_CPU);
      ENERGEST_ON(ENERGEST_TYPE_LPM);
      /* We only want to measure the processing done in IRQs when we
         are asleep, so we discard the processing time done when we
         were awake. */
      energest_type_set(ENERGEST_TYPE_IRQ, irq_energest);
      watchdog_stop();

      if (shutdown_mode)
      {
        system_shutdown(1); // never return
        LPM4;
      }
      
      if (msp430_dco_required)
      {
        __low_power_mode_0();
      }
      else
      {
        __low_power_mode_3();
      }

      /* We get the current processing time for interrupts that was
         done during the LPM and store it for next time around.  */
      __disable_interrupt();
      irq_energest = energest_type_time(ENERGEST_TYPE_IRQ);
      __enable_interrupt();
      watchdog_start();
      ENERGEST_OFF(ENERGEST_TYPE_LPM);
      ENERGEST_ON(ENERGEST_TYPE_CPU);
    }
  }
}
Beispiel #11
0
/*******************************************************************************
  * @函数名称	main
  * @函数说明   主函数
  * @输入参数   无
  * @输出参数   无
  * @返回参数   无
*******************************************************************************/
int main(void)
{
		uint8_t fuf=0;
		uint8_t fu_e=1;			//固件更新使能
	  uint8_t i=0;
	

		uint8_t hui[32]=
		{0x04,0x04,0xF4,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0x54,0xF4,0x04,0x04,0x00,
		0x40,0x30,0x01,0x01,0x39,0x41,0x41,0x45,0x59,0x41,0x41,0x71,0x01,0x08,0x30,0x00};/*"恵",0*/	
	
	
	
	
		SystemTick_Init();
		NVIC_Configuration();
	
	
	
	
	
		oled_control_Init();
		OLED_ON;	
	
		OLED_Init();
	
		SPI_FLASH_Init();		//SPI接口初始化
	
    
    FLASH_Unlock();			//STM32内部Flash 解锁
	
	
    //LED_Configuration();
	
	
    //配置按键
    KEY_Configuration();//按钮对应的PB5脚初始化	
		
    IAP_Init();					//即串口1初始化,但是没有串口中断程序
	
	
		buzzer_control_Init();
		coil_control_Init();
	
	
	
	
// 		OLED_Clear();
// 		OLED_ShowUnite(24,2,"if updata");
// 		OLED_ShowUnite(28,4,"press OK");		
// 	  delay_ms(500);










// 		while(i<5)
// 		{
// 			OLED_Clear();	
// 			OLED_DrawBMP(32,2,48,4,hui);
// 			OLED_ShowUnite(48,2,"  科  ");
// 			OLED_ShowUnite(32,4,"  合  技");	
// 			delay_ms(500);	
// 			
// 			OLED_Clear();		
// 			OLED_ShowUnite(32,2,"  合  技");	
// 			OLED_DrawBMP(32,4,48,6,hui);			
// 			OLED_ShowUnite(48,4,"  科  ");
// 			delay_ms(500);		
// 	
// 			i++;
// 		}
		
		
// 		OLED_Clear();	
// 		OLED_DrawBMP(32,2,48,4,hui);
// 		OLED_ShowUnite(48,2,"合科技");		
// 		delay_ms(800);
		
		
		//测试发送
// 		while(1)
// 		{
// 			Send_Byte(ACK);			//收到上位机发送的第0帧之后发送ACK命令
// 			Send_Byte(CRC16);		//接着再发送C,表示等待上位机发送数据帧
// 		}
	
    //按键是否按下
    //if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)  == 0x00)
		
		
		
		/*
		出厂时,下载程序的步骤:
					1.下载字库
					2.下载IAP
					3.下载应用程序
		
		*/
		
		


		//在下载字库时,先将FIRMWARE_UPGRADE_FLAG标志置为1,所以再下载IAP程序时会直接进入固件更新
		
		
		SPI_FLASH_Read(&fuf,FIRMWARE_UPGRADE_FLAG,1);
		if(fuf==1)
    {
			
				OLED_Clear();
				//OLED_ShowUnite(16,2,"固件更新中...");
			  OLED_ShowUnite(32,2,"to updata");		
				delay_ms(500);
  

  			//假如按键按下
        //执行IAP驱动程序更新Flash程序

        SerialPutString("\r\n======================================================================");
        SerialPutString("\r\n=              (C) COPYRIGHT 2011 Lierda                             =");
        SerialPutString("\r\n=                                                                    =");
        SerialPutString("\r\n=     In-Application Programming Application  (Version 1.0.0)        =");
        SerialPutString("\r\n=                                                                    =");
        SerialPutString("\r\n=                                   By wuguoyan                      =");
        SerialPutString("\r\n======================================================================");
        SerialPutString("\r\n\r\n");
        Main_Menu();
    }
    //否则执行用户程序
    else
    {
			/*		
			在程序里#define ApplicationAddress    0x8003000 ,*(__IO uint32_t*)ApplicationAddress)
			即取0x8003000开始到0x8003003 的4个字节的值, 因为我们的应用程序APP中设置把 中断向
			量表 放置在0x08003000 开始的位置;而中断向量表里第一个放的就是栈顶地址的值
			也就是说,这句话即通过判断栈顶地址值是否正确(是否在0x2000 0000 - 0x 2000 2000之间)
			来判断是否应用程序已经下载了,因为应用程序的启动文件刚开始就去初始化化栈空间,
			如果栈顶值对了,说应用程已经下载了启动文件的初始化也执行了;				
			*/

			
        //判断用户是否已经下载程序,因为正常情况下此地址是栈地址。
        //若没有这一句的话,即使没有下载程序也会进入而导致跑飞。
			
				//*(__IO uint32_t*)ApplicationAddress 与 __vector_table[0]是一样的
				//__vector_table[0]是应用程序栈的顶
			
				//X=*(__IO uint32_t*)ApplicationAddress
        //if (( X & 0x2FFE0000 ) == 0x20000000)			
				//X只有在0x20000000与0x2001FFFF之间时,才可能有(X&0x2FFE0000) == 0x20000000成立
			
				//即栈顶是不是在以0x20000000开始的128K的范围内,这里便是STM32的RAM区域
			
        if (( ( *(__IO uint32_t*)ApplicationAddress ) & 0x2FFE0000 ) == 0x20000000)
        {
					
// 						OLED_Clear();
// 						OLED_ShowUnite(4,2,"Execute Program");
// 						delay_ms(500);							
					
					
					
            //SerialPutString("Execute Program\r\n\n");
            //跳转至用户代码
            JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
            Jump_To_Application = (pFunction) JumpAddress;

            //初始化用户程序的堆栈指针
            __set_MSP(*(__IO uint32_t*) ApplicationAddress);
            Jump_To_Application();		//执行复位中断函数
        }
        else
        {
						OLED_Clear();
						OLED_ShowUnite(4,2,"no user Program");
						delay_ms(500);							
										
            SerialPutString("no user Program\r\n\n");
        }
    }

// 		OLED_Clear();
// 		OLED_ShowUnite(16,2,"please reboot");
// 		delay_ms(500);		
// 		
// 		SerialPutString("please reboot\r\n\n");
//     while (1)
//     {
//     }
}