OpenEdv-开源电子网

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

关于stm32fsmc操作的几点疑惑,

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-1-6
在线时间
0 小时
发表于 2015-7-20 15:48:26 | 显示全部楼层 |阅读模式
5金钱
用的是icore2,自带138扩展片选信号,cs1外接原子哥的液晶屏,cs0用于与fpga通信,但是在fsmc初始化的时候发现如果我先初始化BCR2和BTR2这两个寄存器,BCR1也会发生改变

[mw_shl_code=c,true] FSMC_Bank1->BTCR[2]=0X00000000; FSMC_Bank1->BTCR[3]=0X00000000; FSMC_Bank1E->BWTR[2]=0X00000000; FSMC_Bank1->BTCR[2]|=1<<12; //?????? FSMC_Bank1->BTCR[2]|=1<<14; //?????±?ò FSMC_Bank1->BTCR[2]|=1<<4; //16bit //??×÷BTR?????÷ //???±?ò?????????÷ FSMC_Bank1->BTCR[3]|=0<<28; FSMC_Bank1->BTCR[3]|=1<<0; //???·?¨???±?? FSMC_Bank1->BTCR[3]|=0XF<<8; //????±????±?? //???±?ò?????????÷ FSMC_Bank1E->BWTR[2]|=0<<28; //???? FSMC_Bank1E->BWTR[2]|=0<<0; //???·?¨???±?? FSMC_Bank1E->BWTR[2]|=3<<8; //????±????±?? //????BANK1,0???ò FSMC_Bank1->BTCR[2]|=1<<0; [/mw_shl_code]

只初始化了BCE2和BTR2,按理说BCR1应该是0x000030D2,但是他被使能了,而且导致了我CS1上也没有信号了,只有加了BCR1和BTR1的初始化才可以用,纠结了好久还没找到原因,希望原子哥指点迷津,还有一个就是我看原子哥在读外部SRAM的例程中,初始化fsmc之前都需要开启相应引脚的复用功能,但是在lcd和sram中都开启了,也就是初始化了两次,删掉后面的会有什么影响吗?















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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-20 22:59:19 | 显示全部楼层
仿真的时候,是修改哪个寄存器,导致BCR1的值变化的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-1-6
在线时间
0 小时
 楼主| 发表于 2015-7-21 13:18:46 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
在使能fsmc的时钟之后,RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
执行的是  RCC->AHBENR |= RCC_AHBPeriph;
时钟的配置我就直接用得库函数,可读性好一些,不会是因为这个吧?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-21 23:18:19 | 显示全部楼层
回复【3楼】idea:
---------------------------------
RCC_AHBPeriph是个什么东东?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-1-6
在线时间
0 小时
 楼主| 发表于 2015-7-25 19:59:08 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
RCC_AHBPeriph是void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)这个FSMC外设时钟开启的函数的形参,
我调用的时候写的是RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
 #define RCC_AHBPeriph_FSMC              ((uint32_t)0x00000100)
这里贴不了图,在中文参考手册第60页,6.3.6 AHB 外设时钟使能寄存器 (RCC_AHBENR)的第8位就是
位8  FSMCEN:FSMC时钟使能
由软件置’1’或清’0’。
0:FSMC时钟关闭;
1:FSMC时钟开启。
这句话就是操作RCC_AHBENR这个寄存器,将FSMC这个外设的时钟打开,但是一旦我开启这个时钟,BCRx这四个寄存器里面就会有一个初始值,我调试了几次看了一下,发现这些初始值都是固定的,我程序删到只剩开启这个时钟的时候还是这样,自动使能FSMC->BCR1这个模块,这是系统自定义的初始值吗?但是我一直没找到在哪里有提到,而且我系统复位之后这些寄存器都是的内容都是0,不应该是初始值啊?
(这两天有事回的比较晚,不好意思)
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 20:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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