用107芯片的串口UART4进行串口程序升级,以前用串口2,串口1进行升级都成功过,现在用串口4出现各种问题:问题现象1:引导程序在进行地址判断时候,不满足条件
就是这一句
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)
//判断是否为0X08XXXXXX. { iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码 }else { Delay_ms(100); // 。。。。。。。。。。。省略 } 进不到if里面去,进入else中。可以确认的一点就是,各项设置都正确,包括这个地址设置,初步解决方法:在APP程序中添加以下语句RCC->APB1RSTR = 0x00000000;//复位结束
RCC->APB2RSTR = 0x00000000;
RCC->AHBENR = 0x00000014; //睡眠模式闪存和SRAM时钟使能.其他关闭.
RCC->APB2ENR = 0x00000000; //外设时钟关闭.
RCC->APB1ENR = 0x00000000;
RCC->CR |= 0x00000001; //使能内部高速时钟HSION
RCC->CFGR &= 0xF8FF0000;
//复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
RCC->CR &= 0xFEF6FFFF; //复位HSEON,CSSON,PLLON
RCC->CR &= 0xFFFBFFFF; //复位HSEBYP
RCC->CFGR &= 0xFF80FFFF;//复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
RCC->CIR = 0x00000000; //关闭所有中断
重新烧写引导程序和IAP程序,发现就可以跳转了,满足这个判断条件了:if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)
暂时不知道是什么原因,但是发现正点原子例程中,寄存器版本有上述寄存器的操作,库函数版本中却没有,不知道这个如何解释,我出现的这个问题
问题2:可以正常跳转后,我发现我的定时器2和定时器3没有定时,就是不工作,
定时器的打开和操作,都是会用的,从没出过问题,就是不知道为什么跳转后,IAP程序定时器不工作,时钟也使能了,相关的配置也配置了
问题3 如果源程序不改变以下2个地方,程序是可以正常运行的,说明程序没有问题:
file:///C:Documents and SettingsAdministratorApplication DataTencentUsers359216499QQWinTempRichOleC7{5HRD%B@4U({6HPX_J2I8.pngfile:///C:Documents and SettingsAdministratorApplication DataTencentUsers359216499QQWinTempRichOleC7{5HRD%B@4U({6HPX_J2I8.pngfile:///C:Documents and SettingsAdministratorApplication DataTencentUsers359216499QQWinTempRichOleC7{5HRD%B@4U({6HPX_J2I8.png
SystemInit(); MY_NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000); __enable_irq();
现在不知道为什么了,有谁能解答一下么?
一周热门 更多>