OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2407|回复: 11

fmsc初始化死机问题请教大神

[复制链接]

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
发表于 2023-8-29 10:51:42 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 sjh666 于 2023-8-31 16:22 编辑

用100脚的F103VB进行FSMC初始化,然后程序死在初始化函数里面了有没有大神碰到过,详细情况马上发出(见2楼3楼),谢谢


感觉就是一执行FSMC_Bank1->BTCR。。。。就死机重启了




引脚编号PDPE
0
DB2
1
DB3
2
3
4
RD(NOE)
5
WR(NWE)
6
7
CS(NE1)DB4
8
DB5
9
DB6
10
DB7
11
CD(A16)
12
13
14
DB0
15
DB1




file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\865712120\QQ\WinTemp\RichOle\85F3N9$G853$I41SM(FZWPI.png


file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\865712120\QQ\WinTemp\RichOle\D(3M947`_W_@QOHG0TE)OK1.png


CPU

CPU

LCD

LCD
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-8-29 10:52:06 | 显示全部楼层
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
                        FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
                        FSMC_NORSRAMTimingInitTypeDef  writeTiming;
                              
                  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
                        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序
      FSMC_NORSRAMStructInit(&FSMC_NORSRAMInitStructure);
               
                        readWriteTiming.FSMC_AddressSetupTime = 0x01;         //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
                        readWriteTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(ADDHLD)模式A未用到      
                        readWriteTiming.FSMC_DataSetupTime = 0x0f;                 // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
                        readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
                        readWriteTiming.FSMC_CLKDivision = 0x00;
                        readWriteTiming.FSMC_DataLatency = 0x00;
                        readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A
                              
                        writeTiming.FSMC_AddressSetupTime = 0x00;         //地址建立时间(ADDSET)为1个HCLK  
                        writeTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(A               
                        writeTiming.FSMC_DataSetupTime = 0x03;                 ////数据保存时间为4个HCLK      
                        writeTiming.FSMC_BusTurnAroundDuration = 0x00;
                        writeTiming.FSMC_CLKDivision = 0x00;
                        writeTiming.FSMC_DataLatency = 0x00;
                        writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A
                       
                        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//  这里我们使用NE1 ,也就对应BTCR[6],[7]。
                        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址 FSMC_DataAddressMux_Disable
                        FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
                        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//存储器数据宽度为16bit   
                        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
            FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
                        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
                       
                        FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
                        FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
                        FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;        //  存储器写使能
                        FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
                        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
                        FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
                        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
                        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序
     
                  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置




跑库函数FSMC_NORSRAMInit()这个函数执行不下去,点了一个灯,看到是
FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] =
            (uint32_t)FSMC_NORSRAMInitStruct->FSMC_DataAddressMux |
            FSMC_NORSRAMInitStruct->FSMC_MemoryType |
            FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth |
            FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode |
            FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait |
            FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity |
            FSMC_NORSRAMInitStruct->FSMC_WrapMode |
            FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive |
            FSMC_NORSRAMInitStruct->FSMC_WriteOperation |
            FSMC_NORSRAMInitStruct->FSMC_WaitSignal |
            FSMC_NORSRAMInitStruct->FSMC_ExtendedMode |
            FSMC_NORSRAMInitStruct->FSMC_WriteBurst;
           程序死在这里
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-8-29 10:52:29 | 显示全部楼层
   //寄存器清零
                                //bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
                                //这里我们使用NE1 ,也就对应BTCR[0],[1]。      
                                       
                                FSMC_Bank1->BTCR[0]=0X00000000;
                                led_bit=1;
                                FSMC_Bank1->BTCR[1]=0X00000000;
                                FSMC_Bank1E->BWTR[0]=0X00000000;
                              
                                //操作BCR寄存器        使用异步模式
                                FSMC_Bank1->BTCR[0]|=1<<12;                //存储器写使能
                                FSMC_Bank1->BTCR[0]|=1<<14;                //读写使用不同的时序
                                FSMC_Bank1->BTCR[0]|=1<<4;                 //存储器数据宽度为16bit            
                                //操作BTR寄存器      
                                //读时序控制寄存器                                                            
                                FSMC_Bank1->BTCR[1]|=0<<28;                //模式A                                                                             
                                FSMC_Bank1->BTCR[1]|=1<<0;                 //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns(实际>200ns)                  
                                //因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
                                FSMC_Bank1->BTCR[1]|=0XF<<8;          //数据保存时间为16个HCLK                  
                                //写时序控制寄存器  
                                FSMC_Bank1E->BWTR[0]|=0<<28;         //模式A                                                                     
                                FSMC_Bank1E->BWTR[0]|=0<<0;                //地址建立时间(ADDSET)为1个HCLK
                                //4个HCLK(HCLK=72M)因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/4=24M=55ns           
                                FSMC_Bank1E->BWTR[0]|=3<<8;         //数据保存时间为4个HCLK      
                                //使能BANK1,区域4
                                FSMC_Bank1->BTCR[0]|=1<<0;                //使能BANK1,区域1

跑寄存器则是发现,程序死在
FSMC_Bank1->BTCR[0]=0X00000000;
                                led_bit=1;
FSMC_Bank1->BTCR[1]=0X00000000;
FSMC_Bank1E->BWTR[0]=0X00000000;
回复

使用道具 举报

0

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2023-4-2
在线时间
22 小时
发表于 2023-8-30 09:26:19 | 显示全部楼层
可以参考下我们的程序,可能是时序问题
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-8-30 13:51:53 | 显示全部楼层
真是不可爱 发表于 2023-8-30 09:26
可以参考下我们的程序,可能是时序问题

您好,目前库函数和寄存器的程序都是仿照原子哥的程序改的,另外还有一个问题,如果外设没有接入,会影响初始化程序往下运行吗,谢谢
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-8-31 16:24:00 | 显示全部楼层
之前原理图上传错误,现在补充一下,哪位大神可以帮忙看看,谢谢
QQ图片20230829104557.png
QQ图片20230829104630.png
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-9-1 10:56:02 | 显示全部楼层
自己拿144脚的片子和原子哥对应的FSMC程序试了一下,FSMC不连接外设也可以完成初始化
用100脚的不连接外设仍然死机在本帖提到的位置,是不是得考虑换个片子了
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-9-4 09:19:58 | 显示全部楼层
不要沉啊,网上查的到的办法都试了,就卡在初始化过不去,哪位大神遇到过指点一下不胜感激
回复

使用道具 举报

0

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2023-5-17
在线时间
28 小时
发表于 2023-9-4 13:39:56 | 显示全部楼层
不明觉厉
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-9-4 16:13:45 | 显示全部楼层
最新进展没啥招了准备换一个片子试试,就是搞不清楚为啥一执行FSMC_Bank1->BTCR。。。。就死机。还完片子以后带来后续
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-9-5 13:45:25 | 显示全部楼层
来更新一下情况,换了一个片子还是不行,初始化还是死在FSMC_Bank1->BTCR。。。。

准备先用GPIO直接驱动了
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-9-8 16:04:01 | 显示全部楼层
FSMC初始化死机问题仍未解决,改用GPIO口直接搭显示时序三天搞定显示一切正常速度也很OK
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 15:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表