你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

rt-thread系统和fsmc冲突?

[复制链接]
xiang90721 提问时间:2017-6-17 19:15 /
本帖最后由 xiang90721 于 2017-6-17 19:15 编辑

不知道各位有使用过rt-thread系统么,我在调试时出现怪问题!使用STM32F429开发板(官方的那个)
不带操作系统时,移植emWin+tft屏(FSMC),运行正常(emWin的demo程序都是正常);
移植rt-thread系统进来,发现程序一直跑飞,最后发现在配置FSMC函数上,将此函数屏蔽,rt-thread系统能正常,否则程序就跑飞!!很是郁闷!!
FSMC配置如下:
static void LCD_FMCConfig(void)
{
        FMC_NORSRAMInitTypeDef  init;
        FMC_NORSRAMTimingInitTypeDef  timingWrite;
        FMC_NORSRAMTimingInitTypeDef  timingRead;

                /* ʹÄÜFMCʱÖÓ */
        RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE);

        /*-- FMC Configuration ------------------------------------------------------*/
        /*----------------------- SRAM Bank 4 ----------------------------------------*/
        /* FMC_Bank1_NORSRAM4 configuration */
        timingWrite.FMC_AddressSetupTime = 4; //5;
        timingWrite.FMC_AddressHoldTime = 0;
        timingWrite.FMC_DataSetupTime = 5; //6;
        timingWrite.FMC_BusTurnAroundDuration = 1;
        timingWrite.FMC_CLKDivision = 0;
        timingWrite.FMC_DataLatency = 0;
        timingWrite.FMC_AccessMode = FMC_AccessMode_A;

        timingRead.FMC_AddressSetupTime =4;// 5;
        timingRead.FMC_AddressHoldTime = 0;
        timingRead.FMC_DataSetupTime =5;// 6;
        timingRead.FMC_BusTurnAroundDuration = 1;
        timingRead.FMC_CLKDivision = 0;
        timingRead.FMC_DataLatency = 0;
        timingRead.FMC_AccessMode = FMC_AccessMode_A;

        init.FMC_Bank = FMC_Bank1_NORSRAM4;
        init.FMC_DataAddressMux = FMC_DataAddressMux_Disable;
        init.FMC_MemoryType = FMC_MemoryType_SRAM;
        init.FMC_MemoryDataWidth = FMC_NORSRAM_MemoryDataWidth_16b;
        init.FMC_BurstAccessMode = FMC_BurstAccessMode_Disable;
        init.FMC_AsynchronousWait = FMC_AsynchronousWait_Disable;       
        init.FMC_WaitSignalPolarity = FMC_WaitSignalPolarity_Low;
        init.FMC_WrapMode = FMC_WrapMode_Disable;
        init.FMC_WaitSignalActive = FMC_WaitSignalActive_BeforeWaitState;
        init.FMC_WriteOperation = FMC_WriteOperation_Enable;
        init.FMC_WaitSignal = FMC_WaitSignal_Disable;
        init.FMC_ExtendedMode = FMC_ExtendedMode_Enable;
        init.FMC_WriteBurst = FMC_WriteBurst_Disable;

        init.FMC_ReadWriteTimingStruct = &timingRead;
        init.FMC_WriteTimingStruct = &timingWrite;

        FMC_NORSRAMInit(&init);

        /* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
        FMC_NORSRAMCmd(FMC_Bank1_NORSRAM4, ENABLE);
}
理论上裸机使用此配置正确,没道理加了rt-thread就不行了,所以很郁闷!!
怀疑是否rt-thread初始化的外设和FSMC相冲突了,但屏蔽了rt-thread初始化配置的唯一外设-----串口(当然系统时钟不能屏蔽),也给屏蔽了,问题还是在!!所以彻底郁闷了
期盼大神给我指点指点!!谢谢!!
收藏 评论8 发布时间:2017-6-17 19:15

举报

8个回答
xiang90721 回答时间:2017-6-17 19:27:08
不是这个函数问题,确切的说是配置FSMC后,一产生FSMC时序(就是读写TFT屏)就会跑飞!!
黑皮男 回答时间:2017-6-19 21:09:47
xiang90721 发表于 2017-6-17 19:27
不是这个函数问题,确切的说是配置FSMC后,一产生FSMC时序(就是读写TFT屏)就会跑飞!! ...

看来在STM32上用rt-thread的有点少啊,帖子热度不够,不过感觉rt-thread的驱动模型写的还是挺有参考价值的,顶一下
xiang90721 回答时间:2017-6-20 20:15:17
黑皮男 发表于 2017-6-19 21:09
看来在STM32上用rt-thread的有点少啊,帖子热度不够,不过感觉rt-thread的驱动模型写的还是挺有参考价值 ...

今天搞定问题了,不是程序冲突,是断言函数的问题!!配置lcd 的FSMC有些参数没用到,我就没配,断言函数将参数配置有问题的用(void0)来写,在裸机时没问题,但不知道到了rt-thread系统上就跑飞了而且stlink都没法定位,,这个原因我也不清楚为啥!!
黑皮男 回答时间:2017-6-20 22:19:00
xiang90721 发表于 2017-6-20 20:15
今天搞定问题了,不是程序冲突,是断言函数的问题!!配置lcd 的FSMC有些参数没用到,我就没配,断言函数 ...

参数都有问题了,进入函数后不会引起错误吗
xiang90721 回答时间:2017-6-23 15:27:19
黑皮男 发表于 2017-6-20 22:19
参数都有问题了,进入函数后不会引起错误吗

STM32的库函数确实会对参数进行检查,比如FMC_NORSRAMInit函数,会对FMC_AddressHoldTime 做检查,因为配置LCD时这个参数没有用到,说以配置为0,但是FMC_NORSRAMInit内部断言assert_param检查范围应是1~15,我并没开启断言检查,所以根据断言函数执行会成((void)0),在裸机时没有问题,不知道为什么加了rt-thread系统后程序会跑飞,大神你知道不?
xiang90721 回答时间:2017-6-23 15:28:08
黑皮男 发表于 2017-6-20 22:19
参数都有问题了,进入函数后不会引起错误吗

是配置的参数不符合范围,但实际中这个参数并没用的
xiang90721 回答时间:2017-6-23 15:28:23
xiang90721 发表于 2017-6-23 15:28
是配置的参数不符合范围,但实际中这个参数并没用的

STM32的库函数确实会对参数进行检查,比如FMC_NORSRAMInit函数,会对FMC_AddressHoldTime 做检查,因为配置LCD时这个参数没有用到,说以配置为0,但是FMC_NORSRAMInit内部断言assert_param检查范围应是1~15,我并没开启断言检查,所以根据断言函数执行会成((void)0),在裸机时没有问题,不知道为什么加了rt-thread系统后程序会跑飞,大神你知道不?
xiang90721 回答时间:2017-6-23 15:29:00
STM32的库函数确实会对参数进行检查,比如FMC_NORSRAMInit函数,会对FMC_AddressHoldTime 做检查,因为配置LCD时这个参数没有用到,说以配置为0,但是FMC_NORSRAMInit内部断言assert_param检查范围应是1~15,我并没开启断言检查,所以根据断言函数执行会成((void)0),在裸机时没有问题,不知道为什么加了rt-thread系统后程序会跑飞,大神你知道不?

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版