stm32 JTAG引脚复用问题 与 RA8835驱动

先上图:

这款LCD点阵型驱动芯片是RA8835,我采用的是8080时序,CS,A0,RD,WR与DB[0..7]

连接原理图:


DB3与DB4是JTAG引脚复用,我并非用JTAG-DP调试端口,而是SW-DP,只需要JTMS/SWDIO与JTCK/SWCLK。

但是stm32复位后,JTAG与SW默认同时开启的,即所有的JTAG端口均被系统保留,软件设置GPIO是不起作用的,所以导致DB4一直为高电平,DB3一直为低电平,ST的文档里说明,如果要释放多余的JTAG端口,需设置SWJ_CFG[2:0]为010,关闭JTAG-DP,启用SW-DP

并且开启端口复用的始终,在代码上体现是这样的:

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

缺一不可。谨记


最后是RA8835的驱动,与别的mcu基本类似,这里主要是stm32的端口配置

/**********************bsp**************************************/
#define LCD_CTRL_PORT   GPIOA
#define LCD_DATA_PORT   GPIOB
#define RCC_LCD_CTRL_PORT   RCC_APB2Periph_GPIOA
#define RCC_LCD_DATA_PORT   RCC_APB2Periph_GPIOB

#define CS_PIN          GPIO_Pin_4
#define A0_PIN          GPIO_Pin_5
#define WR_PIN          GPIO_Pin_2
#define RD_PIN          GPIO_Pin_3

/**********************bsp**************************************/

#define GPIO_PIN_L8     ((uint16_t)0x00FF)
#define GPIO_PIN_H8     ((uint16_t)0xFF00)

#define CS_ON()				GPIO_SetBits(LCD_CTRL_PORT, CS_PIN)
#define CS_OFF()			GPIO_ResetBits(LCD_CTRL_PORT, CS_PIN)

#define A0_ON()				GPIO_SetBits(LCD_CTRL_PORT, A0_PIN)
#define A0_OFF()			GPIO_ResetBits(LCD_CTRL_PORT, A0_PIN)

#define WR_ON()				GPIO_SetBits(LCD_CTRL_PORT, WR_PIN)
#define WR_OFF()			GPIO_ResetBits(LCD_CTRL_PORT, WR_PIN)

#define RD_ON()				GPIO_SetBits(LCD_CTRL_PORT, RD_PIN)
#define RD_OFF()			GPIO_ResetBits(LCD_CTRL_PORT, RD_PIN)

#define BKLCD_ON()			
#define BKLCD_OFF()			

//低8位为数据端口

#define lcd_CMD(cmdx)		GPIO_Write(LCD_DATA_PORT,(GPIO_ReadOutputData(LCD_DATA_PORT)&0xff00)|(cmdx))
#define lcd_DATA(datax)		GPIO_Write(LCD_DATA_PORT,(GPIO_ReadOutputData(LCD_DATA_PORT)&0xff00)|(datax))

  GPIO_InitTypeDef GPIO_InitStructure;
  //时钟
  RCC_APB2PeriphClockCmd(RCC_LCD_CTRL_PORT | RCC_LCD_DATA_PORT, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  /***************液晶数据口0~7*******************/
  GPIO_InitStructure.GPIO_Pin = GPIO_PIN_L8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);
  
  
    /*****控制端口***WR(PA2), RD(PA3), CS(PA4), A0(PA5)*****/
  GPIO_InitStructure.GPIO_Pin = CS_PIN | A0_PIN | RD_PIN | WR_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(LCD_CTRL_PORT, &GPIO_InitStructure);

别的注意控制端口的时序,数据锁存后的一定要有几百ns的延时,基本上没有多大问题。

下面移植ucGUI,待续。。。


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值