OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3366|回复: 3

关于stm32f103vct6单片机IAP程序升级(数据来源串口)

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2020-12-17
在线时间
14 小时
发表于 2021-1-14 08:12:39 | 显示全部楼层 |阅读模式
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)
{  
            iap_write_appbin(FLASH_APP1_ADDR+fwaddr,FramesDataArray,DataLength);   
            DataLength = 0;
            FramesArrayData();
}
这个是BootLoader中的一段代码,程序到了if这就进不去了,不知道是什么原因,但是程序还不死机,只是进不去if

这个数组是串口接收数组
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));

这个是串口接收函数,这个数据都是可以正常过来的没有问题
void UART5_IRQHandler()
{
                //RX
    if(USART_GetITStatus(UART5, USART_IT_RXNE) == SET)
                {
                                u8 Rxd;
                                Rxd = USART_ReceiveData(UART5);
                                if(USART_RX_CNT<USART_REC_LEN)
                                {
                                                USART_RX_BUF[USART_RX_CNT]=Rxd;
                                                USART_RX_CNT++;                                                                                                      
                                }
                                ComData5.ucRxBuf[ComData5.uiRxEndIndex] = USART_ReceiveData(UART5);
                                ComData5.uiRxEndIndex++;
                                if(ComData5.uiRxEndIndex >= ComRxBufferSize)
                                {
                                                ComData5.uiRxEndIndex = 0;
                                }

                                ComData5.uiRxReadyFlag = 0;
                                ComData5.uiRxTimeOut   = 0;       
                }
                //TX
                if(USART_GetITStatus(UART5, USART_IT_TC) == SET)
                {
                                USART_ClearITPendingBit(UART5, USART_IT_TC);
                                //·¢?ííê±?í£?1·¢?í
                                if(ComData5.uiTxStartIndex == ComData5.uiTxEndIndex)
                                {
                //                     USART2->CR1 &= ~USART_Mode_Tx;  
                                                ComData5.uiTxReadyFlag = 1;
                                }
                                        //·¢?íêy?Y
                                else
                                {
                                                UART5->DR = ComData5.ucTxBuf[ComData5.uiTxStartIndex];
                                                                ComData5.uiTxStartIndex++;
                                                if(ComData5.uiTxStartIndex >= ComTxBufferSize)
                                                {
                                                                ComData5.uiTxStartIndex = 0;
                                                }
                                }  
                }
        //RX over
                if (USART_GetFlagStatus(UART5, USART_FLAG_ORE) != RESET)
    {
        (void)USART_ReceiveData(UART5);
    }
}
下面是关于rom和ram的地址分配

IROM    0X80000000    0X5000    IRAM   0X20000000    0XC00

希望大神能够帮帮忙,在这里谢谢了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

151

帖子

0

精华

高级会员

Rank: 4

积分
508
金钱
508
注册时间
2020-4-22
在线时间
241 小时
发表于 2021-1-14 13:26:12 | 显示全部楼层
楼主搞好了给我分享一份啊
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2020-12-17
在线时间
14 小时
 楼主| 发表于 2021-1-15 08:10:26 | 显示全部楼层
moranyidui 发表于 2021-1-14 13:26
楼主搞好了给我分享一份啊

行啊  只要解决就可以
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-12-3
在线时间
21 小时
发表于 2021-1-23 15:26:57 | 显示全部楼层
楼主我也遇到一样的问题请问你解决了吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 03:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表