最近用到STM32F103的芯片,芯片单步正常,直接上电不能正常工作,加上程序中里面有点bug.然后就各种莫名奇妙。
后面,单步状态把bug找完之后,理论上上电就可以正常跑了。但是总会出现莫名其面的问题。
比如,①单步正常,直接跑就异常。 ② 异常指的是程序不是死机或者hardfault而是不按照预想的逻辑,但是还是看似正常的运行。
③用镊子复位,其可以正常起来,
百度了一下:https://blog.csdn.net/weibo1230123/article/details/80664466
多数是查时钟复位电源,但是无效。最后发现是外设启动慢导致的。
首先,明白一个道理,单步逻辑对的,那么程序就是对的。不要被奇异的表象所蒙蔽了,凡事要讲科学。
那么你要保证,调试模式你的程序不会出现指针溢出或者hardfault.
第二步,查时钟电源复位是否正常。
连接文章指出:JLINK调试程序,程序直接下载到SRAM, BOOT1接地 在User FLash中启动。
那么重点检查 boot设计或者设置的是否 有问题。
第三步,有没有启动耗时的外设。
我的外挂外设是一个外部的 电位计和一个串口屏。分析是电位计需要延时一段时间后能够正常的操作。
关键字:stm 调试模式 上电自启动
引用地址:
stm32调试模式下运行正常,上电自启动后运行不正常排查分析
推荐阅读最新更新时间:2024-11-12 22:55
STM32设置为I2C从机
硬件平台:STM32F401 编辑器 : keil 5.18 操作系统:win7 一、I2C协议 在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变 。 起始和停止条件 SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件; SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。 寻址方式(7/10位地址方式) 第一个字节的头7 位组成了从机地址,最低位(LSB)是第8 位,它决定了传输的 普通的和带重复开始条件的7位地址格式方向。第一个字节的最低位是“0”,表示主机会写信息到
[单片机]
I2C死锁原因及解决方法
死锁总线表现为:SCL为高,SDA一直为低 现象:单片机采用硬件i2c读取E2PROM,当单片机复位时,会有概率出现再无法与E2PROM通信,此时SCL为高,SDA一直为低 原因:当单片机正在和E2PROM通信,如果主正好发生打算发第9个时钟,此时SCL为高,而从开始拉低SDA为低做准备(作为ACK信号),等待主SCL变低后,从再释放SDA为高。如果此时正好单片机复位,主SCL还没来得及变低,直接变成高电平,此时从还在等待SCL变低,所以一直拉低SDA;而主由于复位,发现SDA一直为低,也在等待从释放SDA为高。因此主从都进入一个相互等待的死锁状态。 解决方法:最好的方法是采用模拟i2c. 但由于已经配置成硬件i2c,
[单片机]
通过stm32cubemax配置与mpu6050通信兵读取数据,将数据串口打印
通过stm32cubemax完成配置,与mpu6050通信并读取数据,将数据通过串口打印出来 单片机源程序如下: /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include main.h #include i2c.h #include stm32f4xx_hal.h #include usart.h #include gpio.h #include stdio.h /* Private includes -----------------
[单片机]
美国加州拟采购2GW储能时长≥12h的长时储能系统
近日,美国加州公共事业委员会(CPUC)发布一份决议,提议将采购超过10.6GW的新能源,包含7.6GW的海上风电、1GW的地热系统及2GW的长时储能,其中1GW为多日/周持续时间储能(36~160h),另1GW为日间长持续时间储能(12~36h)。
这一决定是在加州能源委员会(CEC)能源研究与发展部最近发布的一份报告之后做出的,该报告强调了放电持续时间为8小时或更长时间的储能资源的重要性,因此决定将集中采购2GW的长时储能,且采用锂电池和抽水蓄能以外的其他创新型储能技术,以帮助政府实现脱碳目标。
在该决议通过后的6个月内,CPUC会向加州水资源部门(DWR)发出“非正式请求”,要求他们启动采购活
[新能源]
STM32用PWM +DMA驱动 WS2812
参考的代码: ------------------------------------WS2812B.c------------------------------------ #include WS2812B.h /* Buffer that holds one complete DMA transmission * * Ensure that this buffer is big enough to hold * all data bytes that need to be sent * * The buffer size can be calculated as follows: * number of L
[单片机]
STM32寄存器列表 I2C相关寄存器
I2C_CR1(控制寄存器1) 15位:SWRST软件复位,当被置位时,I2C处于复位状态,在复位该位前确信I2C的引脚被释放,总线是空的,定义:0(I2C模块不处于复位状态),1(I2C模块处于复位状态) 注:该位可以用于BUSY位为’1’,在总线上又没有检测到停止条件时。 13位:ALERT-SMBus提醒,软件可以设置或清除该位;当PE=0时,由硬件清除。定义: 0(释放SMBAlert引脚使其变高。提醒响应地址头紧跟在NACK信号后面),1(驱动SMBAlert引脚使其变低。提醒响应地址头紧跟在ACK信号后面) 12位:PEC数据包出错检测,软件可以设置或清除该位;当传送PEC后,或起始或停止条件时,或当PE=
[单片机]
如何为STM32编程节省代码空间?在IAR中配置CRC参数有窍门
前言 STM32全系列产品都具有CRC外设,对CRC的计算提供硬件支持,为应用程序节省了代码空间。CRC校验值可以用于数据传输中的数据正确性的验证,也可用于数据存储时的完整性检查。在IEC60335中,也接受通过CRC校验对FLASH的完整性进行检查。在对FLASH完整性检查的应用中,需要事先计算出整个FLASH的CRC校验值(不包括最后保存CRC值的字节),放在FLASH的末尾。在程序启动或者运行的过程中重新用同样的方法计算整个FLASH的CRC校验值,然后与保存在FLASH末尾的CRC值进行比较。 EWARM从v5.5版本之后开始支持STM32芯片的CRC计算。前面所说的计算整个FLASH的CRC校验值并保存在FLASH末
[单片机]
stm32 mmc卡写文件然后读出来 串口输出
硬件环境:神州一号板 软件环境:MDK 1、sd卡硬件初始化 PA5---------CLK PA6---------MISO PA7---------MOSI PB7---------CS void TurnToSD(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_A
[单片机]