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

发布者:炫酷骑士最新更新时间:2019-01-15 来源: eefocus关键字:STM32  NVIC_Init  上电 手机看文章 扫描二维码
随时随地手机看文章

最近使用在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  上电 引用地址:STM32中NVIC_Init导致的上电程序不运行

上一篇:STM32 中断优先级原理
下一篇:STM32F0xx_EXTI中断配置详细过程-按键检测

推荐阅读最新更新时间:2024-03-16 16:22

STM32模拟SPI接口程序
做开发的时候经常需要用到模拟spi接口,这种写法不错的,网上很多类似的,我也拿来学习了。 #define MOSI_H GPIO_SetBits(GPIOB, GPIO_Pin_10) #define MOSI_L GPIO_ResetBits(GPIOB, GPIO_Pin_10) #define SCLK_H GPIO_SetBits(GPIOB, GPIO_Pin_13) #define SCLK_L GPIO_ResetBits(GPIOB, GPIO_Pin_13) #define MISO GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) unsigned char SPI
[单片机]
Keil MDK STM32系列(七) STM32F4基于HAL的PWM和定时器
配置 PWM 输出 选择芯片 System Core - SYS- Debug: Serial Wire 防止下次无法烧录 System Core - RCC- High Speed Clock (HSE): Crystal/Ceramic Resonator 启用外接高速晶振 Clock Configuration: (配置为最高84MHz)选择外部晶振, 把HSE和PLLCLK连上, 在HCLK上输入84回车, 软件会自动调节各节点倍数 Timers - TIM2 Clock Source: Internel Clock, 使用系统的时钟源 Channelx: PWM Generation CHx PWM输出 Counter
[单片机]
STM32 HAL库 串口DMA发送完成中断
近期使用STM32驱动MAX3485进行485通信,发现STM32F103C8并不自带硬件485首发功能,需要软件上控制IO高低来驱动MAX3485进行485接收、485发送。 根据MAX3485手册可得,进行485发送时给相应引脚高电平。其余时间为低电平进行485接收。因此需要找到串口DMA发送完成的回调函数,在发送完成后将引脚拉低。 在stm32f1xx_hal_uart.c中 /** @defgroup UART_Exported_Functions_Group2 IO operation functions * @brief UART Transmit and Receive functions * @verb
[单片机]
STM32低功耗状态的引脚配置
在STM32进入低功耗状态时,如果闲置||或者是其他的IO没有配置好。也将会增加不必要的功耗;所以在做低功耗设计的时候需要将闲置(保证系统稳定,其他的引脚据情况而定)全部设置为模拟输入配置。具体如下图所示,由此可以实现IO零消耗。
[单片机]
<font color='red'>STM32</font>低功耗状态的引脚配置
stm32 芯片与Cat的对应分类
最近在使用stm32l151cbu6开发一个项目,在查询datasheet关于DMA使用的时候,发现不同的cat分类,对应的功能还有些区别, 例如上面这个就是针对Cat.1和Cat.2。 这上面这个对应的就是Cat.3。 那么问题来了,怎么知道我的stm32l151cbu6是属于Cat.x呢,再慢慢翻datasheet,发现还真有。在P40页, 可以看到Cat分类是与flash大小直接相关的,这里面有个坑,表格里面的符号是“x”与“-”,‘x’反而表示flash大小与芯片型号的对应。往下看,我们还能看到更细致的芯片分类, 我项目的stm32l151cbu6属于STM32L 15XXB分类,对应的就是Cat.1分
[单片机]
<font color='red'>stm32</font> 芯片与Cat的对应分类
STM32开源开发环境的搭建
STM32开源开发环境的搭建 Eclipse+ GNU ARM Eclipse Plug-in+Sourcery G++ Lite Edition for ARM+OPENCD+Jlink的开源开发环境。 这个教程是去年刚开始做STM32的时候写的,当时还没开始用STM32,先琢磨了免费的开发环境搭建,因此写的这个教程可能有很多错误,最近在网上看到很多人在论坛里转载了这个教程,由于当初我在ourdev论坛上只是贴出了文字,并上传了一个pdf版本,因此这次在博客里更新一下。帖子中的内容暂时不更新了,后面会重新写一个教程,欢迎大家关注我的博客。 1.环境搭建 1.1 Eclipse的下载与安装 Eclipse 是一个开放源代码
[单片机]
<font color='red'>STM32</font>开源开发环境的搭建
嵌入式学习⑤——STM32嵌入式应用系统设计
前言 这次嵌入式学习的主要内容为可视化的代码跟踪调试、简单的hex文件编译并在Proteus上仿真运行、最后使用Altium Designer 进行原理图和PCB图的设计,都是我们学习STM32的工具。 一、基于跨平台多类型代码编辑器VScode 1.VScode的安装 从vscode官网下载最新版本,deb包下载地址:https://code.visualstudio.com/docs?dv=linux64 使用wget 下载地址 进行下载 安装:dpkg -i 安装包 安装成功后,执行code命令打开sacccaas界面 安装过程中由于安装包依赖关系而报错,解决方案如下: deb安装出现依赖问题可以执行
[单片机]
嵌入式学习⑤——<font color='red'>STM32</font>嵌入式应用系统设计
STM32笔记之十二:时钟不息工作不止,systic时钟应用
a) 目的:使用系统时钟来进行两项实验 周期执行代码与精确定时延迟。 b) 初始化函数定义: void SysTick_Configuration(void); c) 初始化函数调用: SysTick_Configuration(); d) 初始化函数: void SysTick_Configuration(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//时钟除8 SysTick_SetReload(250000); //计数
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved