完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好!我最近在做STM32L476的IAP 功能,目前已经实现从Bootloader到APP的跳转。但是出现的问题是,在Bootloader中使用到了串口1,跳转到APP的时候串口1无法输出,但是外部中断、定时器中断和GPIOB都正常工作。我查了huart1.gState 状态为HAL_UART_ERROR_NONE,告诉我么有错误。
我想请教下哪位大神遇到过类似问题?问题卡在了if(huart->gState == HAL_UART_STATE_READY) |
|
相关推荐
11个回答
|
|
本帖最后由 安 于 2018-2-11 10:56 编辑
重新初始化串口试一下。看样子像是串口没有初始化。 HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use Value is allowed for gState and RxState */ |
|
|
|
|
|
|
|
APP跳转后,中断是否有重新初始化?
|
|
|
|
TOPCB 发表于 2018-12-18 16:50 回复:安: 我的串口已经进行过了初始化,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); |
|
|
|
回复:toofree我的APP能够独立运行,这个可以确定。而且我这里的现象比较奇怪,每次重新烧写一遍APP,都能够运行一次APP,一旦关闭电源,运行一次Bootloader之后,APP就不能再串口输出 了。现象看起来像是Bootloader占用了Uart没有释放。
另外我的偏移地址加上了并且重新编译过了 中断向量也已经重新定向:SCB->VTOR = (uint32_t)(0x08080000); 外设初始化与独立运行时相同。 |
|
|
|
回复:wolfgang2015
APP跳转之后,所有外设与中断都重新进行了初始化。 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_USART1_UART_Init(); MX_UART4_Init(); MX_I2C1_Init(); MX_SPI1_Init(); MX_TIM2_Init(); // /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim2); UartGsmReceieveInit(); |
|
|
|
从huart->gState == HAL_UART_STATE_READY这里分析,应该是串口没有初始化准备好,发生这种情况以后,建议再重新初始化一次试试。再确定一下huart->gState的值是多少。
|
|
|
|
TOPCB 发表于 2018-12-18 18:06 谢谢你的提醒,我在代码里面直接重复了一句,初始化的就能用了,不清楚原理,但是目前就先这样用,mark一下,以后有时间回来好好研究依一下。 MX_USART1_UART_Init(); MX_UART4_Init(); printf("This is APPrn"); |
|
|
|
本帖最后由 PaulRambo 于 2018-2-11 15:22 编辑
感谢各位的回复!等我整理好我最近的IAP的资料,我打算开个帖子分享给论坛的各位。下面是我代码的输出,循环在APP与Bootloader之间跳转,能够启动外设串口1、4、Systic、Timer2、LED、IIC等,应该可以说明运行正常了。 AUTO Jump to APP This is APP DS3231 Time is 2018/02/11 1W 15:16:32 Soft reset in 3 secs 3 2 1 This is Bootloader DS3231 Time is 2018/02/11 1W 15:16:35 GSM is Alive +CSQ = 23 AUTO Jump to APP This is APP DS3231 Time is 2018/02/11 1W 15:16:52 Soft reset in 3 secs 3 2 1 This is Bootloader DS3231 Time is 2018/02/11 1W 15:16:55 GSM is Alive |
|
|
|
代码有问题
|
|
|
|
多么简单的问题啊
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1252 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1184 浏览 3 评论
2263 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1351 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1774 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 14:58 , Processed in 0.883540 second(s), Total 91, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号