u32 cnt;
u8 cntflag;
int main(void)
{
u8 t;
u8 key;
u16 oldcount=0; //??????????????????
u16 applenth=0; //????????app?ú???¤??
u8 clearflag=0;
uart_init(256000); //????????????256000
delay_init(); //???±??????
LCD_Init();
LED_Init(); //????????LED??????????????
KEY_Init(); //°??ü??????
POINT_COLOR=RED;//?è??×??????ì??
LCD_ShowString(60,50,200,16,16,"Warship STM32");
LCD_ShowString(60,70,200,16,16,"IAP TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2012/9/24");
LCD_ShowString(60,130,200,16,16,"WK_UP:Copy APP2FLASH");
LCD_ShowString(60,150,200,16,16,"KEY1:Erase SRAM APP");
LCD_ShowString(60,170,200,16,16,"KEY0:Run SRAM APP");
LCD_ShowString(60,190,200,16,16,"KEY2:Run FLASH APP");
POINT_COLOR=BLUE;
//?????á??????
POINT_COLOR=BLUE;//?è??×?????????
while(1)
{
if(cntflag==0)
{
cnt++;
}
cnt++;
if(USART_RX_CNT)
{
if(oldcount==USART_RX_CNT)//????????,????????????????,????±????????????ê??.
{
applenth=USART_RX_CNT;
oldcount=0;
USART_RX_CNT=0;
printf("???§???ò?????ê??!\r\n");
printf("?ú???¤??:%dBytes\r\n",applenth);
}else oldcount=USART_RX_CNT;
}
t++;
delay_ms(10);
if(t==30)
{
LED0=!LED0;
t=0;
if(clearflag)
{
clearflag--;
if(clearflag==0)LCD_Fill(60,210,240,210+16,WHITE);//????????
}
}
key=KEY_Scan(0);
if(key==KEY_UP)
{
if(applenth)
{
printf("?????ü??????...\r\n");
LCD_ShowString(60,210,200,16,16,"Copying APP2FLASH...");
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//??????·???0X08XXXXXX.
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//?ü??FLASH?ú??
delay_ms(100);
LCD_ShowString(60,210,200,16,16,"Copy APP Successed!!");
printf("?????ü???ê??!\r\n");
}else
{
LCD_ShowString(60,210,200,16,16,"Illegal FLASH APP! ");
printf("·?FLASH???????ò!\r\n");
}
}else
{
printf("?????????ü????????!\r\n");
LCD_ShowString(60,210,200,16,16,"No APP!");
}
clearflag=7;//±ê???ü????????,?????è??7*300ms?ó????????
}
if(key==KEY_DOWN)
{
if(applenth)
{
printf("?????????ê??!\r\n");
LCD_ShowString(60,210,200,16,16,"APP Erase Successed!");
applenth=0;
}else
{
printf("??????????????????!\r\n");
LCD_ShowString(60,210,200,16,16,"No APP!");
}
clearflag=7;//±ê???ü????????,?????è??7*300ms?ó????????
}
if(key==KEY_LEFT)
{
printf("????????FLASH???§?ú??!!\r\n");
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//??????·???0X08XXXXXX.
{
iap_load_app(FLASH_APP1_ADDR);//????FLASH APP?ú??
}else
{
printf("·?FLASH???????ò,??·¨????!\r\n");
LCD_ShowString(60,210,200,16,16,"Illegal FLASH APP!");
}
clearflag=7;//±ê???ü????????,?????è??7*300ms?ó????????
}
if(key==KEY_RIGHT)
{
printf("????????SRAM???§?ú??!!\r\n");
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x20000000)//??????·???0X20XXXXXX.
{
iap_load_app(0X20001000);//SRAM???·
}else
{
printf("·?SRAM???????ò,??·¨????!\r\n");
LCD_ShowString(60,210,200,16,16,"Illegal SRAM APP!");
}
clearflag=7;//±ê???ü????????,?????è??7*300ms?ó????????
}
if(cnt==1000)
{
cntflag = 1;
printf("????????FLASH???§?ú??!!\r\n");
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//??????·???0X08XXXXXX.
{
iap_load_app(FLASH_APP1_ADDR);//????FLASH APP?ú??
}else
{
printf("·?FLASH???????ò,??·¨????!\r\n");
LCD_ShowString(60,210,200,16,16,"Illegal FLASH APP!");
}
clearflag=7;//±ê???ü????????,?????è??7*300ms?ó????????
}
}
}
iap实验的一个疑问
我在main函数里面while循环最后加了一个cnt的判断,当cnt自增到1000就执行和左键一样的操作,就是实现从iap到app的跳转,但是奇怪的是程序貌似每隔20秒左右就从iap跳到app,然后在跳到iap,一直反反复复,我的代码不是应该和按左键效果一样吗?
|