OpenEdv-开源电子网

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

关于STM32串行驱动12864液晶屏的几个小问题

[复制链接]

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-4-17
在线时间
0 小时
发表于 2014-5-12 18:39:00 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "stm32f10x.h" #include "delay.h" static __IO uint32_t TimingDelay; void RCC_Configuration(void); //void Delay(__IO uint32_t nTime); #define Line1 0x80//????? #define Line2 0x90//????? #define Line3 0x88//????? #define Line4 0x98//????? #define LCD_IO GPIOB #define CS GPIO_Pin_0 #define RW GPIO_Pin_3 #define CLK GPIO_Pin_1 #define PSB GPIO_Pin_4 #define RST GPIO_Pin_5 #define SET(n) GPIO_SetBits(GPIOB,n) //?????????? #define RESET(n) GPIO_ResetBits(GPIOB,n)//????? #define CMD (uint32_t)0xf8000000 //?? ??????????0xf8 #define DATE (uint32_t)0xfa000000 // ?? ????????0xfa #define Delay delay_ms void LCD_IOinit_OUT() //?????? ,????,????,???? { GPIO_InitTypeDef GPIO_InitStructure; SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_IO, &GPIO_InitStructure); } void LCD_Write(uint32_t cmd,uint8_t ddata)//LCD ??? { uint32_t temp=cmd; uint32_t i; RESET(CS); //???? temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12); SET(CS); //????,?????? for(i=0;i<24;i++) { if(temp&0x80000000)SET(RW); //?????,???1,??RW??1 else RESET(RW); //???0 RW??0 SET(CLK);//?????? ???????? Delay(2);//???? RESET(CLK);//???????,???? temp=temp<<1;//???? ,????? } RESET(CS); //????,?????? } void Display(uint8_t addr,uint8_t *hz) { LCD_Write(CMD,addr); Delay(3); while(*hz!='\0') { LCD_Write(DATE,*hz); hz++; Delay(3); } } void LCD_init()//????? { RESET(CS); //???? RESET(PSB);//PSB??,?????,?????? RESET(RST);//??RST Delay(100); SET(RST); Delay(40); LCD_Write(CMD,0x30);//8????? Delay(40); LCD_Write(CMD,0x0c);//???,??? Delay(40); LCD_Write(CMD,0x01);//?? Delay(40); LCD_Write(CMD,0x06);//????? AC+1 Delay(40); } int main() { delay_init(); //RCC_Configuration(); //delay_ms(1); SysTick_Config(72000); //??SYSTICK?????1ms?? LCD_IOinit_OUT(); LCD_init(); while(1) { Display(Line1,"????±?????"); Display(Line2,"????????????????"); Display(Line3,"???????±?ò??????"); Display(Line4,"?????????°????"); } } // void RCC_Configuration(void) // { // SystemInit(); // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); // } /*void Delay(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); }*/ void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } } [/mw_shl_code]


以上是我单片机的原理图还有程序。我想问的是 为什么我12864液晶屏 如果在上面程序上的IO改到PB的 8 9 10 11 12 的话液晶屏就正常显示,如果IO为 0 1 3 4 5 的话就不行 改成PA的 11 12 13 14 15也不行 我想问的是用这些引脚不行的原因是什么
可我在战舰开发板上使用同样的IO 只是吧PB改成PD 或者PE 也是用的 0 1 3 4 5可以正常运行在PB就不行 求解答 原子哥求指导。。。

最佳答案

查看完整内容[请看2#楼]

和JTAG共用了,需要禁止JTAG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-5-12 18:39:01 | 显示全部楼层
和JTAG共用了,需要禁止JTAG
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-12 18:39:01 | 显示全部楼层
回复【5楼】zero_up:
---------------------------------
要先使能AFIO时钟才关闭JTAG
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-12 20:29:22 | 显示全部楼层
同意1楼,与JTAG管脚公用的话先关闭JTAG
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-4-17
在线时间
0 小时
 楼主| 发表于 2014-5-13 08:09:56 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);   是在GPIO配置那里加上这条语句吗?
但我加了还是不行 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, DISABLE);  加这条也不行。。。。是我放错位置了吗?


void LCD_IOinit_OUT()
{

  GPIO_InitTypeDef GPIO_InitStructure;
  SystemInit();   
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
  GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_Init(LCD_IO, &GPIO_InitStructure);

}
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-4-17
在线时间
0 小时
 楼主| 发表于 2014-5-13 08:10:07 | 显示全部楼层
回复【3楼】Badu_Space:
--------------------------------- 回复【2楼】xiaoyan:
---------------------------------
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);   是在GPIO配置那里加上这条语句吗?
但我加了还是不行 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, DISABLE);  加这条也不行。。。。是我放错位置了吗?


void LCD_IOinit_OUT()
{

  GPIO_InitTypeDef GPIO_InitStructure;
  SystemInit();   
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
  GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_Init(LCD_IO, &GPIO_InitStructure);

}
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-4-17
在线时间
0 小时
 楼主| 发表于 2014-5-13 08:32:45 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
可以了。。。灰常感谢  那么GPIOA的 11 到15脚也不行 也是要关闭他们的复用功能吗?
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-13 12:34:44 | 显示全部楼层
回复【7楼】zero_up:
---------------------------------
2楼已经回答了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-29
在线时间
0 小时
发表于 2016-7-29 11:52:20 | 显示全部楼层
void Display(uint8_t addr,uint8_t *hz)

Display(Line1,\"????±?????\");   
俩句具体是什么意思啊大神
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 11:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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