打印
[应用相关]

关于STM32 IAP

[复制链接]
楼主: sensitivity
手机看帖
扫描二维码
随时随地手机跟帖
21
sensitivity|  楼主 | 2020-7-24 20:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
sensitivity|  楼主 | 2020-7-24 20:30 | 只看该作者

使用特权

评论回复
23
sensitivity|  楼主 | 2020-7-24 20:30 | 只看该作者

使用特权

评论回复
24
sensitivity|  楼主 | 2020-7-24 20:31 | 只看该作者
假设修改了程序了,再升级

使用特权

评论回复
25
sensitivity|  楼主 | 2020-7-24 20:31 | 只看该作者

使用特权

评论回复
26
sensitivity|  楼主 | 2020-7-24 20:32 | 只看该作者

使用特权

评论回复
27
sensitivity|  楼主 | 2020-7-24 20:33 | 只看该作者

使用特权

评论回复
28
sensitivity|  楼主 | 2020-7-24 20:34 | 只看该作者
您再升级就再升级把!!

再升级

使用特权

评论回复
29
sensitivity|  楼主 | 2020-7-24 20:35 | 只看该作者

使用特权

评论回复
30
sensitivity|  楼主 | 2020-7-24 20:35 | 只看该作者

使用特权

评论回复
31
sensitivity|  楼主 | 2020-7-24 20:36 | 只看该作者
不要老是升级哈!!!玩坏了Flash可就不好玩了

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

5000 也就是20480个字节,,

使用特权

评论回复
32
sensitivity|  楼主 | 2020-7-24 20:36 | 只看该作者
但是自己的程序已经超过了这个字节数

所以自己就不能先定义一个很大的数组然后然后把程序先存在里面了,

使用特权

评论回复
33
sensitivity|  楼主 | 2020-7-24 20:37 | 只看该作者
列如很多都是:

u8 USART_RX_BUF[USART_REC_LEN]  __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20001000.//把数据固定的存在以0X20001000为起始地址的RAM里面

使用特权

评论回复
34
sensitivity|  楼主 | 2020-7-24 20:37 | 只看该作者
自己呢就是用的环形队列一边接收,一边写入,,,关于环形队列可以看我的环形队列的**,,,

http://www.cnblogs.com/yangfengwu/p/6822984.html

使用特权

评论回复
35
sensitivity|  楼主 | 2020-7-24 20:38 | 只看该作者
就再说一下自己的程序的一些地方

串口接收的

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

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

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

}

使用特权

评论回复
36
sensitivity|  楼主 | 2020-7-24 20:39 | 只看该作者
用的系统定时器中断来检测的串口空闲,判断接没接收到一条完整的数据--方法呢是看到人家的一种方法,感觉比自己以前的好,所以直接拿过来用了

使用特权

评论回复
37
sensitivity|  楼主 | 2020-7-24 20:41 | 只看该作者
关于单片机空闲中断可以看一下自己以前的

http://www.cnblogs.com/yangfengwu/p/6746403.html

使用特权

评论回复
38
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;

}

}

}

}

使用特权

评论回复
39
sensitivity|  楼主 | 2020-7-24 20:42 | 只看该作者
我的IAP的接收的数据往Flash里面写和用户程序的往Flash里面写有一点不同,其实用户程序的往Flash里面写的程序是后期的改进...

使用特权

评论回复
40
sensitivity|  楼主 | 2020-7-24 20:42 | 只看该作者
先看我的IAP的

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

{

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

ReadDat16= ReadDat16|ReadDat[0];

STMFLASH_Write(addr2,&ReadDat16,1);

addr2+=2;

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则