[应用相关] 关于STM32 IAP

[复制链接]
 楼主| sensitivity 发表于 2020-7-24 20:29 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:30 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:30 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:31 | 显示全部楼层
假设修改了程序了,再升级
941395f1ad487d7a24.png
 楼主| sensitivity 发表于 2020-7-24 20:31 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:32 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:33 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:34 | 显示全部楼层
您再升级就再升级把!!

再升级
983585f1ad5168e5c5.png
 楼主| sensitivity 发表于 2020-7-24 20:35 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:35 | 显示全部楼层
 楼主| sensitivity 发表于 2020-7-24 20:36 | 显示全部楼层
不要老是升级哈!!!玩坏了Flash可就不好玩了

自己用的F103RBT6单片机的RAM只有

5000 也就是20480个字节,,
 楼主| sensitivity 发表于 2020-7-24 20:36 | 显示全部楼层
但是自己的程序已经超过了这个字节数
662825f1ad5c737923.png
所以自己就不能先定义一个很大的数组然后然后把程序先存在里面了,
 楼主| sensitivity 发表于 2020-7-24 20:37 | 显示全部楼层
列如很多都是:

u8 USART_RX_BUF[USART_REC_LEN]  __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20001000.//把数据固定的存在以0X20001000为起始地址的RAM里面
 楼主| sensitivity 发表于 2020-7-24 20:37 | 显示全部楼层
自己呢就是用的环形队列一边接收,一边写入,,,关于环形队列可以看我的环形队列的**,,,

http://www.cnblogs.com/yangfengwu/p/6822984.html
 楼主| sensitivity 发表于 2020-7-24 20:38 | 显示全部楼层
就再说一下自己的程序的一些地方

串口接收的

  1. voidUSART1_IRQHandler(void)//串口1中断服务程序{

  2. u8 Res;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾){

  3. Res=USART_ReceiveData(USART1);//读取接收到的数据PutData(&Res,1);//把数据存入队列Usart1RecCnt ++;//数据个数}

  4. }
 楼主| sensitivity 发表于 2020-7-24 20:39 | 显示全部楼层
用的系统定时器中断来检测的串口空闲,判断接没接收到一条完整的数据--方法呢是看到人家的一种方法,感觉比自己以前的好,所以直接拿过来用了
 楼主| sensitivity 发表于 2020-7-24 20:41 | 显示全部楼层
关于单片机空闲中断可以看一下自己以前的

http://www.cnblogs.com/yangfengwu/p/6746403.html
 楼主| sensitivity 发表于 2020-7-24 20:41 | 显示全部楼层
/*系统定时器中断*/voidSysTick_Handler(void)

{

SysTickCnt++;

SysTickCnt1++;

SysTickCnt2++;if(SysTickCnt1>=10)//每隔10毫秒检测一次

{

SysTickCnt1=0;if(Usart1RecCnt)//如果接收到数据了

{if(IdleCnt ==Usart1RecCnt)//10ms时间数据没了变化

{

Usart1RecCntCopy=Usart1RecCnt;//拷贝数据个数

Usart1RecCnt=0;//清零数据个数

IdleCnt=0;//清零

Usart1Flage=1;//接收到一条数据//rbDelete(&pRb);测试的时候销毁//rbCreate(&pRb,ReceBuff,USART_REC_LEN);//创建接收环形队列}else{

IdleCnt=Usart1RecCnt;

}

}

}

}
 楼主| sensitivity 发表于 2020-7-24 20:42 | 显示全部楼层
我的IAP的接收的数据往Flash里面写和用户程序的往Flash里面写有一点不同,其实用户程序的往Flash里面写的程序是后期的改进...
 楼主| sensitivity 发表于 2020-7-24 20:42 | 显示全部楼层
先看我的IAP的

  1. if(rbCanRead(&pRb)>1)//如果环形队列里面的数据个数大于1

  2. {

  3. rbRead(&pRb, &ReadDat,2);//读取两个数据ReadDat16 = (u16)ReadDat[1]<<8;

  4. ReadDat16= ReadDat16|ReadDat[0];

  5. STMFLASH_Write(addr2,&ReadDat16,1);

  6. addr2+=2;

  7. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
快速回复 在线客服 返回列表 返回顶部