×
单片机 > 单片机程序设计 > 详情

STM32中NVIC_Init导致的上电程序不运行

发布时间:2020-08-26 发布时间:
|

最近使用在STM32上使用ucosii的运行多任务时候遇到一个奇怪问题,我用到了4个串口,随着程序增大,出现了上电后不运行的情况,我用一个LED闪烁指示运行,使用STLINK进行debug没有问题,但重新上电运行就不行,硬件复位了也不行,排除了硬件问题、指针跑飞、任务堆栈溢出、卡死在某死循环 等可能性后,怀疑是哪句初始化问题,就屏蔽了所有初始化语句(LED的IO口配置除外),最后定位在一个串口的NVIC初始化语句上。


void open_usart_wireless(u32 bound)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  NVIC_InitTypeDef NVIC_InitStructure;


  RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2,ENABLE); 

//USART2_TX   GPIOA.9

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.9

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_Init(GPIOA, &GPIO_InitStructure);//


  //USART2_RX   GPIOA.10

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA10

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//

  GPIO_Init(GPIOA, &GPIO_InitStructure);//


  //Usart2 NVIC ÅäÖÃ

  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 3 ;//

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //

  NVIC_Init(&NVIC_InitStructure); //1、屏蔽这一句程序就可以上电正常运行,这个进行了多次试验过,屏蔽就好,不屏蔽就不运行


  USART_InitStructure.USART_BaudRate = bound;//

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;//

  USART_InitStructure.USART_StopBits = USART_StopBits_1;//

  USART_InitStructure.USART_Parity = USART_Parity_No;//

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //

  

  USART_Init(USART2, &USART_InitStructure); //

  USART_ClearITPendingBit(USART2,USART_IT_RXNE);//2、在没有屏蔽1、的情况下添加这一句,程序也可以上电正常运行,反复上电都正常

  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//

  USART_Cmd(USART2, ENABLE);   


}


通过上网搜索“STM32不运行 NVIC_Init ”,看到有位朋友在论坛发帖求助,情况和我类似,最后他自己解决了,就是要清一下中断,然后我也在初始化中添加了清串口接收中断,果然就可以了。我记得在谁家的例程里我也看到过这样的操作,初始化里清一下串口接收中断,可能是芯片是一个bug。从道理上来说这个问题说不通,遇到这种情况的人也许不多,如果有遇到了类似情况的看到这个希望能有所启发。

关键字:STM32  NVIC_Init  上电 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈msp430f5529入门(2)----时钟配置.例程分析