地址是没有错的,[C] 纯文本查看 复制代码 #include "stm32f10x.h" // Device header
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "stmflash.h"
#include "iap.h"
#include "OLED.h"
/************************************************
ALIENTEK战舰STM32开发板实验47
IAP实验 Bootloader V1.0 代码
技术支持:[url]www.openedv.com[/url]
淘宝店铺:[url]http://eboard.taobao.com[/url]
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司
作者:正点原子 @ALIENTEK
************************************************/
uint8_t KeyNum;//定义一个全局变量
int main(void)
{
for(long int i=0;i<1000000;i++)
__NOP();
//char Serial_RxPacket[100];
//#define USART_REC_LEN 10*1024 //定义最大接收字节数 55K
Init_Key();
KeyNum = key_GetNum();
// u8 key;
u16 oldcount=0; //老的串口接收数据值
u16 applenth=0; //接收到的app代码长度
// u8 clearflag=0;
u8 flagtest=0;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;//先定义结构体的类型和名称
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//GPIO_ResetBits(GPIOA, GPIO_Pin_0);//给0引脚置0灯亮
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
Uart_Init(); //串口初始化为115200
delay_init(); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
//KEY_Init(); //初始化按键
//显示提示信息
while(1)
{
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);
flagtest=0;
}
else
oldcount=USART_RX_CNT;
}
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0) //按键按下
{
if(applenth&&flagtest==0)
{
flagtest=1;
printf("开始更新固件...\r\n");
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码
printf("固件更新完成!\r\n");
GPIO_SetBits(GPIOA, GPIO_Pin_0);//给0引脚置0灯亮
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
printf("开始执行FLASH用户代码!!\r\n");
iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
GPIO_ResetBits(GPIOA, GPIO_Pin_1);//给1引脚置0灯亮
delay_ms(1000);
GPIO_SetBits(GPIOA, GPIO_Pin_1);//给1引脚置0灯亮
}
}else
{
printf("非FLASH应用程序!\r\n");
}
}
else
{
printf("没有可以更新的固件!\r\n");
}
}
// else
//{
//flagtest=0;
else
{
//printf("非FLASH应用程序,无法执行!\r\n");
}
// }
}
} |