OpenEdv-开源电子网

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

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

[复制链接]

0

主题

12

帖子

0

精华

初级会员

Rank: 2

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

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


感觉就是一执行FSMC_Bank1->BTCR。。。。就死机重启了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-8-12
在线时间
11 小时
 楼主| 发表于 2023-8-29 10:41:58 | 显示全部楼层
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:42:41 | 显示全部楼层
                        //寄存器清零
                                //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;
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 18:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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