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

昊源建设监理有限公司网站做购物网站的数据库

昊源建设监理有限公司网站,做购物网站的数据库,政和网站建设,建筑人才网官网挂证目录 实现目标Flash划分Bootloader串口接收关键代码固件烧录和跳转关键代码 APP实验潜在问题 实现目标 Bootloader接收串口发送的固件,通过按键触发烧录到Flash里通过按键触发BootLoader程序跳转到APP中 Flash划分 00扇区到31扇区 0x0000_0000 到 0x0001_FFFF &a…

目录

  • 实现目标
  • Flash划分
  • Bootloader
      • 串口接收关键代码
      • 固件烧录和跳转关键代码
  • APP
  • 实验
  • 潜在问题

实现目标

  • Bootloader接收串口发送的固件,通过按键触发烧录到Flash里
  • 通过按键触发BootLoader程序跳转到APP中

Flash划分

  • 00扇区到31扇区 0x0000_0000 到 0x0001_FFFF (256KB)BootLoader
  • 32扇区到63扇区 0x0002_0000 到 0x0003_FFFF (256KB)APP
    注意:APP中63扇区末尾不可写,这里代码量不大不做处理。

Bootloader

串口接收关键代码

定义128KB的固件缓存数组,通过UART + DMA接受固件到数组之中。


/* DMAC */
#define DMA_UNIT                        (M4_DMA1)
#define DMA_CH                          (DmaCh0)
#define DMA_TRG_SEL                     (EVT_USART1_RI)/* USART channel definition */
#define USART_CH                        (M4_USART1)/* USART baudrate definition */
#define USART_BAUDRATE                  (38400ul)/* USART RX Port/Pin definition */
#define USART_RX_PORT                   (PortA)
#define USART_RX_PIN                    (Pin03)
#define USART_RX_FUNC                   (Func_Usart1_Rx)/* USART TX Port/Pin definition */
#define USART_TX_PORT                   (PortA)
#define USART_TX_PIN                    (Pin05)
#define USART_TX_FUNC                   (Func_Usart1_Tx)/* USART interrupt  */
#define USART_EI_NUM                    (INT_USART1_EI)
#define USART_EI_IRQn                   (Int001_IRQn)uint8_t recv_buf[128*1024] = {0};	void BSP_DMA_Init(void)
{stc_dma_config_t stcDmaInit;/* Enable peripheral clock */PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_DMA1 | PWC_FCG0_PERIPH_DMA2,Enable);/* Enable DMA. */DMA_Cmd(DMA_UNIT,Enable);/* Initialize DMA. */MEM_ZERO_STRUCT(stcDmaInit);stcDmaInit.u16BlockSize = 1u; 		/* 1 block */stcDmaInit.u32SrcAddr = ((uint32_t)(&USART_CH->DR)+2ul); 	/* Set source address. */stcDmaInit.u32DesAddr = (uint32_t)(recv_buf);     		/* Set destination address. */stcDmaInit.stcDmaChCfg.enSrcInc = AddressFix;  /* Set source address mode. */stcDmaInit.stcDmaChCfg.enDesInc = AddressIncrease;  /* Set destination address mode. */stcDmaInit.stcDmaChCfg.enIntEn = Disable;       /* Enable interrupt. */stcDmaInit.stcDmaChCfg.enTrnWidth = Dma8Bit;   /* Set data width 8bit. */DMA_InitChannel(DMA_UNIT, DMA_CH, &stcDmaInit);/* Enable the specified DMA channel. */DMA_ChannelCmd(DMA_UNIT, DMA_CH, Enable);/* Clear DMA flag. */DMA_ClearIrqFlag(DMA_UNIT, DMA_CH, TrnCpltIrq);/* Enable peripheral circuit trigger function. */PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_AOS,Enable);/* Set DMA trigger source. */DMA_SetTriggerSrc(DMA_UNIT, DMA_CH, DMA_TRG_SEL);}void BSP_UART_Init(void)
{const stc_usart_uart_init_t stcInitCfg = {UsartIntClkCkNoOutput,UsartClkDiv_16,UsartDataBits8,UsartDataLsbFirst,UsartOneStopBit,UsartParityNone,UsartSampleBit8,UsartStartBitFallEdge,UsartRtsEnable,};PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_USART1, Enable);/* Initialize USART IO */PORT_SetFunc(USART_RX_PORT, USART_RX_PIN, USART_RX_FUNC, Disable);PORT_SetFunc(USART_TX_PORT, USART_TX_PIN, USART_TX_FUNC, Disable);/* Initialize USART */uint8_t enRet = USART_UART_Init(USART_CH, &stcInitCfg);if (enRet != Ok){while (1){}}else{}/* Set baudrate */enRet = USART_SetBaudrate(USART_CH, USART_BAUDRATE);if (enRet != Ok){while (1){}}else{}/*Enable TX && RX && RX interrupt function*/USART_FuncCmd(USART_CH, UsartTx, Enable);USART_FuncCmd(USART_CH, UsartRx, Enable);	
}

固件烧录和跳转关键代码

将固件缓存数组中的数据烧录到Flash中去


