本帖最后由 南来之风 于 2023-12-21 20:25 编辑
按照计划,本次准备驱动OLED屏幕。
WBZ451主版上的mikroBUS接头的Pinout细节如下:
手头的扩展板上适配树莓派PICO的,可以用于本次测试软件SPI驱动oled,扩展板原理图如下:
根据硬件连接图,在MCC中配置相应的引脚输出为GPIO模式:
定义好相关的API用于操作OLED:
#define OLED_SCL_Clr() SCL_GPIO_RA7_Clear()//CLK
#define OLED_SCL_Set() SCL_GPIO_RA7_Set()
#define OLED_SDA_Clr() SDA_GPIO_RA10_Clear()//DIN
#define OLED_SDA_Set() SDA_GPIO_RA10_Set()
#define OLED_RES_Clr() RES_GPIO_RA8_Clear() //RES
#define OLED_RES_Set() RES_GPIO_RA8_Set()
#define OLED_DC_Clr() DC_GPIO_RA9_Clear() //дÃüÁî 0
#define OLED_DC_Set() DC_GPIO_RA9_Set() //дÊý¾Ý 1
#define OLED_CS_Clr()
#define OLED_CS_Set()
#define OLED_CMD 0 //???ü??
#define OLED_DATA 1 //??????
由于WBZ451使用了RTOS,对于刷新OLED的任务,也要创建相应的Task: xTaskCreate((TaskFunction_t) _OLED_Display,
"OLED_Tasks",
1024,
NULL,
1,
&xOLED_Display);
void _OLED_Display( void *pvParameters ){
OLED_Init();
OLED_Clear();
vTaskDelay(1000/portTICK_PERIOD_MS);
OLED_Clear();
OLED_ShowChar(10,40,'P',16,1);
OLED_ShowChar(20,40,'I',16,1);
OLED_ShowChar(30,40,'C',16,1);
OLED_ShowString(10,20,"WBZ451",16,1);
OLED_Refresh();
vTaskDelay(5000/portTICK_PERIOD_MS);
while(1){
GPIO_RB7_Toggle();
}
}
经过反复的排线,软件检查,OLED始终无法显示!!绝望之际,决定检查杜邦线。。。果不其然,劣质产品用不了多久就默默失效了,唉!
更换了新的线缆,显示效果如下:
|