你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4304|回复: 0

关于STM32F103VET6 GPIO不稳定原因

[复制链接]

2

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2010-4-17 11:35:29 | 显示全部楼层 |阅读模式
请各位大虾帮忙分析一下,芯片是STM32F103VET6用来驱动12864点阵液晶
硬件连接图为PB13--->LCD_RS           PB14--->LCD_RW          PB15--->LCD_E
                      PC6--->LCD_CS1          PC7--->LCD_CS2           PC8--->LCD_RET
                     PD8~PD15接到LCD_DB0~LCD_DB7
然后我用这几个GPIO驱动LED发光二极管
 PB0  PB1  PC5  PD0~PD5 PD7
系统滴答中断程序为////////////////////////////系统滴答/////////////////////////////////
void SysTick_Handler(void)
{
 TimeVar++;
 if(TimeVar%2==0)
  {
   GPIO_SetBits(GPIOB,GPIO_Pin_0);//GPIOB->ODR = (GPIOB->ODR & 0xFFFFFFFC);    //B0 B1
   GPIO_SetBits(GPIOB,GPIO_Pin_1);
   GPIO_SetBits(GPIOC,GPIO_Pin_5);//GPIOC->ODR = (GPIOC->ODR & 0xFFFFFFDF);    //C5
   GPIO_SetBits(GPIOD,GPIO_Pin_0);//GPIOD->ODR = (GPIOD->ODR & 0xFFFFFF40);    //D1 D2 D3 D4 D5 D7
   GPIO_SetBits(GPIOD,GPIO_Pin_1);
   GPIO_SetBits(GPIOD,GPIO_Pin_2);
   GPIO_SetBits(GPIOD,GPIO_Pin_3);
   GPIO_SetBits(GPIOD,GPIO_Pin_4);
   GPIO_SetBits(GPIOD,GPIO_Pin_5);
   GPIO_SetBits(GPIOD,GPIO_Pin_7);
 //  GPIOE->ODR = (GPIOE->ODR & 0x00FF);
  }
 else
  {GPIO_ResetBits(GPIOB,GPIO_Pin_0);//GPIOB->ODR = (GPIOB->ODR & 0xFFFFFFFC);    //B0 B1
   GPIO_ResetBits(GPIOB,GPIO_Pin_1);
   GPIO_ResetBits(GPIOC,GPIO_Pin_5);//GPIOC->ODR = (GPIOC->ODR & 0xFFFFFFDF);    //C5
   GPIO_ResetBits(GPIOD,GPIO_Pin_0);//GPIOD->ODR = (GPIOD->ODR & 0xFFFFFF40);    //D1 D2 D3 D4 D5 D7
   GPIO_ResetBits(GPIOD,GPIO_Pin_1);
   GPIO_ResetBits(GPIOD,GPIO_Pin_2);
   GPIO_ResetBits(GPIOD,GPIO_Pin_3);
   GPIO_ResetBits(GPIOD,GPIO_Pin_4);
   GPIO_ResetBits(GPIOD,GPIO_Pin_5);
   GPIO_ResetBits(GPIOD,GPIO_Pin_7);
 //  GPIOE->ODR = (GPIOE->ODR | 0xFF00);
  }  
}
液晶接口初始化程序为#define di               (   1 ODR & ~cs1) | (x ? cs1 : 0);
//#define LCD_CS2(x)             GPIOC->ODR = (GPIOC->ODR & ~cs2) | (x ? cs2 : 0);
//#define LCD_RET(x)             GPIOC->ODR = (GPIOC->ODR & ~reset) | (x ? reset : 0);
/* Reading DATA pins                                                          */
//#define LCD_DATA_IN           //(GPIOD->IDR  >> 8)
/* Writing value to DATA pins                                                 */
#define LCD_DATA_OUT(x)       GPIOD->ODR = (GPIOD->ODR & ~PINS_DATA) | (x CRH = (GPIOB->CRH & 0x000FFFFF) | 0x11100000; \
         GPIOC->CRL = (GPIOC->CRL & 0x00FFFFFF) | 0x11000000; \
         GPIOD->CRH = (GPIOD->CRH & 0x00000000) | 0x11111111;
/* Setting DATA pins to input mode                                            */
#define LCD_DATA_DIR_IN       GPIOD->CRH = (GPIOD->CRH & 0x00000000) | 0x88888888;
问题是,液晶显示正常,但系统滴答中断中的LED显示有时候不正常,LED应该是亮,但却熄灭了,或应该熄灭却亮了
如果我把液晶显示程序屏蔽掉,系统滴答中断里的LED指示灯就会正常工作,请问是什么问题呢,液晶和LED我都是单独设置的GPIO口
状态啊,可为什么LCD工作还是会影响到LED工作呢???
回复

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版