zhouguoping

  • 2020-04-03
  • 发表了主题帖: rt-thread在IAR环境编译时,.icf文件编写注意事项

           最近折腾RT-Thread系统,因我的MCU为LPC1778,并且个人倾向使用IAR环境,于是查看源码有LPC1768的IAR工程.拷贝1768下面的IAR工程文件,然后用IAR打开做适当的修改.然后编译通过.项目中加了LWIP,下载测试,程序跑飞!        经过单步跟踪,发现初始化lwip到memp_init()时程序跑飞,跑飞问题竟然是RT创建线程时申请的内存在lwip静态分配的内存池中,导致memp_init初始化RAM时将RT创建的线程给冲了,诡异!!查看了多个RT的IAR工程,其中的rt_system_heap_init写法都是如下: 那也就是说代码执行蓝色部分,再将IAR的map文件开启,查看map文件,内存使用顺序是:.data CSTACK HEAP .bss,原来如此??那也就是IAR的.icf文件的问题,查看.icf文件(从LPC1768下拷贝,并做修改),没啥问题:是按:readwrite, block CSTACK, block HEAP的顺序分配的,也就是说RAM的最后是HEAP区,map文件显示怎么有问题呢?实际单步跟踪也是有问题,RT的HEAP就在.icf文件的HEAP之后,后来搜网络,看到有人提问怎么将HEAP放置于.bss之后,于是找到了以下写法,也就是分开来写,经过试验分3行写可行,是按书写的先后顺序分配.将后两行合并也行,并且后面两个的内容前后换位,map文件中的顺序也会跟着换位,但就是3个一起写不行.我使用的IAR版本是7.60.2,不知是我IAR版本的问题还是.icf文件写法有误,反正导致的结果就是有问题.特此记录,那天你也不幸来到这,但愿能提供点参考.

  • 2020-03-19
  • 回复了主题帖: STM32F030F4P6多通道ADC DMA采样数值为4095问题总结

    stcanx 发表于 2020-1-28 21:48 我使用F030F4P6采集6路ADC的时候出现AD值与电压值对不上的情况,后来加了一句HAL_ADCEx_Calibration_Start( ...
    我用标准库,自己写的代码,也调用了校准,我的值是对的,就是PA4配置为UART时,如果与5V的TTL电平连接时,会影响PA1(码值4095),PA0是好的.

  • 回复了主题帖: STM32F030F4P6多通道ADC DMA采样数值为4095问题总结

    gs001588 发表于 2020-1-28 15:28 是用STM32CubeMX生成的工程配置吗? 你目前应该还没找到问题的根源
    我用的是标准库,自己写的代码.

  • 2020-01-15
  • 发表了日志: STM32F030F4P6多通道ADC DMA采样数值为4095问题总结

  • 发表了主题帖: STM32F030F4P6多通道ADC DMA采样数值为4095问题总结

    本帖最后由 zhouguoping 于 2020-1-15 10:55 编辑     最近调试STM32F030F4P6多通道ADC DMA定时触发采样时,碰到鬼了!此鬼折腾了我2天多的时间总算得出结论。     电路原理图:                                                    现象描述:     PA0,PA1外接2路模拟量,PA2,PA3当UART TTL电平使用,然后启用DMA 2通道定时器1的TRGO触发采样。第一版板子都调试成功了,第二版稍微修改了一下板子尺寸,元器件布局之类的,总之,原理上就将LED从PA4移到了PA5,其他都没有动。然后焊接板子调试,奶奶的,见鬼了!PA0接了其他传感器,PA1接了个TMP36,DMA缓存数组0的值(接其他传感器的值)正确,1的值(TMP36)为4095。     捉鬼过程:     1、测硬件,VCCA=3.28,VCC=3.28,REST=3.3V。么发现问题,因为板子元器件密度比较大,怀疑是不是底线没接好?因地线是走线加覆铜,而电源线专门走的20mil的线,么得怀疑。然后地线飞了两个线后问题依旧!     2、查代码,没发现啥问题。因使用IAR开发,FLASH的15扇区留作存参数,FLASH容量不够用了,将优化级别设置为Medium,怀疑是不是程序优化带来的问题?然后精简程序,想将优化级别改为Low,但是怎么折腾还是没达到目的,最后将串口部分功能注视掉,优化级别设置为Low,问题依旧!     3、修改代码中的怪相:将ADC_ChannelConfig(ADC1, ADC_Channel_0, ADC_SampleTime_55_5Cycles);中的ADC_SampleTime_55_5Cycles改为ADC_SampleTime_1_5Cycles,通道1的值不再是4095,但还是与外部测量的电压值对不上,比如0.8V的输入,缓存数组1里面的值是1600左右,后来发现,将通道转换时间或者是ADC的CLK调整的越高,采样值越低,越慢采样值越大。     4、因之前代码板子都是好的,并且之前的板子上的元器件已经拆到新板子上了,也就没法对比?第二天早上再搜网页,发现一网友也见过此鬼!“STM32F030的ADC严重问题”。原文连接 http://bbs.eeworld.com.cn/thread-464556-1-1.html 豁然想起也用示波器测测看,发现TMP36的信号线上叠加了一个2us的方波,而且将与电脑的RX拔掉就没了,再测RX线是5V的TTL电平,问题应该就在于这个5V的TTL电平吧?然后给5V的RX线中串接一个10K的电阻,一切正常了。这就是问题的结局。           问题回顾:      第一版用的是自制的3.3V TTL与电脑通信,故一切OK!第二版直接采用USB转232 TTL(TTL为5V电平,未测,之前不知)            疑惑:      PA4管脚的电平不对?为什么影响到了PA1?为什么么有影响到PA0?再说PA4都配置为UART管脚了,怎么又牵扯到芯片内部的模拟量的东东(当然完全没关系估计是不可能的!)?这么说来,那通信之类的干扰岂不是对模拟量影响很大?难道不是芯片的BUG?

最近访客

< 1/1 >

统计信息

已有29人来访过

  • 芯币:32
  • 好友:--
  • 主题:2
  • 回复:3
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言