本帖最后由 xiaofei558008 于 2021-4-1 18:00 编辑
现在问题是DeInit了各个外设(USART,TIM, CAN ,SPI等),结果CoreReset进入Bootloader之后,在跳回App,要么一直在DMA中断里,要么外设CAN通信不上(CAN的寄存器配置完全一样);求大侠帮助;
是否还有啥操作不正确的;
代码如下:
/* Reset TIMs.
*/
HAL_TIM_Base_DeInit(&htim2);
HAL_TIM_Base_DeInit(&htim3);
HAL_TIM_Base_DeInit(&htim4);
HAL_TIM_Base_DeInit(&htim5);
HAL_TIM_Base_DeInit(&htim6);
/* Reset UARTS.
*/
LL_USART_DeInit(USART1);
LL_USART_DeInit(USART6);
HAL_UART_DeInit(&huart2);
HAL_UART_DeInit(&huart3);
HAL_UART_DeInit(&huart5);
/* Reset SPI.
*/
HAL_SPI_DeInit(&hspi1);
/* ## Reset CAN1.
*/
HAL_CAN_DeInit(&hcan1);
HAL_CAN_DeInit(&hcan2);
/* Reset DMA.
*/
HAL_DMA_DeInit(&hdma_tim4_ch2);
HAL_DMA_DeInit(&hdma_tim5_ch1);
HAL_DMA_DeInit(&hdma_uart5_rx);
HAL_DMA_DeInit(&hdma_uart5_tx);
HAL_DMA_DeInit(&hdma_usart2_rx);
HAL_DMA_DeInit(&hdma_usart2_tx);
HAL_DMA_DeInit(&hdma_usart3_rx);
HAL_DMA_DeInit(&hdma_usart3_tx);
DMA1->HIFCR |= 0x0f7d0f7d;
DMA1->LIFCR |= 0x0f7d0f7d;
DMA2->HIFCR |= 0x0f7d0f7d;
DMA2->LIFCR |= 0x0f7d0f7d;
/* Stop Systick.
*/
SysTick->CTRL = 0X00;
SysTick->LOAD = 0;
SysTick->VAL = 0;
/* Clear all IRQ enable bits & Penfing Flag.
*/
for(uint8_t index = 0; index < 8; index ++)
{
NVIC->ICER[index] = 0xFFFFFFFF;
NVIC->ICPR[index] = 0xFFFFFFFF;
}
/* Reset Clock.
*/
HAL_RCC_DeInit();
/* Disable IRQs.
*/
__set_FAULTMASK(1);
/* Only CoreReset.
*/
__DSB();
SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_VECTRESET_Msk);
__DSB();
|