2016-09-29
原理图,版本V1.1中的flash设计线路问题,SPI的miso和mosi接错
2016-09-15
更改自行车主控制芯片以及LDO,
使用STM32L151RCT6,LDO更换为R170N331D
造成的问题:
-
原来使用的是Stop模式,现在改为Standby模式,逻辑就会发生变化;
-
同时STM32L和STM32F的库函数代码风格不同,需要移植;
-
调试过程中发现STM32L的SPI1和SPI2使用的多事AF5,产生冲突。解决方法:其中一个使用模拟SPI的方式进行。
系统功耗问题
1、3.3V系统的功耗;外部IO的上拉或是下拉对其影响
2、电源LDO的自身功耗;目前使用SPX3819,在负载为12ua的时候,输入端电流65uA,LDO信号
stm32f1的低功耗问题:
From datasheet:
stop mode下的调试接口使能与否
voltage regulator
在进入stop模式前最好设定好外部IO的状态,因为它会保持io原来的state
wake up from stop , 工作在HSI时钟,8MHz
所以醒来后,需要设定相关的时钟,或是从新配置或是复位操作。
-
出现的问题是:
WFE可以使用,唤醒stop mode,但是WFI不可以唤醒 stop mode。
原因不是配置nvic和exti的问题,而是其它部分的影响。
-
程序中systick的影响,在进入stop模式前需要关闭systick,否则stop容易被唤醒。
-
电路中模块的影响,从stop 模式唤醒的时候,需要一个startup delay时间,如果过早开启外设,比如init_do()之后init_ble();或者init_tts()。
那么ram的内容将不会被保存,清零操作。
退出STOP模式时,注意外部大电流的外设影响。唤醒后,有个startup delay时间,如果早初始化BLE或是TTS外设。ram的东西就会丢失,相当于复位似的。
系统复位
1、外部硬件复位
2、上电复位
3、WWDG reset
4、IWDG reset
5、low power management reset
6、soft reset----重点
http://bbs.21ic.com/icview-382463-1-1.html
Cortex-M3 处理器含 3 个复位输入。如表 6-3 所示。
表 6-3 复位输入
复位输入 描述
PORESETn 复位整个处理器系统,JTAG-DP除外
SYSRESETn 复位整个处理器系统,NVIC 中的调试逻辑、FPB、DWT、ITM以及AHB-AP除外
nTRST 复位JTAG-DP
注:
nTRST 复位 JTAG-DP。如果设备不含 JTAG-DP,那么必须断开(tied off)该复位端。
6.3 Cortex-M3 复位方式
通过处理器设计中出现的复位信号,用户可以单独对设计中的不同元件进行复位。表
6-4 列出了这些复位信号和他们的组合形式,以及可能的应用。
表 6-4 复位方式
复位方式 SYSRESETn nTRST PORESETn 应用
上电复位 x 0 0 接通电源后复位,复位整个系统。冷复位
系统复位 0 x 1 复位处理器内核和系统元件,调试元件除外
JTAG-DP复位 1 0 1 复位JTAG-DP 逻辑
注:
PORESETn复位 SYSRESETn逻辑的超集(superset) 。
我是用的软复位
指令:*((u32 *)0xE000ED0C)=0x05fa0004;----用这句话,我试用了一下可以实现重启功能
现在就是执行上述指令时,MCU就挂了。除非再次上电复位才能成功。
http://blog.csdn.net/huangtonggao/article/details/6446208--汇编嵌入
http://www.51hei.com/mcu/2758.html
这个里面主要是说IO的设置对stop下的电流影响,但是我实际测试过,好像不是这样的配置 ---why?
个人测试后,觉得设置成模拟输入AIN方式。
低功耗模式下关闭调试接口---debug port disabeled
设置如下方式:
21ic问题咨询 eeworld提问
遇到两个问题:
1、进入后功耗做的不够低,490ua;
2、无法中断唤醒了。---程序中函数处理问题,中断。
2016-09-06
系统初始化后进入stop模式,功耗150uA,但是若退出stop,执行程序后,再进入stop模式,功耗将变大,800uA.(降至600uA)-------为什么呢?
初始化的时候开启了ADC功能,在进入stop模式时,需要关闭ADC功能,注意不要先关闭ADC时钟在执行adc_on disable,否则disable adc_on指令无效。
增加指令:
--- ADC_Cmd(ADC1, DISABLE); //使能指定的ADC1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE );
---
xc6220 1A LDO,
问题:进入低功耗,500uA的电流,如果在while(1)中做相关逻辑业务处理,出现此种高功耗,但是如果直接进入低功耗,则不会出现这个问题。如果直接进入低功耗模式,系统整体功耗,69uA.
下图是通过不同方式进入低功耗mode,系统功耗有差异。
原因:
在中断函数中调用的函数Stop_Mode( ),出现功耗较大。
修改为使用flag方式,在main函数中判断wakeupflag来进入和唤醒stop_mode( ),功耗测试正常。
问题:
进入stop模式后,唤醒的方式,有两种WFI和WFE,目前使用WFI方式唤醒有问题,无法唤醒,但是使用WFE方式唤醒可以。
解决:
systick中断影响,另外就是中断处理函数不应该太长。
问题:
如果电机转动卡住,此时播放语音失败。
处理方式:
需要将电机关闭,待语音播放完毕后,再重新开启电机转动
原因分析:
电源提供的电流不足,导致语音播放失败。
问题:
系统唤醒后,ram内存信息初始化数据,不是保留进入stop模式前的值,datasheet上指明preserve ram内容。
原因:
从stop唤醒后,系统启动未稳定,如果此时执行大电流消耗的设备,比如ble以及tts,会导致reset的发生。
解决方法:
外部大电流消耗的设备在从stop换醒后,延迟一段时间后,初始化外设。
-----未彻底解决的问题:
唤醒后,将所有的外设都打开,刷卡失败,或是tts播放失败,
解决方法:
分步骤初始化,需要的先初始化,不用到的时候,关闭该外部设备。主要的是Bluetooth,NRF24L01,以及TTS SYN6658.
----未彻底解决问题:
电机卡住
问题
偶尔发生卡片刷卡失败情况
问题;
TTS的ready信号,并不能表示播放结束,只是转换结束而已。所以tts操作需要根据播放声音长短后来关闭电源,否则会发生播放不完或是不能播放的情况。
解决方法:
增加检查tts是否ready的command。并且在播放结束时,等待本次播放ready,为下一次做准备。
问题:
长时间不使用,再次使用,有时候不能触发唤醒,或者是触发唤醒后,tts不播报语音。
---tts发出语音信息,可以量测到语音信号,但是pa没有正确驱动喇叭发声。
问题:从sotp mode唤醒后,电源vcc,出现一个下降的overshoot。启动出现问题。这个和初始化外部设备的多少有关系,比如唤醒后不初始化ble或者nrf24l01,则不会出现下降的overshoot
程序优化:
1、bikeid[4]使用uint32_t类型,----
2、stationid[4]使用uint32_t类型,---