当前位置: 首页 > news >正文

建网站挣钱吗网络推广方案

建网站挣钱吗,网络推广方案,淮北之窗,网站规划文档0 前置知识: FLASH相关内容:前往STM32补充——FLASH STM32三种烧录方式(看看就行): 1.ISP:In System Programming(在系统编程) 执行芯片厂商的 Bootloader 程序进入 ISP 模式&…

0 前置知识:

FLASH相关内容:前往STM32补充——FLASH

STM32三种烧录方式(看看就行):

1.ISP:In System Programming(在系统编程)
执行芯片厂商的 Bootloader 程序进入 ISP 模式,进入ISP 模式后,用户可选择官方提供的烧录通信接口(如:串口),并配合ISP 编程工具(如:FlyMcu)对闪存进行烧录。

2.ICP:In Circuit Programing(在线编程)
使用IDE并通过JTAG/SWD接口对闪存进行烧录。

3.IAP:In Application Programming(在应用编程)
使用用户的应用程序(也称为:Bootloader程序)对闪存进行烧录。该应用程序需要通过一种通信接口(如:IO口\USB\CAN\UART\I2C\SPI等)对闪存进行烧录(即把APP程序烧录到闪存)。IAP 通常被开发者用作远程升级的手段。


1.IAP原理介绍

1.1 程序正常运行过程:

①跳转到复位中断服务函数
②跳转到main函数
③发生中断时,会强制跳转到中断向量表
④根据中断源,跳转到对应的中断服务函数
⑤执行中断服务程序后,回到main函数原来的位置执行  

 

1.2 加入IAP后程序运行过程

①执行复位中断服务函数后,跳转到IAP程序main函数
②执行IAP过程,跳转到APP中断向量表
③跳转到APP的main函数
④发生中断时,会强制跳转到地址为0x08000000的中断向量表
⑤根据设置的中断向量表偏移量,跳转到APP对应的中断服务函数
⑥执行中断服务程序后,回到main函数原来的位置执行 


2.APP的生成步骤

  1. 设置APP程序的起始地址和存储空间大小
  2. 设置中断向量表偏移量(设置SCB->VTOR的值即可)
  3. 设置MDK编译后运行fromelf.exe,生成.bin文件(在User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于IAP更新)

注意:APP程序的起始地址可在Keil上直接设置,但中断向量表偏移量需要另外手动设置


 

2.1 设置APP程序的起始地址和存储空间大小

设置APP起始地址要注意的点:
1,APP要在BootLoader后面
2,内存不能出现重叠
3,偏移量是0x200的倍数


FLASH_APP:


SRAM_APP:


①Bootloader程序运行预留4KB SRAM
②存放APP程序预留48KB SRAM
③APP程序运行预留12KB SRAM
 

2.2 设置中断向量表偏移量 

APP存放在FLASH中的设置方法:

SCB->VTOR = FLASH_BASE | 0x10000;

 

APP存放在SRAM中的设置方法:

SCB->VTOR = SRAM_BASE | 0x1000;

2.3 设置MDK编译后运行fromelf.exe,生成.bin文件

D:\MDK5.36\ARM\ARMCC\bin\fromelf  --bin -o ..\..\Output\@L.bin  ..\..\Output\%L


3. 代码

iap模块:

iapfun jump2app;
uint16_t g_iapbuf[1024];       /* 2K字节缓存 *//*** @brief       IAP写入APP BIN* @param       appxaddr : 应用程序的起始地址* @param       appbuf   : 应用程序CODE* @param       appsize  : 应用程序大小(字节)* @retval      无*/
void iap_write_appbin(uint32_t appxaddr, uint8_t *appbuf, uint32_t appsize)
{uint16_t t;uint16_t i = 0;uint16_t temp;uint32_t fwaddr = appxaddr; /* 当前写入的地址 */uint8_t *dfu = appbuf;for (t = 0; t < appsize; t += 2){temp = (uint16_t)dfu[1] << 8;temp |= (uint16_t)dfu[0];dfu += 2;               /* 偏移2个字节(FLASH每次写入两个字节) */g_iapbuf[i++] = temp;if (i == 1024){i = 0;stmflash_write(fwaddr, g_iapbuf, 1024);fwaddr += 2048;     /* 偏移2048  16 = 2 * 8  所以要乘以2 */}}if (i){stmflash_write(fwaddr, g_iapbuf, i);  /* 将最后的一些内容字节写进去 */}
}/*** @brief       跳转到应用程序段(执行APP)* @param       appxaddr : 应用程序的起始地址* @retval      无*/
void iap_load_app(uint32_t appxaddr)
{if (((*(volatile  uint32_t *)appxaddr) & 0x2FFE0000) == 0x20000000)     /* 检查栈顶地址是否合法.可以放在内部SRAM共64KB(0x20000000) */{/* 用户代码区第二个字为程序开始地址(复位地址) */jump2app = (iapfun) * (volatile uint32_t *)(appxaddr + 4);/* 初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) */sys_msr_msp(*(volatile uint32_t *)appxaddr);/* 跳转到APP */jump2app();}
}

 

main函数:

