芯片:
STM32F401CB,有64kB ram
软件:cubemx生成的IAR工程
功能:mcu控制
单片机采集i2c传感器数据,通过usb的virtual com port回传到PC(后期会在mcu本地处理)
问题1:接usb到pc后,可以在设备管理器中看到com口,但是串口助手无法打开。
尝试1:尝试修改iar堆栈大小
结果1:基本解决,可以传数据到PC,串口可以打开
为什么说基本解决呢,因为里边产生了更诡异的问题。
同样硬件3个样品,在A配置下,只有12能打开串口,3不能,在B配置下,3可以打开,12不能。
3个样品是同样的
PCBA,芯片都是同一批次在mouser购买的,不存在假货的问题。买来放了大概2年。
由于芯片有64kB RAM,这么小的堆栈,绝对不存在撑爆ram的问题。
问题2:为什么3个芯片需要不同的配置?
问题3:为什么堆栈设置大了反而打开不串口了?设置小了打不开倒可以理解,大了打不开完全没道理啊?
之后又有了一个新的问题,别人拿我的程序做了改动,逻辑更复杂了,然后发现串口无法打开。
我这改堆栈已经轻车熟路了,心想可能随随便便就搞定了,结果又出了幺蛾子。
他的程序逻辑也就复杂了一点,结果堆栈都要设置到0x5000才可以打开串口。
除此以外,还发现了更奇怪的问题。我查看map文件中的stack usage,stack用的其实很少:
就是stack比较要设置的跟heap一样大才行,基本stack只用了那么点,也不能设置小了,哪怕是设置成0x4F00都不会,都会导致串口无法打开。
问题4:为什么stack使用很小的情况下,却必须设置很大?要跟heap一样大才可以工作?
与操作系统有关系,在win7下不会出问题。在win10下更新最新的驱动也可以。
这种情况可能是其他的地方引起的吧。内存越界了?
初始程序是由cube生成的,就在main中增加了一个字符串,然后在while中发送这个字符串,应该没有内存越界的问题。
最终发现是驱动问题。
在win10下要使用最新版驱动,win7下旧版驱动可以。
一周热门 更多>