问题:bootloader里面使用到串口时,导致app里的串口无法发生串口数据
解决方式:在跳转到APP时,取消串口外设
HAL_UART_DeInit(&huart1);//取消外设,避免APP 里用到串口时无法正常使用
取消外设放在app初始化时也没有作用,亲测必须放在跳转前取消采有作用
void Jump_to_APP(uint32_t app_addr)
{
uint32_t JumpAddress;
// printf("jump to app: %#x\r\n", FLASH_APP_ADDR);
/* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
if (((*(volatile uint32_t*)FLASH_APP_ADDR) & 0x2FFE0000 ) == 0x20000000)// 上面的值是取出FLASH_APP_ADDR里面的值来
{
__set_PRIMASK(1); //关总中断 0打开总中断
JumpAddress = *(volatile uint32_t*) (FLASH_APP_ADDR + 4);
Jump_To_Application = (pFunction) JumpAddress;
printf("jump %#x success \r\n",FLASH_APP_ADDR);
HAL_UART_DeInit(&huart1);//取消外设,避免APP 里用到串口时无法正常使用
__set_MSP(*(volatile uint32_t*) FLASH_APP_ADDR); //设置SP指针,复位指针
Jump_To_Application(); //开始跳转
}
else
{
printf( "erorr [0x%08x]\r\n",(*(volatile uint32_t*)FLASH_APP_ADDR) );
}
}