#define FLASH_SECTOR_START_ADDR 0x00020000while(1){if(Get_KEY1() == Reset)	//按下第一个按键烧录程序{EFM_Unlock();EFM_FlashCmd(Enable);while(Set != EFM_GetFlagStatus(EFM_FLAG_RDY));uint8_t sector_num = sizeof(recv_buf)/0x2000;		//计算扇区数量,一个扇区的存储空间是0x2000=8KBfor(uint8_t i = 0; i < sector_num; i++)			//遍历所有扇区{EFM_SectorErase(FLASH_SECTOR_START_ADDR + 0x2000*i);	//扇区擦除for(uint32_t j = 0; j < 0x2000 / 4; j++)	//遍历一个扇区中的所有字		{			EFM_SingleProgram(FLASH_SECTOR_START_ADDR + 0x2000*i + j*4,	//写入数据*((uint32_t *)(recv_buf + 0x2000*i) + j));}}EFM_Lock();LED0_TOGGLE();	//黄灯慢闪vTaskDelay(200);}if(Get_KEY2() == Reset)	//按下第一个按键跳转{EFM_InstructionCacheCmd(Disable);JumpAddress = *(__IO uint32_t*) (0x20000 + 4);Jump_To_Application = (pFunction) JumpAddress;__set_MSP(*(__IO uint32_t*) 0x20000);Jump_To_Application();}LED0_TOGGLE();	//黄灯快闪vTaskDelay(100);}

APP

APP代码要注意两件事情

  • 修改Flash内存分布
  • 修改SCB-VTOR

在这里插入图片描述
在这里插入图片描述
APP中只有一个蓝灯闪烁的程序

		LED1_TOGGLE();	//蓝灯闪烁vTaskDelay(100);

APP代码要先通过Keil fromelf.exe生成bin,再通过HexEdit转换为可发送的固件字符,
在这里插入图片描述
在这里插入图片描述

实验

1,BootLoader启动,黄灯快闪
2,通过串口助手将固件发送到固件缓存数组中
在这里插入图片描述
3,等待发送完成之后,按下按键,使得存放在ram中的固件缓存数组烧录到位于0x20000的Flash中,此时黄灯慢闪一次
4,等待黄灯恢复快闪,按下按键,跳转到APP中
5,蓝灯快闪,APP运行

潜在问题

只考虑测试固件烧录和跳转目的,上述测试没有问题。但是考虑到实际实现时候,以下问题都要解决:
1,由于DMA目的地指针没有复位手段,UART只能接收一次固件
2,UART接收到的固件未经校验完整性
3,单片机内部开辟128KB的完整固件缓存数组较为奢侈
4,烧录固件过程中断电,设备将会变砖


文章转载自:

http://q6iIasAU.pqnps.cn
http://jruQcVSX.pqnps.cn
http://bWHAWEvO.pqnps.cn
http://kIBpAvcV.pqnps.cn
http://L3MPIuFe.pqnps.cn
http://ScOR9Atq.pqnps.cn
http://7MpP55u0.pqnps.cn
http://6Fn36mfK.pqnps.cn
http://nonbw9hW.pqnps.cn
http://FKObK8RV.pqnps.cn
http://ik0OOPa7.pqnps.cn
http://sURMpg7p.pqnps.cn
http://5H5rYjxz.pqnps.cn
http://lLqOHQcB.pqnps.cn
http://d1mQGLgJ.pqnps.cn
http://UEprbjMp.pqnps.cn
http://Nea4Hrja.pqnps.cn
http://RMkbcW73.pqnps.cn
http://I0JHm8gn.pqnps.cn
http://ef5gR1I1.pqnps.cn
http://GAg84R7T.pqnps.cn
http://GAskW4YR.pqnps.cn
http://5ox1B2pM.pqnps.cn
http://fJDFotAM.pqnps.cn
http://byRpPJFN.pqnps.cn
http://vFjiSaeM.pqnps.cn
http://Ci1Fn1PW.pqnps.cn
http://2e1mRB9A.pqnps.cn
http://AWreNRI4.pqnps.cn
http://cs4HK1YA.pqnps.cn
http://www.dtcms.com/wzjs/692613.html

相关文章:

  • 大连专业制作网站个人简历模板表格下载
  • 专门做中式装修的网站宁波seo网站
  • 网站建设框架模板物联网平台中心
  • iis6网站域名网红营销的优势在哪里
  • 静态单页网站wordpress做初中物理题目的网站
  • 辽宁省住房与城乡建设厅网站申请个人网站多少钱
  • 动漫网站的建设目标衡阳网站建设 千度网络
  • 网站建设 网站内容 采集wordpress更改数据库
  • 网站建设销售话术文本格式可以直接进入网站的正能量网站
  • 宋庄网站建设手游推广平台有哪些
  • 做搞笑图片的网站棋牌类网站是用游戏方式做的吗
  • 为什么要做营销型网站做网站做百度竞价赚钱
  • 济南网站开发公司网站优化总结报告
  • 外汇交易平台网站建设关键词优化排名详细步骤
  • 学做预算有网站吗软件外包公司创业
  • 邯郸网站设计费用代码添加在网站的什么位置
  • wordpress 做网站龙岩网站优化费用
  • 海门建设厅网站江北网站建设的技术
  • 一个做特卖的网站中国建设第一平台网站
  • 阿里云需要网站建设方案书北京搬家公司24小时服务电话
  • 怎么建个人网站wordpress如何改页面模板
  • 甘肃网站建设专业定制域名怎么申请
  • 钦州网站建设公司微信公众平台管理系统
  • 做母婴用品的网站有哪些建设网站怎样分配给用户空间
  • 四川专业网站建设推广WordPress到底有什么好
  • 网站建设行业前景如何口红网络营销策划方案
  • 建设银行客户端网站wordpress棋牌模板
  • 代账公司网站模板卖农产品最好的平台
  • 基础设施建设网站2023年房地产彻底结束
  • 成都网站建设及推广图像处理与网站开发