|
本帖最后由 EEFOCUS小白 于 2015-4-1 10:13 编辑 现在明白了我们的bit17对应的是FSMC的bit16,也就是A16了,所以我们的硬件连线应该是PA16了,也就是说HADDR 信号线是需要转换到外部存储器的内部AHB地址线,是字节地址。 给地址、将地址映射到外存储器(由HADDR的A25--A1映射到A24---A0) 注意点就是这个地方了,其他的时序问题和前面用IO模拟是差不多的,唯一的好处就是,我们有很多控制信号就不需要管了。最后贴上代码吧
/******************************************************************************** Function Name : LCD_WriteReg* Description : Writes to the selected LCD register.* Input : - LCD_Reg: address of the selected register.* - LCD_RegValue: value to write to the selected register.* Output : None* Return : None*******************************************************************************/void LCD_WriteReg(unsigned char LCD_Reg,unsigned int LCD_RegValue){ /* Write 16-bit Index, then Write Reg */ LCD->LCD_REG = LCD_Reg; //这里表示写寄存器 /* Write 16-bit Reg */ LCD->LCD_RAM = LCD_RegValue; //这里表示写寄存器的值(也就是数据)}/******************************************************************************** Function Name : LCD_ReadReg* Description : Reads the selected LCD Register.* Input : None* Output : None* Return : LCD Register Value.*******************************************************************************/u16 LCD_ReadReg(unsigned char LCD_Reg){ /* Write 16-bit Index (then Read Reg) */ LCD->LCD_REG = LCD_Reg; //这里表示先写寄存器 /* Read 16-bit Reg */ return (LCD->LCD_RAM); //读取值}/******************************************************************************** Function Name : LCD_WriteRAM_Prepare* Description : Prepare to write to the LCD RAM.* Input : None* Output : None* Return : None*******************************************************************************/void LCD_WriteRAM_Prepare(void){ LCD->LCD_REG = R34;}/******************************************************************************** Function Name : LCD_WriteRAM* Description : Writes to the LCD RAM.* Input : - RGB_Code: the pixel color in RGB mode (5-6-5).* Output : None* Return : None*******************************************************************************/void LCD_WriteRAM(u16 RGB_Code) { /* Write 16-bit GRAM Reg */ LCD->LCD_RAM = RGB_Code;}/******************************************************************************** Function Name : LCD_ReadRAM* Description : Reads the LCD RAM.* Input : None* Output : None* Return : LCD RAM Value.*******************************************************************************/unsigned int LCD_ReadRAM(void){ unsigned int dummy; /* Write 16-bit Index (then Read Reg) */ LCD->LCD_REG = R34; /* Select GRAM Reg */ /* Read 16-bit Reg */ dummy = LCD->LCD_RAM; return dummy;}/******************************************************************************** Function Name : LCD_SetCursor* Description : Sets the cursor position.* Input : - Xpos: specifies the X position.* - Ypos: specifies the Y position. * Output : None* Return : None*******************************************************************************/void LCD_SetCursor(unsigned int Xpos, unsigned int Ypos){ LCD_WriteReg(0x06,Ypos>>8); LCD_WriteReg(0x07,Ypos); LCD_WriteReg(0x02,Xpos>>8); LCD_WriteReg(0x03,Xpos); } 对比下之前的用IO驱动的方式,确实是少了一些控制信号! |
| 楼主乃绝对强人 |
| 谢谢支持 |
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
STM32固件库分享,超全系列整理
【MCU实战经验】基于STM32F103的二轮平衡车(6轴上位机 源代...
微信公众号
手机版