本帖最后由 南来之风 于 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始终无法显示!!绝望之际,决定检查杜邦线。。。果不其然,劣质产品用不了多久就默默失效了,唉!
更换了新的线缆,显示效果如下:
|