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

查看: 4263|回复: 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版