打印
[STM32F1]

stm32调试fsmc不成功

[复制链接]
6031|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
whjsdhr|  楼主 | 2014-8-18 09:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
fsmc驱动tft弄了2天了,还是不行, tft驱动芯片是ili9163, 但是我用stm32的io口直接模拟,就可以显示,这说明连线没有问题,ili9163初始化也没问题,现在
就怀疑是fsmc配置的问题,但是看了这么久也没有看出问题来,快要崩溃了,哪位好心人可以帮忙看看啊。

下面是代码
#define rFSMC_BCR1  (*(volatile unsigned int *)0xA0000000)  // SRAM/NOR片选控制寄存器1
#define rFSMC_BTR1  (*(volatile unsigned int *)0xA0000004)  // SRAM/NOR片选时序寄存器1
#define rFSMC_BCR2  (*(volatile unsigned int *)0xA0000008)  // SRAM/NOR片选控制寄存器2
#define rFSMC_BTR2  (*(volatile unsigned int *)0xA000000C)  // SRAM/NOR片选时序寄存器2
#define rFSMC_BWTR2  (*(volatile unsigned int *)0xA000010C)  // SRAM/NOR写时序寄存器2

void fsmc_init()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //开启fsmc时钟


        //下面配置的管脚有部分是外扩的sram的,关于sram的寄存器配置就不发上来了,

        GPIO_InitStructure.GPIO_Pin = 0xFFB3;            //PORTD 复用推挽输出

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = 0xFF83;            //PORTE 复用推挽输出
        GPIO_Init(GPIOE, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = 0xF03F;            //PORTF 复用推挽输出
        GPIO_Init(GPIOF, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = 0x023F;            //PORTG 复用推挽输出
        GPIO_Init(GPIOG, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA, GPIO_Pin_0 );



     //lcd_init                              lcd的片选连到fsmc_cs2

          rFSMC_BCR2=0x00001049;      //使用模式B,禁用扩展模式     
          rFSMC_BTR2=0x10030e0e;        //地址建立时间和数据的保持时间都设得比较大

}

//************************************************************************************************************

#define command  (*(volatile unsigned int *)0X64000000)
#define data  (*(volatile unsigned int *)0X6400ffff)
void write_command(unsigned char addr1)
{
      command=addr1;
}
void write_para(unsigned char para1)
{
          data=para1;

}
沙发
mmuuss586| | 2014-8-18 12:28 | 只看该作者
拿示波器看下,FSMC的相关信号线,有没有波形;

使用特权

评论回复
板凳
mmuuss586| | 2014-8-18 12:31 | 只看该作者
以前找的FSMC资料,你l可以参考下;
FSMC.rar (3.21 MB)

使用特权

评论回复
地板
红木甲板| | 2014-8-18 13:57 | 只看该作者
FSMC配置8位数据模式A0才有用,16位宽用的是HADDR[25:1],看看配置有木有弄对

使用特权

评论回复
5
whjsdhr|  楼主 | 2014-8-18 14:37 | 只看该作者
mmuuss586 发表于 2014-8-18 12:31
以前找的FSMC资料,你l可以参考下;

谢谢,现在我在家里,没有示波器

使用特权

评论回复
6
whjsdhr|  楼主 | 2014-8-18 14:39 | 只看该作者
红木甲板 发表于 2014-8-18 13:57
FSMC配置8位数据模式A0才有用,16位宽用的是HADDR[25:1],看看配置有木有弄对

我用的是8位的,RS线是fsmc_A0,所以写寄存器是操作0x64000000,最低位位0,读数据是操作地址0x6400ffff,最低位为1,应该没错吧

使用特权

评论回复
7
songchenping| | 2014-8-18 14:46 | 只看该作者
我认为是NWE 和NOE 的时序没有弄对吧。

使用特权

评论回复
8
IJK| | 2014-8-18 17:13 | 只看该作者
1. 如果没有示波器,很麻烦的,事倍功半
2. 如果实在想调一下,可以考虑用万用表,输出信号频率100k左右,通过改变占空比,一般能测量出相应的直流电平来

使用特权

评论回复
9
icecut| | 2014-8-18 19:32 | 只看该作者
要注意8bit的时候哪8根线有效.FSMC可是低8bit有效哦..
可以搜我以前在这板块发的视频
小i与液晶屏

使用特权

评论回复
10
whjsdhr|  楼主 | 2014-8-19 07:46 | 只看该作者
谢谢大家,昨天我先让stm32循环的发命令,然后用万用表测了一下,发现nOE有问题,直接驱动nOE管脚也不能输出高电平,可能芯片有部分管脚虚焊吧,今天再看看,至于为什么用io口模拟可行,其实当时lcd的显示有时会花屏,有时正常,也许有地方接触不良。

使用特权

评论回复
11
icecut| | 2014-8-19 08:44 | 只看该作者
焊接问题,工程师的大忌啊

使用特权

评论回复
12
tuzihog| | 2014-8-24 23:26 | 只看该作者
icecut 发表于 2014-8-19 08:44
焊接问题,工程师的大忌啊

不错,焊接质量确实值得重点关注。

使用特权

评论回复
13
峰狂战队| | 2014-8-27 11:22 | 只看该作者
mmuuss586 发表于 2014-8-18 12:28
拿示波器看下,FSMC的相关信号线,有没有波形;

版主你好  想请教个问题  您有空吗   也是关于FSMC的

使用特权

评论回复
14
mmuuss586| | 2014-8-27 12:11 | 只看该作者
峰狂战队 发表于 2014-8-27 11:22
版主你好  想请教个问题  您有空吗   也是关于FSMC的

比较忙;
有问题直接说吧;

使用特权

评论回复
15
峰狂战队| | 2014-8-29 11:15 | 只看该作者
mmuuss586 发表于 2014-8-27 12:11
比较忙;
有问题直接说吧;

现在在做一块主控板,板子搭载DSP的28335芯片,利用FPGA的飓风2代EP2C144芯片桥接100脚STM32F103,起初规划是用双口RAM通信,后来改用FIFO通信,现在的情况是,DSP与FPGA读写都正常,读写频率是36.86MHZ,但ARM这边的FSMC使用出现问题,由于100脚的STM32的地址A0到A15采用与数据线复用模式,所以在FSMC使用模式上我们选择了模式A,即异步模式,STM32主频72MHZ,FSMC频率为36MHZ,当DSP写数据到STM32时,经FPGA仿真发现写的数据都是正确的,但ARM这边读的时候数据线的数据也是正确的,但用JLINK仿真查看地址数据时,发现数据不对,我写16个数据进去(从1到16)但仿真看到的都是C、D、E、F,改变写的数据还是这样,不知道是怎么回事?  另外,ARM写数据的时候,数据线上有数据,但FPGA一直没有检测到,没有写进去,片选和读写使能都是有效的,这个现在不知道哪里出了问题?

使用特权

评论回复
16
峰狂战队| | 2014-8-29 13:28 | 只看该作者
icecut 发表于 2014-8-19 08:44
焊接问题,工程师的大忌啊

现在在做一块主控板,板子搭载DSP的28335芯片,利用FPGA的飓风2代EP2C144芯片桥接100脚STM32F103,起初规划是用双口RAM通信,后来改用FIFO通信,现在的情况是,DSP与FPGA读写都正常,读写频率是36.86MHZ,但ARM这边的FSMC使用出现问题,由于100脚的STM32的地址A0到A15采用与数据线复用模式,所以在FSMC使用模式上我们选择了模式A,即异步模式,STM32主频72MHZ,FSMC频率为36MHZ,当DSP写数据到STM32时,经FPGA仿真发现写的数据都是正确的,但ARM这边读的时候数据线的数据也是正确的,但用JLINK仿真查看地址数据时,发现数据不对,我写16个数据进去(从1到16)但仿真看到的都是C、D、E、F,改变写的数据还是这样,不知道是怎么回事?  另外,ARM写数据的时候,数据线上有数据,但FPGA一直没有检测到,没有写进去,片选和读写使能都是有效的,这个现在不知道哪里出了问题?

使用特权

评论回复
17
峰狂战队| | 2014-8-29 16:48 | 只看该作者
本帖最后由 峰狂战队 于 2014-8-29 16:53 编辑
峰狂战队 发表于 2014-8-29 11:15
现在在做一块主控板,板子搭载DSP的28335芯片,利用FPGA的飓风2代EP2C144芯片桥接100脚STM32F103,起初规 ...

你看看我的STM32读片选和使能信号  好像不对,与手册时序图有区别



黄色的是读使能,蓝色的是片选,读使能中间的那个高电平不知是咋回事,另外,我在FPGA中检测片选和读使能的低电平就发数据,这时候,STM32中怎么没有接收到,一直是CDEF,请问这个应该怎么操作才对?

使用特权

评论回复
18
地瓜patch| | 2014-8-29 21:29 | 只看该作者
whjsdhr 发表于 2014-8-19 07:46
谢谢大家,昨天我先让stm32循环的发命令,然后用万用表测了一下,发现nOE有问题,直接驱动nOE管脚也不能输 ...

我去,这种问题还能纠结这么久

使用特权

评论回复
19
biechedan| | 2014-8-29 23:28 | 只看该作者
使用例程

使用特权

评论回复
20
biechedan| | 2014-8-29 23:29 | 只看该作者
这个网上应该很多的吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

1

粉丝