新手入门
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2012-3-14
- 在线时间
- 0 小时
|
本人纯新手,正在通过修改Alientek板的配套例程学习STM32。
已在板上成功运行了原子兄的OLED和LCD模块例程,可惜它们共用了PB口的很多引脚,无法同时驱动。
想法很简单,保持LCD不动,把OLED模块通过杜邦线连到PA口上——可惜修改软硬件后总是点不亮OLED(同样用杜邦线从PB口引出是亮的,线没问题),请高手指点。
具体改动如下:
(1)软件方面:
-----------------在oled.h中--------------------
#define OLED_RST PAout(11)
#define OLED_CS PAout(12)
#define OLED_RS PAout(13)//RS is DC, 命令/数据标志(0,读写命令;1,读写数据)。
#define OLED_WR PAout(14)
#define OLED_RD PAout(15)
//PA0~7,作为数据线
#define DATAOUT(x) GPIOA->ODR=(GPIOA->ODR&0xFF00)|(x&0x00FF); //输出
//使用4线串行接口时使用
#define OLED_SCLK PAout(0)
#define OLED_SDIN PAout(1)
。。。。。。。。。后面保持不变。。。。。
-----------------在oled.c中--------------------
void OLED_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
#if OLED_MODE==1
JTAG_Set(SWD_ENABLE);
GPIOA->CRL=0X33333333; //把A0~A7设成推挽输出模式
GPIOA->CRH&=0X00000FF0;
GPIOA->CRH|=0X33333003; //把A8和A11~A15设成推挽输出模式
GPIOA->ODR|=0XF9FF; //模仿PB设定(GPIOB->ODR|=0XFFFF;),把A0~A7,A8,A11~A15赋初值1
#else //SPI模式先不管了
#endif
OLED_RST=0;
delay_ms(100);
OLED_RST=1;
。。。。。。。。。后面保持不变。。。。。
}
-----------------在test.c中--------------------
注释掉了对PA口有操作的如下两行:
//uart_init(72,9600); //串口初始化
//LED_Init(); //初始化与LED连接的硬件接口
由于PA8未被OLED使用,且已设为推挽输出,在while(1)循环中恢复了LED0闪烁作为程序运行状态参考:
LED0=!LED0;
---------------------------------------------------
(2)硬件方面:
为USB串口下载程序保留了PA9、PA10的跳线,PA8留空,PA口其余引脚按定义连接到OLED模块无误。
症状:
程序编译通过,下载运行后能看到LED0按设定间隔闪烁,但OLED保持全黑无反应。万用表查过V3.3、GND、OLED_RST、OELD_CS几根引脚均无问题。尝试在uVision中模拟,看寄存器状态看得俺晕头转向,实在不知道问题出在哪,特来请教达人orz...
|
|