STM32L476 IAP跳转到APP之后串口无法输出

2019-07-14 15:09发布

大家好!我最近在做STM32L476的IAP 功能,目前已经实现从Bootloader到APP的跳转。但是出现的问题是,在Bootloader中使用到了串口1,跳转到APP的时候串口1无法输出,但是外部中断、定时器中断和GPIOB都正常工作。我查了huart1.gState  状态为HAL_UART_ERROR_NONE,告诉我么有错误。
我想请教下哪位大神遇到过类似问题?问题卡在了if(huart->gState == HAL_UART_STATE_READY)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
zhouxk
1楼-- · 2019-07-14 19:30
首先你的APP程序在没有偏移地址的时候,必须能够单独正常工作。
加上偏移地址重新编译后的程序,才能下载到APP存储区。
中断向量重定向,所有外设重新初始化。
peternie
2楼-- · 2019-07-14 19:33
APP跳转后,中断是否有重新初始化?
yysdywerw
3楼-- · 2019-07-14 23:51
TOPCB 发表于 2018-12-18 16:50
本帖最后由 安 于 2018-2-11 10:56 编辑

重新初始化串口试一下。看样子像是串口没有初始化。  HAL_UART_STATE_READY             = 0x20U,    /*!< Peripheral Initialized and ready for use Value is allowed for gState and RxState */

回复:安: 我的串口已经进行过了初始化,APP中的代码如下:
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  MX_UART4_Init();
、、-------------------------------------------
void MX_USART1_UART_Init(void)
{
HAL_UART_MspDeInit(&huart1);       
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
//  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
//  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
//  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
       
        HAL_UART_MspInit(&huart1);       
yysdywerw
4楼-- · 2019-07-15 04:37
回复:toofree我的APP能够独立运行,这个可以确定。而且我这里的现象比较奇怪,每次重新烧写一遍APP,都能够运行一次APP,一旦关闭电源,运行一次Bootloader之后,APP就不能再串口输出 了。现象看起来像是Bootloader占用了Uart没有释放。
另外我的偏移地址加上了并且重新编译过了

中断向量也已经重新定向:SCB->VTOR = (uint32_t)(0x08080000);
外设初始化与独立运行时相同。
yysdywerw
5楼-- · 2019-07-15 07:20
 精彩回答 2  元偷偷看……
TOPCB
6楼-- · 2019-07-15 11:08
从huart->gState == HAL_UART_STATE_READY这里分析,应该是串口没有初始化准备好,发生这种情况以后,建议再重新初始化一次试试。再确定一下huart->gState的值是多少。

一周热门 更多>