OpenEdv-开源电子网

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

程序移植开发板问题

[复制链接]

20

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-2
在线时间
2 小时
发表于 2013-8-28 21:32:33 | 显示全部楼层 |阅读模式
由于开发板要统一,最后定的是STM32F103VET6。液晶的背光是PD13,复位是PE1,片选是PD7--FSMC NE1,RS接的是PD11---FSMC A16。原来用的一直是战舰的板子,现在不给用了。。
请问要移植程序的话除了驱动改成VET6之外其他那些代码需要改动的?(比如core_cm3和system_stm32f10x.c还有汇编代码哪些需要改的?)
主要今天尝试移植结果连液晶都没刷出来。
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
这个论坛上搜索了相关的,说是A几就有几个1。于是改成了#define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE))
结果还是白屏
。。
原子哥求指教啊。。。
LCD_BASE这个到底怎么配置,还有不同型号之间的移植。。。
坚持到底就是胜利!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-28 23:17:35 | 显示全部楼层
BASE没配置错,怀疑你的FSMC配置错了....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-28 23:18:30 | 显示全部楼层
给你个配置:
u16 i;
RCC->AHBENR|=1<<8;        //使能FSMC时钟   
   RCC->APB2ENR|=1<<3;      //使能PORTB时钟
RCC->APB2ENR|=1<<5;      //使能PORTD时钟
RCC->APB2ENR|=1<<6;      //使能PORTE时钟
  RCC->APB2ENR|=1<<8;       //使能PORTG时钟  
GPIOB->CRL&=0XFFFFFF0F; //PB1 推挽输出 背光
GPIOB->CRL|=0X00000030;    
//PORTD复用推挽输出 
GPIOD->CRH&=0X00FFF000;
GPIOD->CRH|=0XBB000BBB; 
GPIOD->CRL&=0X0F00FF00;
GPIOD->CRL|=0XB0BB00BB;     
//PORTE复用推挽输出 
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0XBBBBBBBB; 
GPIOE->CRL&=0X000FFFFF;
GPIOE->CRL|=0XBBB00000;      

//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE1 ,也就对应BTCR[0],[1]。     
FSMC_Bank1->BTCR[0]=0X00000000;
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    
//因为液晶驱动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

不过这个配置用的是A21,不是A16。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-2
在线时间
2 小时
 楼主| 发表于 2013-8-28 23:28:07 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子老师~
不过寄存器版本不是很懂。。。
我配置是这样的

GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
             FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; 
FSMC_NORSRAMTimingInitTypeDef  writeTiming;

             RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //????FSMC?±??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);//????PORTB,D,E,G???°AFIO?????????±??

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;  //PD13 ???ì???? ±???
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //???ì????
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  //PORTD???????ì????  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;  // //PORTD???????ì????  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //???????ì????   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 
  
//PORTE???????ì????  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  // //PORTD???????ì????  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //???????ì????   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure); 
  
  //FSMC NE1  LCD????
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; 
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  //FSMC RS---LCD???? ????/???? ????
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; 
  GPIO_Init(GPIOD, &GPIO_InitStructure); 

GPIO_SetBits(GPIOD, GPIO_Pin_13);            //LCD±????ò??

 
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;

 
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;     
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;   
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    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_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  // ????BANK1
坚持到底就是胜利!
回复 支持 反对

使用道具 举报

20

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-2
在线时间
2 小时
 楼主| 发表于 2013-8-28 23:30:32 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我找到个RS接A16的。但是他没配置LCD_BASE
里面找到行怀疑是BASE的
#define Bank1_LCD_D    ((uint32_t)0x60020000)    //?????????????·   
#define Bank1_LCD_C    ((uint32_t)0x60000000)  //?????????????·
是不是换过来就是#define LCD_BASE        ((u32)(0x60000000 | 0x60020000))啊??
还是要用1fffe那个
坚持到底就是胜利!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-28 23:48:20 | 显示全部楼层
回复【5楼】VictorScarlet:
---------------------------------
NO.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-2
在线时间
2 小时
 楼主| 发表于 2013-8-29 00:16:49 | 显示全部楼层
回复【6楼】 正点原子 :
---------------------------------
这是同学的工程,他能正常用,不过这类代码风格实在受不了。。。MDK4.7A也不能编译,习惯了原子的代码风格。
原子老师帮忙看下如果要把战舰板子FSMC驱动的液晶改成这个小板子上的要怎么改
00020000,0001FFFE,0001FFFF都试过了。。
液晶的背光是PD13,复位是PE1,片选是PD7--FSMC NE1,RS接的是PD11---FSMC A16。这些是板子上定死的接口。。。
这是同学的工程。。原子哥看下,拜托了!!

fsmc_vet6.rar

633.95 KB, 下载次数: 95

TFT9325.rar

6.63 KB, 下载次数: 111

坚持到底就是胜利!
回复 支持 反对

使用道具 举报

20

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-2
在线时间
2 小时
 楼主| 发表于 2013-8-29 00:47:40 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
又查了遍。。。终于发现问题了。。。初始化之后加上个复位就没问题了。
不过战舰版程序没有复位,应该是和MCU同时复位吧

板子设计的时候看来有问题。。
坚持到底就是胜利!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-29 09:44:32 | 显示全部楼层
回复【8楼】VictorScarlet:
---------------------------------
是的,战舰板的复位:LCD,MCU共用。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-2
在线时间
2 小时
 楼主| 发表于 2013-8-29 12:09:32 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
今天测了下一些程序,发现有些程序会白屏,比如红外遥控实验,但是有些就正常显示,像PWM DAC(我把定时器改成TIM4),白屏是什么原因造成的啊??
坚持到底就是胜利!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-29 14:36:58 | 显示全部楼层
回复【10楼】VictorScarlet:
---------------------------------
不应该哦,你会不会是下错代码了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-2
在线时间
2 小时
 楼主| 发表于 2013-8-29 15:02:41 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
粗心下错了。。。才想起来是忘记注释掉printf,红外那个的串口初始化被我删掉了,然后编译没报错,所以下进去白屏了
坚持到底就是胜利!
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2023-8-11
在线时间
0 小时
发表于 2023-8-12 02:07:53 | 显示全部楼层
VictorScarlet 发表于 2013-8-29 00:47
回复【6楼】正点原子:
---------------------------------
又查了遍。。。终于发现问题了。。。初始化之后 ...

复位后,延时时间要足够长。这个问题我查了好几天。无意间,逐步仿真,变相增长了延时时间。屏幕点亮成功。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2023-8-11
在线时间
0 小时
发表于 2023-8-12 02:08:54 | 显示全部楼层
正点原子 发表于 2013-8-29 09:44
回复【8楼】VictorScarlet:
---------------------------------
是的,战舰板的复位:LCD,MCU共用。

这个地方估计很多人移植会卡住这个地方。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 04:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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