发新帖我要提问
123
返回列表
打印
[应用相关]

关于STM32 IAP

[复制链接]
楼主: susceptibility
手机看帖
扫描二维码
随时随地手机跟帖
41
monitoring| | 2020-5-17 11:26 | 只看该作者 回帖奖励 |倒序浏览
毕竟是用户程序,串口1可能要参与别的通信,,,所以自己加了一个判断是否是要更新程序的数据,,,是的话才往Flash里面写

自己的源码

链接:http://pan.baidu.com/s/1bJtc78密码:nobu

使用特权

评论回复
42
monitoring| | 2020-5-17 11:27 | 只看该作者
这两天发现了自己程序的Bug

1,如果用户程序主函数加入延时,那么程序就来不及读出然后写到Flash里面,串口却不停的往环形队列里面写,从而造成环形队列溢出....

再者如果写入的时候,设置的串口助手的波特率太快,,,,同样也会造成环形队列溢出(就是往环形队列写的太快了)....

自己把写Flash的程序放在了定时器里面,50Us进入一次的定时器,看着网上说往Flash写一个字节大约16Us,,,,加上其余的程序整体应该不会超过50Us

使用特权

评论回复
43
monitoring| | 2020-5-17 11:28 | 只看该作者
如果有溢出程序不在往环形队列里面写了
voidUSART1_IRQHandler(void)//串口1中断服务程序
{
u8 Res;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res=USART_ReceiveData(USART1);//读取接收到的数据
if(Overflow==0)

{
if(PutData(&Res,1) == -1)

{

Overflow=1;

}

}

Usart1RecCnt++;

}

}

使用特权

评论回复
44
monitoring| | 2020-5-17 11:29 | 只看该作者
最后接收完如果判断溢出过,直接复位重启,复位重启更方便直接...

if(Usart1Flage ==1)//串口1接收完成
{

addr2=FLASH_APP2_ADDR;

Usart1Flage=0;if(Overflow==1)//如果中途溢出了
{

printf("程序中途溢出,准备复位重启!!\r\n");

Reset_MCU();//复位重启CPU
}

使用特权

评论回复
45
monitoring| | 2020-5-17 11:30 | 只看该作者
2,如果写了一些后,突然因为某些原因停止了写入,,,,,本想在程序中观察末尾有什么固定的数据没有,,,,或者自己最后加一些标志位

但是这个现在程序好像能判断出来....但是自己一直没有明白程序为什么可以判断出来............应该判断不出来的......

后来一想现在反正是自己去更新程序,真不行可以直接烧,,,,就先放一放,,,,

使用特权

评论回复
46
monitoring| | 2020-5-17 11:30 | 只看该作者
更改后的

链接:http://pan.baidu.com/s/1slnWFVJ密码:mts7

使用特权

评论回复
47
monitoring| | 2020-5-17 11:31 | 只看该作者

作者:杨奉武
链接:https://www.jianshu.com/p/8eb8465d5dee
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用特权

评论回复
48
henglin| | 2020-5-24 22:44 | 只看该作者

使用特权

评论回复
49
磨砂| | 2020-6-5 16:41 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
50
晓伍| | 2020-6-5 16:41 | 只看该作者
这也太有文采了

使用特权

评论回复
51
八层楼| | 2020-6-5 16:41 | 只看该作者
内容很不错啊

使用特权

评论回复
52
观海| | 2020-6-5 16:42 | 只看该作者
楼主辛苦了

使用特权

评论回复
53
guanjiaer| | 2020-6-5 16:42 | 只看该作者
非常不错 很有用

使用特权

评论回复
54
5574293| | 2020-7-1 15:29 | 只看该作者
码住

使用特权

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

本版积分规则