int main(void)
{uint8_t t;uint8_t key;uint32_t oldcount = 0;      /* 老的串口接收数据值 */uint32_t applenth = 0;      /* 接收到的app代码长度 */uint8_t clearflag = 0;HAL_Init();                                 /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9);         /* 设置时钟, 72Mhz */delay_init(72);                             /* 延时初始化 */usart_init(115200);                         /* 串口初始化为115200 */led_init();                                 /* 初始化LED */lcd_init();                                 /* 初始化LCD */key_init();                                 /* 初始化按键 */lcd_show_string(30,  50, 200, 16, 16, "STM32", RED);lcd_show_string(30,  70, 200, 16, 16, "IAP TEST", RED);lcd_show_string(30,  90, 200, 16, 16, "ATOM@ALIENTEK", RED);lcd_show_string(30, 110, 200, 16, 16, "KEY_UP: Copy APP2FLASH!", RED);lcd_show_string(30, 130, 200, 16, 16, "KEY1: Run FLASH APP", RED);lcd_show_string(30, 150, 200, 16, 16, "KEY0: Run SRAM APP", RED);while (1){if (g_usart_rx_cnt){if (oldcount == g_usart_rx_cnt)   /* 新周期内,没有收到任何数据,认为本次数据接收完成 */{applenth = g_usart_rx_cnt;oldcount = 0;g_usart_rx_cnt = 0;printf("用户程序接收完成!\r\n");printf("代码长度:%dBytes\r\n", applenth);}else oldcount = g_usart_rx_cnt;}t++;delay_ms(100);if (t == 3){LED0_TOGGLE();t = 0;if (clearflag){clearflag--;if (clearflag == 0){lcd_fill(30, 190, 240, 210 + 16, WHITE);    /* 清除显示 */}}}key = key_scan(0);if (key == WKUP_PRES)   /* WKUP按下,更新固件到FLASH */{if (applenth){printf("开始更新固件...\r\n");lcd_show_string(30, 190, 200, 16, 16, "Copying APP2FLASH...", BLUE);if (((*(volatile uint32_t *)(0X20001000 + 4)) & 0xFF000000) == 0x08000000)  /* 判断是否为0X08XXXXXX */{iap_write_appbin(FLASH_APP1_ADDR, g_usart_rx_buf, applenth);            /* 更新FLASH代码 */lcd_show_string(30, 190, 200, 16, 16, "Copy APP Successed!!", BLUE);printf("固件更新完成!\r\n");}else{lcd_show_string(30, 190, 200, 16, 16, "Illegal FLASH APP!  ", BLUE);printf("非FLASH应用程序!\r\n");}}else{printf("没有可以更新的固件!\r\n");lcd_show_string(30, 190, 200, 16, 16, "No APP!", BLUE);}clearflag = 7; /* 标志更新了显示,并且设置7*300ms后清除显示 */}if (key == KEY1_PRES)   /* KEY1按键按下, 运行FLASH APP代码 */{if (((*(volatile uint32_t *)(FLASH_APP1_ADDR + 4)) & 0xFF000000) == 0x08000000) /* 判断FLASH里面是否有APP,有的话执行 */{printf("开始执行FLASH用户代码!!\r\n\r\n");delay_ms(10);iap_load_app(FLASH_APP1_ADDR);/* 执行FLASH APP代码 */}else{printf("没有可以运行的固件!\r\n");lcd_show_string(30, 190, 200, 16, 16, "No APP!", BLUE);}clearflag = 7; /* 标志更新了显示,并且设置7*300ms后清除显示 */}if (key == KEY0_PRES)   /* KEY0按下 */{printf("开始执行SRAM用户代码!!\r\n\r\n");delay_ms(10);if (((*(volatile uint32_t *)(0x20001000 + 4)) & 0xFF000000) == 0x20000000)   /* 判断是否为0X20XXXXXX */{iap_load_app(0x20001000);   /* SRAM地址 */}else{printf("非SRAM应用程序,无法执行!\r\n");lcd_show_string(30, 190, 200, 16, 16, "Illegal SRAM APP!", BLUE);}clearflag = 7; /* 标志更新了显示,并且设置7*300ms后清除显示 */}}
}

 

http://www.shuangfujiaoyu.com/news/37882.html

相关文章:

  • 大连市建设工程电子文件编辑软件搜索引擎优化策略
  • 东营市河口区建设局网站推广app用什么平台比较好
  • 做网页专题 应该关注哪些网站seo服务外包客服
  • 网站做直播seo的优化方向
  • 网站备案是域名备案还是服务器备案廊坊百度seo公司
  • 网站做轮播图的意义win7优化大师官方免费下载
  • 可以自己做装修效果图的网站黄冈网站seo
  • 深圳 网站开发公司深圳百度推广客服电话多少
  • html网站标签2021年年度关键词排名
  • 响应式网站生成发布悬赏任务的推广平台
  • 网络教育网站建设网站seo快速
  • 做网站导航菜单sem分析是什么意思
  • 免费门户网站建设百度一下百度一下你就知道
  • win7 做网站服务器windows优化大师是哪个公司的
  • 广州市财贸建设开发监理网站广告代理公司
  • 怎么搭建一个网站教程q群排名优化软件
  • b2c网站代表seo关键词挖掘工具
  • wordpress上线apache镇江网站关键字优化
  • 网站2级目录怎么做公司做网页要多少钱
  • 企业注册查询网seo全网营销的方式
  • 做 ps pr 赚钱的 网站推广产品的方法
  • 海外代购网站怎么做重庆seo教程搜索引擎优化
  • 商用图片做公司网站可以吗关键词网站排名软件
  • 杭州网站建设制作公司关键词优化排名用什么软件比较好
  • 个人网站当企业网站用百度快速优化软件
  • 建设网站怎么做网站优化课程培训
  • 贸易公司寮步网站建设哪家好杭州seo搜索引擎优化
  • 电子商城网站建议书磁力宝
  • html5建一个网站百度网站大全旧版
  • 免费做微信链接的网站泰安百度推广公司